数据我导入数据库了,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()
当然,传统量化框架,如何直接平移到实盘,这是一个要思考的问题。
当然国内期货允许同时开多单和空单,所以先平后开的操作,不过这个小细节都好办。
CTA系列,从vnpy开始是挺好的选择。
原计划是使用backtesting.py,但考虑到后续对接实盘,多标的,本地化等多种原因,目前看vnpy还是最成熟且经过实战检验,也是完善的社区支持。
它是“插件化”的结构,因此需要自己去下载多个工程,然后组出出来。(我没有用软件的方式来安装,因为金融这个事情,所有代码最好是已知的才放心)。
我没有使用vntrader studio,直接使用代码运行的:
总体观感,相比多数开源软件,vnpy的完成度还是比较友好的。但相对成熟软件,还有距离。我估计很多同学未必能跑得起来。
另外就是数据一定要导入到数据库里,或者使用RQData(付费的),这对于想简单尝试一下的同学,略有门槛。
吾日三省吾身
有些事情,需要释放一些大脑带宽才能想得清楚。
在你焦虑,迷茫,不知往什么方向走时,停下来,放空一下。
其实没什么大不了,有时候,事情反而明朗了。
星球的老朋友都清楚,咱们的Quantlab,有很重的bt(一个小众的回测框架,主要是算子,积木式写策略)和Qlib的身影(主要是因子表达式)。
这个框架天然适合大类资产配置,股票多因子,多标的轮动等。
但仔细想来,这个适合什么场景呢?
适当公募基金做指增,或者私募做增值。————说白了,都是代客理财。
只要是代理,收益来源很大一部分就是管理费,当然业绩需要有保证,才能收到管理费。
所以,为什么现在市场很多公司开始做”指增“——跑盈指数就好了,市场beta不用管了。私募好一点,多数有绝对收益要求。
因此,大家更关心控制回撤与夏普比。——最好的方法是什么呢?——分散。
比如公募基金是有明确规定,单标的不得超过组合的10%。
——分散当然可以有效降低风险,不过收益也会随之减少。
对于多数自营的量化普通人的逻辑,我昨天说的大部分做量化以及想接触量化人的目标是——每天1%。每天1%可能夸张了,但更像风险投资的逻辑,一级市场VC的逻辑是1%的投资胜率,但1个公司投资回报可能是1000倍(高赔率)。那仍然是十倍的回报(1%的投资1000倍)。
推演一下如下逻辑,仍然是分散:
比如把仓位分成20份,每次5%。可以同时跑20个策略。止损,让利润奔跑。做好加减仓的精细化管理。
轮动其实是粗放式的,一般仓位就不太重要。或者说是严格限制风险头寸。
而单标的而言,是精细化管理,什么时候止损,什么时候加仓。
这里的逻辑就是CTA。——杠杆、多空,T+0。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103460
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!