年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)
原创内容第782篇,专注量化投资、个人成长与财富自由。
昨天我们把backtrader+ctpbee的实盘整合代码跑通了,年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据)
这两周我们加进来一项工作就是实盘对接相关(先从期货CTP的整合开发),当然低代码平台会持续开发。
if __name__ == '__main__': with open('./params.json', 'r') as f: ctp_setting = json.load(f) cerebro = bt.Cerebro(live=True) store = CTPStore(ctp_setting, debug=True) cerebro.addstrategy(SmaCross, store=store) # 由于历史回填数据从akshare拿,最细1分钟bar,所以以下实盘也只接收1分钟bar # https://www.akshare.xyz/zh_CN/latest/data/futures/futures.html#id106 data0 = store.getdata(dataname='ag2112.SHFE', timeframe=bt.TimeFrame.Minutes, # 注意符号必须带交易所代码。 num_init_backfill=100 if is_trading_period() else 0) # 初始回填bar数,使用TEST服务器进行模拟实盘时,要设为0 data1 = store.getdata(dataname='rb2201.SHFE', timeframe=bt.TimeFrame.Minutes, # 注意符号必须带交易所代码。 num_init_backfill=100 if is_trading_period() else 0) # 初始回填bar数,使用TEST服务器进行模拟实盘时,要设为0 cerebro.adddata(data0) cerebro.adddata(data1) cerebro.run()
今天我们来讲讲整合的细节。
import json import backtrader as bt from live_trade.backtrader_ctp import CTPStore from datetime import datetime, time # Origin定义不要删除,ctpbee接口需要它 class Origin: """ """ def __init__(self, data): self.symbol = data._dataname.split('.')[0] self.exchange = data._name.split('.')[1] # 说明在交易日上午8点45到下午3点,以及晚上8点45到凌晨2点45分,可进行实时行情模拟交易。 # 中国期货交易时段(日盘/夜盘),只有在交易时段才能进行实时模拟仿真,其他时段只能进行非实时模拟仿真。双休日不能进行模拟仿真 DAY_START = time(8, 45) # 日盘8点45开始 DAY_END = time(15, 0) # 下午3点结束 NIGHT_START = time(20, 45) # 夜盘晚上8点45开始 NIGHT_END = time(2, 45) # 凌晨2点45结束 # 是否在交易时段 def is_trading_period(): """ """ print('is_trading_period检查!') current_time = datetime.now().time() trading = False if ((current_time >= DAY_START and current_time <= DAY_END) or (current_time >= NIGHT_START) or (current_time <= NIGHT_END)): trading = True return trading class SmaCross(bt.Strategy): lines = ('sma',) params = dict( smaperiod=5, store=None, ) def __init__(self): self.beeapi = self.p.store.main_ctpbee_api self.buy_order = None self.live_data = False # self.move_average = bt.ind.MovingAverageSimple(self.data, period=self.params.smaperiod) def prenext(self): print('in prenext') for d in self.datas: print(d._name, d.datetime.datetime(0), 'o h l c ', d.open[0], d.high[0], d.low[0], d.close[0], ' vol ', d.volume[0]) def next(self): print('------------------------------------------ next start') for d in self.datas: print('d._name', d._name, 'd._dataname', d._dataname, d.datetime.datetime(0), 'o h l c ', d.open[0], d.high[0], d.low[0], d.close[0], ' vol ', d.volume[0]) pos = self.beeapi.app.center.get_position(d._dataname) print('position', pos) # 可以访问持仓、成交、订单等各种实盘信息,如何访问参考http://docs.ctpbee.com/modules/rec.html trades = self.beeapi.app.center.trades print('trades', trades) account = self.beeapi.app.center.account print('account', account) if not self.live_data: # 不是实时数据(还处于历史数据回填中),不进入下单逻辑 return # 开多仓 print('live buy') # self.open_long(self.data0.close[0] + 3, 1, self.data0) print('---------------------------------------------------') def notify_order(self, order): print('订单状态 %s' % order.getstatusname()) def notify_data(self, data, status, *args, **kwargs): dn = data._name dt = datetime.now() msg = f'notify_data Data Status: {data._getstatusname(status)}' print(dt, dn, msg) if data._getstatusname(status) == 'LIVE': self.live_data = True else: self.live_data = False # 以下是下单函数 def open_long(self, price, size, data): self.beeapi.action.buy(price, size, Origin(data)) def open_short(self, price, size, data): self.beeapi.action.short(price, size, Origin(data)) def close_long(self, price, size, data): self.beeapi.action.cover(price, size, Origin(data)) def close_short(self, price, size, data): self.beeapi.action.sell(price, size, Origin(data))
目前simnow不可访问,使用openctp需要替换下面两个dll:
venv\Lib\site-packages\ctpbee_api\ctp
吾日三省吾身
如果你希望一件事发生,你需要集齐这件事发生需要的所有要素就可以了。
像造火箭,关键步骤也是27个左右。
提高对客观世界评估的精准性,你会发现看似遥不可及的事情,也会变得简单很多。
大象装冰箱,总共分几步。
冰箱门打开,把大象关进去,把冰箱门关上。
其中第二步比较难,我们再来考虑是找一个大一点的冰箱,还是找一头小一点的大象。
把一个难题分解成一个个可解的问题。
有一点感触,学一个新技能或者进入一个新领域,会有一种错觉,在新手期,一切都很新鲜,很兴奋,然后很快进入瓶颈期,开始爬坡,觉得不好玩了,和想象中的情况不一样。
之前好多次安装node.js,折腾vue和react。一开始照着tutorial写,肯定很舒服——如果这一步都不顺利,那么说明框架不成熟,应该考虑弃用。不过到了具体应用,就开始爬坡,这一步最最难的,如果突破了,后面就正式入门了。
——受益于大模型,卡壳的地方可以让模型来写或改,这个过程也会顺利很多。咱们的低代码平台,现在就是使用的前后端分离的架构,前端使用ionic+react,ionic 在N年前就打算用,现在才算正式用起来了。
学英语也是如此,学吉他也是如此。
这把年纪好,吉他就算了,英语还是要突破一下的。
生活无外乎是见招拆招,不必提前焦虑,一切都是体验,允许一切发生。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海
AI量化实验室 星球,已经运行三年多,1300+会员。
aitrader代码,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。
扩展 • 历史文章
EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)
deap时间序列函数补充,挖掘出年化39.12%的轮动因子,卡玛比率2.52
年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据)
近四年年化收益19.3%,而最大回撤仅8%,卡玛比率2.34,投资应该是一件简单的事情。(附python代码+数据)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/526291.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!