vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 71
声望: 0

米筐before_trading函数功能介绍:
before_trading(context)
可选择实现的函数。每天在策略开始交易前会被调用。不能在这个函数中发送订单。需要注意,该函数的触发时间取决于用户当前所订阅合约的交易时间。举例来说,如果用户订阅的合约中存在有夜盘交易的期货合约,则该函数可能会在前一日的 20:30 触发,而不是早晨 08:00.

-----------------------------------分隔符---------------------------------
米筐before_trading函数功能可以让用户在实盘和回测中每日盘前都**取到历史数据**并训练svm模型,在vnpy的策略类里需要实现这个需求,有以下两个疑惑:

问题描述
一、我理解实际业务中(非回测)通过每天重新实例化策略可以实现每个交易日触发on_init(self),但是在回测过程中(假设回测30个交易日),要如何实现回测中30个交易日中的每个交易日开盘前都触发on_init(self)? 目前看到的策略示例,都是回测过程中仅执行一次初始化,然后回测完所有交易日。
二、我想训练多个svm模型,需要在盘前花较长时间完成,回测中每天训练盘前svm模型的函数是否可以写在on_init(self)里么,这个函数里面能取历史数据么,需要使用至少5000根bar数据。如果on_init(self)不能取数据训练svm模型,那应该写在那里?

求教两个问题!感谢大佬!

Administrator
avatar
加入于:
帖子: 4749
声望: 278

回测可以通过on_bar收到的bar.datetime.day,来判断是否换日,换日后则立即进行一次你要跑的svm拟合,再去执行后面正常的策略逻辑即可。

注意实盘中,要在盘前自己跑完拟合,配置到策略里,不要开盘后跑拟合。。。

Member
avatar
加入于:
帖子: 71
声望: 0

用Python的交易员 wrote:

回测可以通过on_bar收到的bar.datetime.day,来判断是否换日,换日后则立即进行一次你要跑的svm拟合,再去执行后面正常的策略逻辑即可。

注意实盘中,要在盘前自己跑完拟合,配置到策略里,不要开盘后跑拟合。。。

谢谢大佬指导!大佬,我理解是对于我们vnpy这种以类的形式创建实例化策略的,不太容易直接在类里面实现盘前运行(before_trading)逻辑对么?
我想尽力实现回测代码和实盘代码的一致性(米筐有before_trading,实盘代码和回测代码完全一致,回测完可直接运行实盘),有没有办法让vnpy的回测逻辑和实盘逻辑 都能有这个“before_trading”规则(这样代码比较统一)?

Administrator
avatar
加入于:
帖子: 4749
声望: 278

可以自己在回测引擎层扩展下,逻辑和上面讲的类似,换日的时候调用一次on_before_trading这个策略函数即可

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号