如果应用在股票上,组合类策略的回测和实盘也很重要。请问有计划支持吗?或者您预估自己开发的难度有多大?
谢谢张老师!
我可以成功运行您的代码,除了实盘的那部分有点问题:
1) 初始化的时候还是使用了RQdata, 不是IB的数据源
2) 最后有报错, 请参看下面的log
最后有个问题,请问能不能回测基于多品种套利的策略?
-----------log----------------------
从数据库读取准备数据, 实盘运行
2019-10-16 20:43:56.730160 RQData数据接口初始化成功
UnboundLocalError Traceback (most recent call last)
<ipython-input-9-8f99f830ac94> in <module>
6 engine.event_engine.register(EVENT_CTA_LOG, process_log_event)
7 cta_engine = engine.main_engine.add_app(CtaStrategyApp) #加入app
----> 8 cta_engine.init_engine()
9 cta_engine.add_strategy("DoubleMaStrategy","DoubleMaStrategy_IB_12087792_v1", "12087792.IDEALPRO",{"fast_window":10, "slow_window": 50})
10 sleep(10)
~\vnpy\vnpy\app\cta_strategy\engine.py in init_engine(self)
105 """
106 self.init_rqdata()
--> 107 self.load_strategy_class()
108 self.load_strategy_setting()
109 self.load_strategy_data()
~\vnpy\vnpy\app\cta_strategy\engine.py in load_strategy_class(self)
752
753 path2 = Path.cwd().joinpath("strategies")
--> 754 self.load_strategy_class_from_folder(path2, "strategies")
755
756 def load_strategy_class_from_folder(self, path: Path, module_name: str = ""):
~\vnpy\vnpy\app\cta_strategy\engine.py in load_strategy_class_from_folder(self, path, module_name)
767 [module_name, filename.split(".")[0]])
768
--> 769 self.load_strategy_class_from_module(strategy_module_name)
770
771 def load_strategy_class_from_module(self, module_name: str):
UnboundLocalError: local variable 'strategy_module_name' referenced before assignment
用Python的交易员 wrote:
已经在master分支修复,请手动下载更新下试试吧
谢谢您!问题解决了
BTW,请问正确的手动更新方法是:
我也遇到相同问题,在楼主的错误之后,我遇到问题如下:
23:24:20 初始化CTA回测引擎
23:24:20 策略文件加载完成
23:24:20 RQData数据接口初始化成功
23:24:37 ----------------------------------------
23:24:37 IF88.CFFEX-1m开始下载历史数据
23:24:38 数据下载失败,触发异常:
Traceback (most recent call last):
File "C:\vnstudio\Lib\site-packages\vnpy\app\cta_backtester\engine.py", line 365, in run_downloading
data = rqdata_client.query_history(req)
File "C:\vnstudio\Lib\site-packages\vnpy\trader\rqdata.py", line 132, in query_history
adjust_type="none"
File "C:\vnstudio\Lib\site-packages\rqdatac\decorators.py", line 133, in wrap
return func(args, **kwargs)
File "C:\vnstudio\Lib\site-packages\rqdatac\services\get_price.py", line 111, in get_price
pf = get_minbar(order_book_ids, start_date, end_date, fields, duration, market)
File "C:\vnstudio\Lib\site-packages\rqdatac\services\get_price.py", line 377, in get_minbar
"get_minbar", order_book_ids, start_date, end_date, fields, duration, market
File "C:\vnstudio\Lib\site-packages\rqdatac\decorators.py", line 61, in wrap
return func(args, kwargs)
File "C:\vnstudio\Lib\site-packages\rqdatac\thread_local.py", line 34, in execute
raise e
File "C:\vnstudio\Lib\site-packages\rqdatac\thread_local.py", line 30, in execute
return self._get_connection().execute(method, *args, kwargs)
File "C:\vnstudio\Lib\site-packages\rqdatac\connection.py", line 120, in execute
msg_type, body = self._read_one_packet()
File "C:\vnstudio\Lib\site-packages\rqdatac\connection.py", line 88, in _read_one_packet
raise get_error(code)(msg)
rqdatac.share.errors.PermissionDenied: login session num reached MAX limit