当前位置: 首页 > article >正文

年化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代码+数据)

原文地址:https://blog.csdn.net/weixin_38175458/article/details/145398673
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/526291.html

相关文章:

  • 大厂面试题备份20250129
  • dify实现原理分析-rag-检索(Retrieval)服务的实现
  • 信号处理以及队列
  • 一文讲解Java中的异常处理机制
  • 变量和简单数据类型(字符串)
  • doris:导入时实现数据转换
  • Java 分布式与微服务架构:现代企业应用开发的新范式
  • JAVASE入门十二脚-IO流charArrayReader,bufferedReader,输入与输出,采集百度网页,分块操作
  • Golang 并发机制-1:Golang并发特性概述
  • 实战:如何快速让新网站被百度收录?
  • 11 Spark面试真题
  • Redis常用命令合集【一】
  • 春节旅游高峰,人力资源如何巧妙应对?‌
  • Python标准库 - os (3) 调度策略、系统信息
  • 数据结构--数组链表
  • 大模型时代下的具身智能
  • 实验五---控制系统的稳定性分析---自动控制原理实验课
  • LabVIEW温度修正部件测试系统
  • 图漾相机——C++语言属性设置
  • Java 知识速记:全面解析 final 关键字