年化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;以便后续能够从该源安装.…

详解python的修饰符

Python 中的修饰符&#xff08;Decorator&#xff09;是一种用于修改或扩展函数或类行为的工具。它们本质上是一个函数&#xff0c;接受另一个函数或类作为参数&#xff0c;并返回一个新的函数或类。修饰符通常用于在不修改原函数或类代码的情况下&#xff0c;添加额外的功能。…

低代码产品插件功能一览

下图是统计的目前市面上流行的低代码、零代码产品的插件功能。 产品名称 产品类型 官方插件数量 支持拓展 官方插件功能 宜搭 零代码 3 暂不支持 云打印、CAD看图、打印表单详情 微搭 低代码 1 暂不支持 小程序 明道云 低代码 2 支持 视图、工作流节点 简道…

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

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

前端axios拦截器

1. 在main.js导入axios 2. 通过axios对象定义拦截器 import {createApp} from vue import App from ./App.vue import Antd from ant-design-vue; import ant-design-vue/dist/antd.css; import axios from "axios"; import router from ./router import store from …

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…

基于微信小程序的辅助教学系统的设计与实现

标题:基于微信小程序的辅助教学系统的设计与实现 内容:1.摘要 摘要&#xff1a;随着移动互联网的普及和微信小程序的兴起&#xff0c;基于微信小程序的辅助教学系统成为了教育领域的一个新的研究热点。本文旨在设计和实现一个基于微信小程序的辅助教学系统&#xff0c;以提高教…

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

近年来随着智能汽车技术的快速发展&#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…

创建 priority_queue - 进阶(内置类型)c++

内置类型就是 C 提供的数据类型&#xff0c;⽐如 int 、 double 、 long long 等。以 int 类型为例&#xff0c;分 别创建⼤根堆和⼩根堆。 这种写法意思是&#xff0c;我要告诉这个优先级队列要建一个什么样的堆&#xff0c;第一个int是要存什么数据类型&#xff0c;vecto…

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

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

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

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

Day28(补)-【AI思考】-AI会不会考虑自己的需求?

文章目录 AI会不会考虑自己的需求&#xff1f;一、**技术本质&#xff1a;深度≠理解**二、**传播机制&#xff1a;热搜如何制造幻觉**三、**伦理考量&#xff1a;为何必须"撇清"**关键结论 AI会不会考虑自己的需求&#xff1f; 让思想碎片重焕生机的灵魂&#xff1a…

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 …

解决Oracle SQL语句性能问题(10.5)——常用Hint及语法(7)(其他Hint)

10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:显式的指示优化器为SQL语句的某个行源指定势。该Hint具体语法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)这里,第一个参数(@qb)为可选参数,指定查询语句块名;第二个参数…

Axure PR 9 旋转效果 设计交互

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