年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

原创内容第785篇,专注量化投资、个人成长与财富自由。

大年初五,年很快就过完了。

其实就是本身也只是休假一周,但是我们赋予了它太多意义。

周五咱们发布发aitrader v4.1,带了backtrader+ctp期货的实盘接口:

aitrader_v4.1系统更新|含年化39.1%的组合策略代码|backtrader+openctp实盘(代码+数据)

组合策略运行效果如下:

图片

今天,我们把qmt的整合代码带上,然后对照着学习,backtrader对接实盘,需要三个文件:broker,datafeed和store。

图片

需要pip install xtquant,xtquant其实是与本机的qmt终端连接,需要本机安装并登录qmt终端:

我运行的是投研版本:

图片

import backtrader as bt
from live_trade.backtrader_qmt import QMTStore
from datetime import datetime
from xtquant import xtdata
import mathclass BuyCondition(bt.Indicator):'''买入条件'''lines = ('buy_signal',)params = (('up_days', 10),  # 连续上涨的天数)def __init__(self):self.lines.buy_signal = bt.If(self.data.close > self.data.close(-250), 1, 0)def next(self):# 检查250线斜率是否恰好连续向上self.params.up_days个交易日,再往前一个交易日斜率下降if len(self) >= self.params.up_days + 1:slope_up = all(self.data.close[-i] > self.data.close[-i - 1] for i in range(1, self.params.up_days + 1))slope_down_before = self.data.close[-self.params.up_days - 1] < self.data.close[-self.params.up_days - 2]if slope_up and slope_down_before:self.lines.buy_signal[0] = 1else:self.lines.buy_signal[0] = 0class SellCondition(bt.Indicator):'''卖出条件'''lines = ('sell_signal',)params = (('hold_days', 20),  # 持有天数)def __init__(self):self.hold_days = 0def next(self):# 持有self.params.hold_days个交易日卖出if self.hold_days >= self.params.hold_days:self.lines.sell_signal[0] = 1self.hold_days = 0else:self.lines.sell_signal[0] = 0self.hold_days += 1class Sizer(bt.Sizer):'''仓位控制'''params = (('buy_count', 1),  # 最大持仓股票个数)def __init__(self):passdef _getsizing(self, comminfo, cash, data, isbuy):if isbuy:# 如果是买入,平均分配仓位commission_rate = comminfo.p.commissionsize = math.floor(cash * (1 - commission_rate) / data.close[0] / self.params.buy_count / 100) * 100else:# 如果是卖出,全部卖出position = self.broker.getposition(data)size = position.sizereturn sizeclass DemoStrategy(bt.Strategy):params = (('max_positions', 5),  # 最大持仓股票个数('up_days', 10),  # 连续上涨的天数('hold_days', 20),  # 持有天数)def log(self, txt, dt=None):""" 记录交易日志 """dt = dt or self.datas[0].datetime.date(0)print(f'{dt.isoformat()}, {txt}')def __init__(self):# 初始化函数self.sizer = Sizer()self.buy_condition = {d: BuyCondition(d, up_days=self.params.up_days) for d in self.datas}self.sell_condition = {d: SellCondition(d, hold_days=self.params.hold_days) for d in self.datas}def next(self):# 先收集所有需要买入和卖出的股票buy_list = []sell_list = []for i, d in enumerate(self.datas):pos = self.getposition(d).sizeif pos and self.sell_condition[d].lines.sell_signal[0] > 0:sell_list.append(d)if self.buy_condition[d].lines.buy_signal[0] > 0:buy_list.append(d)# 动态设置Sizer的buy_count参数self.sizer.params.buy_count = len(buy_list)# 先执行卖出操作for d in sell_list:self.sell(data=d)# 再执行买入操作for d in buy_list:self.buy(data=d)if __name__ == '__main__':store = QMTStore()code_list = xtdata.get_stock_list_in_sector('沪深300')# 添加数据datas = store.getdatas(code_list=code_list, timeframe=bt.TimeFrame.Days, fromdate=datetime(2022, 7, 1))for d in datas:# print(len(d))cerebro = bt.Cerebro(maxcpus=16)cerebro.adddata(d)# 添加策略# buy_date = datetime(2022, 8, 1).date()  # 设置固定买入日期cerebro.addstrategy(DemoStrategy)# cerebro.optstrategy# # 设置初始资金cerebro.broker.setcash(1000000.0)# 设置佣金cerebro.broker.setcommission(commission=0.001)# 运行回测# print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())cerebro.run()if cerebro.broker.getvalue() != 1000000.0:print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())xtdata.run()#绘制结果cerebro.plot()

显示连接成功:

图片

明天继续。

代码和数据下载: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代码+数据)

AGI通用智能实验室

紧跟前沿AGI研究进展,论文复现,可运行的代码,落地应用等。

既做科研,也做科普;研究基础大模型,也关心应用场景。

通往前沿通用人工智能(AGI)的路径已经展开。

这是一场史诗级的工业革命级别的技术变革,奇点临近,未来已来!

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11635.html

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

相关文章

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2&#xff1a;链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 题目链接&#xff1a; 面试题 …

成绩案例demo

本案例较为简单&#xff0c;用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有&#xff1a;渲染、添加、删除、修改、统计总分&#xff0c;求平均分等。 需求效果如下&#xff1a…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

Kafka下载

一、Kafka下载 下载地址&#xff1a;https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件&#xff0c;直接跳过安装&#xff0c;一步到位。 选择在任一磁盘创建空文件夹&#xff08;不要使用中文路径&#xff09;&#xff0c;解压之后把文件夹内容…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问&#xff1a; 我想写一个Web 前端网页&#xff0c;后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1a; mydict-app/ ├── public/ │ ├── index.html │ ├── st…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉&#xff0c;Oracle提供了Impdp和ExpDp工具&#xff0c;功能很强大&#xff0c;可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具&#xff0c;在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

【Block总结】完全注意力Fully Attentional,同时捕捉空间和通道的注意力|即插即用

论文信息 标题: Fully Attentional Network for Semantic Segmentation论文链接: https://arxiv.org/pdf/2112.04108GitHub链接: https://github.com/maggiesong7/FullyAttentional 创新点 全注意力模块&#xff08;FLA&#xff09;: 该模块能够在一个相似性图中同时捕捉空…

强化学习、深度学习、深度强化学习的区别是什么?

前言 深度强化学习就是 深度学习 和 强化学习 的结合体。它让计算机程序&#xff08;也就是智能体&#xff09;在特定环境中不断尝试&#xff0c;从错误中学习&#xff0c;最终找到最优的行动策略。 深度学习是AlphaGo从棋谱里学习&#xff0c;强化学些Alphazero 学习规则&am…

99.20 金融难点通俗解释:中药配方比喻马科维茨资产组合模型(MPT)

目录 0. 承前1. 核心知识点拆解2. 中药搭配比喻方案分析2.1 比喻的合理性 3. 通俗易懂的解释3.1 以中药房为例3.2 配方原理 4. 实际应用举例4.1 基础配方示例4.2 效果说明 5. 注意事项5.1 个性化配置5.2 定期调整 6. 总结7. 代码实现 0. 承前 本文主旨&#xff1a; 本文通过中…

笔灵ai写作技术浅析(四):知识图谱

知识图谱(Knowledge Graph)是一种结构化的知识表示方式,通过将知识以图的形式进行组织,帮助AI系统更好地理解和利用信息。在笔灵AI写作中,知识图谱技术被广泛应用于结构化组织各种领域的知识,使AI能够根据写作主题快速获取相关的背景知识、概念关系等,从而为生成内容提供…

基于python的Kimi AI 聊天应用

因为这几天deepseek有点状况&#xff0c;导致apikey一直生成不了&#xff0c;用kimi练练手。这是一个基于 Moonshot AI 的 Kimi 接口开发的聊天应用程序&#xff0c;使用 Python Tkinter 构建图形界面。 项目结构 项目由三个主要Python文件组成&#xff1a; 1. main_kimi.py…

python算法和数据结构刷题[5]:动态规划

动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种算法思想&#xff0c;用于解决具有最优子结构的问题。它通过将大问题分解为小问题&#xff0c;并找到这些小问题的最优解&#xff0c;从而得到整个问题的最优解。动态规划与分治法相似&#xff0c;但区别在于动态…

JavaFX - 3D 形状

在前面的章节中&#xff0c;我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外&#xff0c;我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常&#xff0c;3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

wax到底是什么意思

在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…

从理论到实践:Linux 进程替换与 exec 系列函数

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 在Linux中&#xff0c;进程替换&#xff08;Process Substitution&#xff09;是一个非常强大的特性&#xff0c;它允许将一个进程的输出直接当作一个文件来处理。这种技术通常用于Shell脚本和命令行操作中…

Python 中最大堆和最小堆的构建与应用:以寻找第 k 大元素为例

引言 在数据处理和算法设计中&#xff0c;堆&#xff08;Heap&#xff09;是一种非常重要的数据结构。它是一种特殊的完全二叉树&#xff0c;具有高效的插入和删除操作特性&#xff0c;时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)。堆主要分为最大堆和最小堆&#xff0c;…

使用Avalonia UI实现DataGrid

1.Avalonia中的DataGrid的使用 DataGrid 是客户端 UI 中一个非常重要的控件。在 Avalonia 中&#xff0c;DataGrid 是一个独立的包 Avalonia.Controls.DataGrid&#xff0c;因此需要单独通过 NuGet 安装。接下来&#xff0c;将介绍如何安装和使用 DataGrid 控件。 2.安装 Dat…

21款炫酷烟花代码

系列专栏 《Python趣味编程》《C/C趣味编程》《HTML趣味编程》《Java趣味编程》 写在前面 Python、C/C、HTML、Java等4种语言实现21款炫酷烟花的代码。 Python Python烟花① 完整代码&#xff1a;Python动漫烟花&#xff08;完整代码&#xff09; ​ Python烟花② 完整…

为什么LabVIEW适合软硬件结合的项目?

LabVIEW是一种基于图形化编程的开发平台&#xff0c;广泛应用于软硬件结合的项目中。其强大的硬件接口支持、实时数据采集能力、并行处理能力和直观的用户界面&#xff0c;使得它成为工业控制、仪器仪表、自动化测试等领域中软硬件系统集成的理想选择。LabVIEW的设计哲学强调模…

Cmake学习笔记

cmake的使用场景和功能&#xff1a;cmake 的诞生主要是为了解决直接使用 makeMakefile 这种方式无法实现跨平台的问题&#xff0c;所以 cmake 是可以实现跨平台的编译工具这是它最大的特点。cmake 仅仅只是根据不同平台生成对应的 Makefile&#xff0c;最终还是通过 make工具来…