数据我导入数据库了,setting是配置好的,直接就可以使用了!
直接运行main.py即可:
主界面长这样:
通过“功能”菜单打开“回测”界面:
点击回测,就可以运行策略啦:
经典的DualTrust策略,年化19.81%,这是基于分钟线的操作。
如下是vnpy内置带的策略,后续我会补充:
仔细对比下来,vnpy有一个缺点——写策略特别麻烦,为了完美还原和兼容实盘的逻辑,就是tick是一个一个到达的逻辑,它甚至没有向量化计算指标,每个值是数据到达后现算的。
比如, 以dualthrast策略为例,要计算14天的max_high。
它其实是自己递归着算的
last_bar = self.bars[-2] if last_bar.datetime.date() != bar.datetime.date(): if self.day_high: self.day_range = self.day_high - self.day_low self.long_entry = bar.open_price + self.k1 * self.day_range self.short_entry = bar.open_price - self.k2 * self.day_range self.day_open = bar.open_price self.day_high = bar.high_price self.day_low = bar.low_price self.long_entered = False self.short_entered = False else: self.day_high = max(self.day_high, bar.high_price) self.day_low = min(self.day_low, bar.low_price)
这会带出一个问题,如果结果不好,到底是策略不行,还是策略有bug。
我们应该把精力专注在策略和因子的研发上,这也就是Quantlab的初心,基本上就是低代码或者零代码写策略,只要你的因子计算没写错,信号天达没写错,策略就是对的!
由于vnpy最初是做期货实盘接口起家,后面补充的backtesting,所以backtesting只是一个补充。
vnpy双均线的核心代码:
1、on_bar的时候,计算双均线指标(在实盘的时候,数据是依次到达和合成的,确实需要每次都计算一下最新的指标)。
fast_ma = am.sma(self.fast_window, array=True) self.fast_ma0 = fast_ma[-1] self.fast_ma1 = fast_ma[-2] slow_ma = am.sma(self.slow_window, array=True) self.slow_ma0 = slow_ma[-1] self.slow_ma1 = slow_ma[-2] cross_over = self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1 cross_below = self.fast_ma0 < self.slow_ma0 and self.fast_ma1 > self.slow_ma1 if cross_over: if self.pos == 0: self.buy(bar.close_price, 1) elif self.pos < 0: self.cover(bar.close_price, 1) self.buy(bar.close_price, 1) elif cross_below: if self.pos == 0: self.short(bar.close_price, 1) elif self.pos > 0: self.sell(bar.close_price, 1) self.short(bar.close_price, 1)
2、传统量化框架里的写法:
if crossover(self.ma1, self.ma2):
self.buy()
elif crossover(self.ma2, self.ma1):
self.sell()
当然,传统量化框架,如何直接平移到实盘,这是一个要思考的问题。
当然国内期货允许同时开多单和空单,所以先平后开的操作,不过这个小细节都好办。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103459
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!