大概率,会启用pybroker。
底层引擎换成pybroker后,重构完成:
一个很重要的原因,其实咱们现在的框架,与框架之间耦合不多。就是在再平衡环境调用了一下api。因此,咱们换引擎很容易,而且与大家无关,是透明的,对大家无感。
为何要换?
backtrader代码是严谨,但很多方式确实是上个世纪的东西了。python也在进化。
pybroker的调用代码如下——特别简洁,而且所有代码要读完都特别容易:
class Engine: def __init__(self, df: pd.DataFrame, config: ProjConfig, global_observer=None): self.strategy = StrategyAlgos(df, config, global_observer) self.result = None def run(self): self.result = self.strategy.backtest() return self.result def analysis(self): logger.debug('回测完成,开始分析...') self.result.orders.to_csv('orders.csv') print(self.result.orders)
还有很多优点,比如天然支持多标的(backtrader要取时间最大的),轮动,机器学习(WFA算法)等。
最大的一个动因是:backtrader要实现再平衡的话,就是有些要买,有些要买,非常麻烦,你得自己来计算哪个先卖,否则cash不够。而pybroker由框架决定, 我只需要给它调仓表就好了(order_target_percent)。
看pybroker的代码——BacktestMixin,先执行cover, sell,然后buy。
pybroker的做空实现。
pybroker的逻辑比较简单,就是配置ctx的buy_shares,也就是买入多少股,而最终会拿cash去验证,能成交多少股就成交多少股。买空操作,没有限制,就是记录margin(保证金),也就是说买空的时候,没有验证cash。似乎margin是另一个账户的概念。
pybroker的交易佣金配置:
config_pyb = StrategyConfig(fee_mode=FeeMode.ORDER_PERCENT, fee_amount=config.commission*100)
再强调一次,回测是模糊的正确。
很多同学在纠正的是100股/手,还是现在的100+1。真没必要,回测是验证大逻辑与策略可行性,正确性。
策略产出的信号,最终落实到broker,就是买或卖多少股,然后broker去实际下单。实盘的broker与交易软件的api相关,本身也不会使用无论是pybroker,还是backtrader,都需要封装过。
回测更关心策略的大方向。
pybroker目前看来简洁,符合预期。
长期主义
书中自有黄金屋。
最近读了很多个人成长类的书,有些还是蛮有启发的。
但总结起来,结论可能大家听起来不那么舒服。
就是:成功学就是鸡汤,成长学基本是显学。
什么意思呢?
成功是很多因素加和的结果,其中运气占了很多的比重,不可复制,因此已经成功的人,怎么讲都是对的,如何预判,如何卧薪尝胆,就是运气好罢了。
成长为何是显学呢?你要努力,要专注,要长期主义,要延时满足,听起来熟不熟悉?就是道理你都懂的,而且有的还是互相矛盾的,需要用“多重思维模型”来调和呢。
为何说长期主义呢,长期主义有一点就是“磨刀不误砍柴功”。我们一直在调优“AI量化”回测平台,其实就是磨刀的过程。
很多学员着急了,策略呢?
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103810
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!