年化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#id106data0 = store.getdata(dataname='ag2112.SHFE', timeframe=bt.TimeFrame.Minutes,  # 注意符号必须带交易所代码。num_init_backfill=100 if is_trading_period() else 0)  # 初始回填bar数,使用TEST服务器进行模拟实盘时,要设为0data1 = store.getdata(dataname='rb2201.SHFE', timeframe=bt.TimeFrame.Minutes,  # 注意符号必须带交易所代码。num_init_backfill=100 if is_trading_period() else 0)  # 初始回填bar数,使用TEST服务器进行模拟实盘时,要设为0cerebro.adddata(data0)cerebro.adddata(data1)cerebro.run()

图片

图片

图片

今天我们来讲讲整合的细节。

import json
import backtrader as btfrom 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 = Falseif ((current_time >= DAY_START and current_time <= DAY_END)or (current_time >= NIGHT_START)or (current_time <= NIGHT_END)):trading = Truereturn tradingclass SmaCross(bt.Strategy):lines = ('sma',)params = dict(smaperiod=5,store=None,)def __init__(self):self.beeapi = self.p.store.main_ctpbee_apiself.buy_order = Noneself.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.htmltrades = self.beeapi.app.center.tradesprint('trades', trades)account = self.beeapi.app.center.accountprint('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._namedt = datetime.now()msg = f'notify_data Data Status: {data._getstatusname(status)}'print(dt, dn, msg)if data._getstatusname(status) == 'LIVE':self.live_data = Trueelse: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.mzph.cn/web/67544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月&#xff0c;而现在时间来到 2025 &#xff0c;不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年&#xff0c;也代表着了我的职业生涯也超十年&#xff0c;现在回想起来依然觉得「唏嘘」&#xff…

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源&#xff1a;运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;将Microsoft软件源添加到系统中&#xff0c;以便后续能够从该源安装.…

Vscode编辑器下 Markdown无法显示图片

1.问题 在vscode 编辑器中无法预览 markdon 文件中的图片 2.解决方案 大部分出现这种情况是因为新版本的vscode会阻拦有风险的资源显示&#xff0c;将安全等级调低即可。 方式一&#xff1a; 1.打开任意 MD 文件&#xff0c;ctrl&#xff0c;调出设置 2. 输入 markdown.ch…

php-phar打包避坑指南2025

有很多php脚本工具都是打包成phar形式&#xff0c;使用起来就很方便&#xff0c;那么如何自己做一个呢&#xff1f;也找了很多文档&#xff0c;也遇到很多坑&#xff0c;这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件&#xff0c;很方便 可通过phar help查看…

自动化运维的未来:从脚本到AIOps的演进

点击进入IT管理资料库 一、自动化运维的起源&#xff1a;脚本时代 &#xff08;一&#xff09;脚本在运维中的应用场景 在自动化运维的发展历程中&#xff0c;脚本扮演着至关重要的角色&#xff0c;它作为最初的操作入口&#xff0c;广泛应用于诸多日常运维工作场景里。 在系统…

【2024年华为OD机试】(B卷,100分)- 热点网站统计(Java JS PythonC/C++)

一、问题描述 题目描述 企业路由器的统计页面需要动态统计公司访问最多的网页URL的Top N。设计一个算法&#xff0c;能够高效动态统计Top N的页面。 输入描述 每一行都是一个URL或一个数字&#xff1a; 如果是URL&#xff0c;代表一段时间内的网页访问。如果是数字N&#…

《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》

DeepSeek 网页/API 性能异常&#xff08;DeepSeek Web/API Degraded Performance&#xff09;订阅 已识别 - 已识别问题&#xff0c;并且正在实施修复。 1月 29&#xff0c; 2025 - 20&#xff1a;57 CST 更新 - 我们将继续监控任何其他问题。 1月 28&#xff0c; 2025 - 22&am…

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展&#xff0c;针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击&#xff0c;包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …

docker中运行的MySQL怎么修改密码

1&#xff0c;进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2&#xff0c;登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…

解锁微服务:五大进阶业务场景深度剖析

目录 医疗行业&#xff1a;智能诊疗的加速引擎 电商领域&#xff1a;数据依赖的破局之道 金融行业&#xff1a;运维可观测性的提升之路 物流行业&#xff1a;智慧物流的创新架构 综合业务&#xff1a;服务依赖的优化策略 医疗行业&#xff1a;智能诊疗的加速引擎 在医疗行业迈…

Cloudreve:Star22.3k,免费开源的网盘,支持多种存储方式,它允许用户快速搭建个人或团队的私有云存储服务。

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Cloudreve是一个基于Web的文件管理和分享系统&#xff0c;它允许用户快速搭建个人或团队的私有云存储服务。该项目以其高度的可定制性和灵活性&#x…

AIGC(生成式AI)试用 20 -- deepseek 初识

>> 基本概念 Ollama -- 运行大模型&#xff0c;管理运行AI大模型的工具&#xff0c;用来安装布置DeepSeek https://ollama.com/ , Get up and running with large language models. AnythingLLM -- 大模型增强应用&#xff0c;GUI大模型交互程序 Download AnythingLLM …

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

Attention--人工智能领域的核心技术

1. Attention 的全称与基本概念 在人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;领域&#xff0c;Attention 机制的全称是 Attention Mechanism&#xff08;注意力机制&#xff09;。它是一种能够动态分配计算资源&#xff0c;使模型在处理输入数据…

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树&#xff0c;并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言&#xff0c;大家主要是学习思路&#xff0c;学习过后可以自己点击链接测试&#xff0c;并且做一些对…

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址&#xff0c;指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…

记录一次,PyQT的报错,多线程Udp失效,使用工具如netstat来检查端口使用情况。

1.问题 报错Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

电路研究9.2.5——合宙Air780EP中GPS 相关命令使用方法研究

注&#xff1a;本命令仅适用于合宙 4G CAT1 模块&#xff08;Air780EG 系列&#xff09;。 正好&#xff0c;我们使用的Air780EP好像也有4G CAT1模块&#xff0c;好像也属于Air780EG系列吧。 这个例子好像比较少就个。 18.9 使用方法举例 18.1GPS 开关&#xff1a;ATCGNSPWR 这…

【C语言】在Windows上为可执行文件.exe添加自定义图标

本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…

python编程环境安装保姆级教程--python-3.7.2pycharm2021.2.3社区版

第1步安装解释器python-3.7.2&#xff0c;第2步安装pycharm编程软件 1、安装解释器 1.1 什么是解释器 就是将Python高级程序语言翻译成为计算机可以识别的0、1代码 1.2 安装解释器python-3.7.2&#xff08;根据自己的操作系统安装适配的解释器&#xff0c;以Windows为例&…