VeighNa量化社区
你的开源社区量化交易平台
330815977's Avatar
Member
离线
78 帖子
声望: 0

algo.py: stop_trading函数中写log self.write_log("停止定价") 可能是一个笔误吧?: ----->self.write_log("停止交易")

波动率管理里面的"拟合"是什么意思? 我看了代码没有看懂~~~。
重置,好像是把定价隐波置为中值隐波?
+0.1%, -0.1% pricing_impv 加减0.001?
"拟合" 没看明白,这个pricing_impv 是从哪里来的?好像不是由期权价格得到的,mid_impv, ask_impv,bid_impv才是,。。

IO股指期权选择什么定价模型?Black 76 欧式吗? Black-76 欧式? Black-Scholes 欧式? 区别

vnpy-2.0.9 OptionMaster OptionMaster base.py :
CHAIN_UNDERLYING_MAP 只有股指期货期权, 商品期货期权代码没有加到映射表中去,
我修改了增加了商品期货期权的代码:
CHAIN_UNDERLYING_MAP = {
"510050_O.SSE": "510050",
"IO.CFFEX": "IF",
"HO.CFFEX": "IH",
"m_o.DCE":"m",
"c_o.DCE":"c",
"i_o.DCE":"i",
"TA.CZCE":"i",
"SR.CZCE":"SR",
"CF.CZCE":"CF",
"MA.CZCE":"MA",
"cu_o.SHFE":"cu",
"au_o.SHFE":"au",
"ru_o.SHFE":"ru"
}

File ".\run.py", line 47, in <module>
from vnpy.app.option_master import OptionMasterApp
File "C:\ProgramData\VNConda\lib\site-packages\vnpy-2.0.9-py3.7.egg\vnpy\app\option_master__init.py", line 3, in <module>
from .engine import OptionEngine, APP_NAME
File "C:\ProgramData\VNConda\lib\site-packages\vnpy-2.0.9-py3.7.egg\vnpy\app\option_master\engine.py", line 25, in <module>
from .pricing import (
File "
init__.pxd", line 918, in init binomial_tree_cython
ValueError: numpy.ufunc size changed, may indicate binary incompatibility. Expected 216 from C header, got 192 from PyObject

这两天升级上vnpy-2.0.9, ubuntu linux。
参照 《聚宽数据(JDDataSDK)集成方案(试用期长达一年)http://www.vnpy.com/forum/topic/1472-ju-kuan-shu-ju-jddatasdk-ji-cheng-fang-an-shi-yong-qi-chang-da-yi-nian》也对接上了聚宽数据方案。
其间,遇上了一个小BUG, 我不确定Windows下面是否同样,估计应该也会有同样的问题,由于聚宽数据方案 接口jqdata.py基本上和 米筐数据方案rqdata.py 差不多,因此,我在聚宽数据方案遇到的这个问题 可能在米筐数据接口那个文件rqdata.py也同样会有(我猜):
jqdata.py rqdata.py 这两个文件,RqdataClient 类里面都有一个函数: query_history(self, req: HistoryRequest),这里面有关枚举Interval的两个转换:
是这样的:
rq_interval = INTERVAL_VT2RQ.get(interval)
adjustment = INTERVAL_ADJUSTMENT_MAP[interval]
这两个转换在文件开头有定义:
INTERVAL_VT2RQ = {
Interval.MINUTE: "1m",
Interval.HOUR: "60m",
Interval.DAILY: "1d",
}

INTERVAL_ADJUSTMENT_MAP = {
Interval.MINUTE: timedelta(minutes=1),
Interval.HOUR: timedelta(hours=1),
Interval.DAILY: timedelta() # no need to adjust for daily bar
}
这个在cta_strategy/engine.py(CTA引擎) query_bar_from_rq函数传过来的参数 是可以的,数据也可以正常下载,它传给 query_history(self, req: : HistoryRequest)的参数req.interval 确实是Interval枚举类型,然后经过上述的两个字典的转换是可以得到结果的。
但问题出在,假如是由cta_backtester,也不是图形界面上策略回测那个UI,如果是在那个UI上面下载历史数据按钮,这样的话,它传递到query_history(self, req: : HistoryRequest)的参数req.interval ,就不对了,因为它是从图形界面上的那个组合框(就是选择1m,1h,d,w......的那个组合框),它实际上传递过来的是组给框当前项目上的文字字符串"1m", ”1h","d","w"..., 它实际上是Interval.value ! 而由它来作为字典的键来查询,得到的是空值 ,所以,后面下载是下载不到数据的!
因此,app/cta_backtester, app/cta_strategy这两方面传过来的参数不一致,导致了这个BUG。。。

以下是我的修改方案:(因为我是先按照 cta_backtester传来的参数改的)
jqdata.py rqdata.py 这两个文件里面的这两个字典键改一下:

INTERVAL_VT2RQ = {
Interval.MINUTE.value: "1m",
Interval.HOUR.value: "60m",
Interval.DAILY.value: "1d",
}

INTERVAL_ADJUSTMENT_MAP = {
Interval.MINUTE.value: timedelta(minutes=1),
Interval.HOUR.value: timedelta(hours=1),
Interval.DAILY.value: timedelta() # no need to adjust for daily bar
}
增加一个:
INTERVAL_JQ2VT = {
"1m": Interval.MINUTE,
"60M":Interval.HOUR,
"1d":Interval.DAILY,
}
然后在 def query_history(self, req: HistoryRequest):函数里面修改这一句:
bar = BarData(
symbol=symbol,
exchange=exchange,
interval = INTERVAL_JQ2VT.get(interval) , # interval=interval, 这一句转换回来
datetime=row.name.to_pydatetime() - adjustment,
open_price=row["open"],
high_price=row["high"],
low_price=row["low"],
close_price=row["close"],
volume=row["volume"],
gateway_name="RQ"
)
这样 cta_backtester就可以正常下载了。
然后,再cta_strategy/engine.py 修改一句:
def query_bar_from_rq(
self, symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime
):
"""
Query bar data from RQData.
"""
req = HistoryRequest(
symbol=symbol,
exchange=exchange,
interval=interval.value, # interval=interval, 这里转换一下,传value进去,和cta_backtester那边一致。
start=start,
end=end
)
data = rqdata_client.query_history(req)
return data

这样两边都可以用了。

目前vnpy-2.0.x 用关系型数据库sql...时只有两张表,一个是bar数据,一个是tick,所有的合约,所有的时间框架下的数据,全部揉在一个表里面,两个表全部在一个数据库文件中,实际使用中,这个数据库文件相当大,至少GB级别的(包含回测时用的数据量)
这里的问题是:
数据库访问检索太费时间了,如果一边运行着vnpy, 同时一边浏览检索数据库,vnpy很大概率会抱怨数据库被其锁了,同样的问题当订阅很多的合约行情的时候。。。。
为什么不设计成按照各个合约,各个时间框架 分别不同的Tab表格中去? 或者直接用不同的db文件? 相比起把所有的数据全部揉到一个db文件中一个tab中,那个速度提升不是一个、几个数量级别的。。。

vnpy-2.0.9 ubuntu下面报错:cannot import name 'black_76_cython' from 'vnpy.app.option_master.pricing'

vnpy/app/option_master/pricing/black_76_cython.pyd 应该是windows下面的,linux下面的vnpy-2.0.9发行包里面没有提供, 也没有提供源码可以编译的,这个问题怎么破呢?

可不可以把vnpy-1.9.2下面的pricing编译的拿过来用?

vnpy可不可以实现多账户自动跟单?

能不能考虑 在vnpy/app/data_recorder/engine.py class RecorderEngine : close函数的最开头处,考虑增加K线收盘操作,保证郑交易最后一根K线能推入数据库中
def close(self):
for vt_symbol in self.bar_recordings:
bg = self.get_bar_generator(vt_symbol)
bg.generate()

self.active = False
    if self.thread.isAlive():
        self.thread.join()

vnpy-2.0.5 自定义策略回测,我看过FAQ
"14.如果要自定义策略,那么把策略python文件放在哪里?
A:可以放在文件夹C:\ProgramData\VNConda\Lib\site-packages\vnpy\app\cta_strategy\strategies;或者是放在用户的运行时目录下"
这里面说的一个是安装目录(需要管理员权限,每次很麻烦,特别是在策略还在编写调试过程中的时候)
一个是“用户的运行时目录下”,这个是example/vn_trader/run.py这个运行目录下吗? 放在这个目录下面则没有作用,抓不到这个目录下的策略
所以,我想问,有没有办法做:
1,先不污染vnpy的安装目录,在一个另外的数据目录里面来回测自定义策略?
2, 或者vnpy主界面上的策略回测可以选择目录路径动态加载自定义的策略文件?而不是每次只在重新启动的时候才会在安装目录里面一次性加载那些预置的策略?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】