MiniQMT+Backtrader:平民股票量化界的“黄金搭档”,永远的神!

我一直觉得,有行情、有回测、免费、想用什么库随便装,这才量化框架该有的样子。

可现实里,很多所谓的“量化平台”却给了我们截然相反的体感:
平台封闭、扩展性差、行情接口限制多甚至收费;策略想法很美好,但是想要实现却被平台限制得死死的。要接个外部数据源、装个库,都得绕来绕去;数据用别人的,逻辑被限制,连回测速度都要看平台心情。

更别提,有的平台主打“零代码”“拖拉拽”,对稍微有点编程能力的朋友来说,反而成了束缚:啥都能点,但啥都调不了。

直到花姐遇到了 MiniQMT + Backtrader,才是真正实现了量化自由。

今天这篇文章,花姐就带你从0到1打造一个年化22.77%的策略。

整个量化框架用的就是MiniQMT + Backtrader


行情数据从哪里来

看过花姐文章的,肯定知道花姐之前一直用的是AKShare这个库,从东财来获取行情数据,但是,近期东财反爬虫机制导致AKShare库非常不稳定,经常被封IP,数据无法获取。

查了很多资料以后,终于发现一个免费获取股票行情的方法——XtQuant
XtQuant是基于迅投MiniQMT衍生出来的一套完善的Python策略运行框架,其中Xtdata负责提供行情数据(历史和实时的K线和分笔)、财务数据、合约基础信息、板块和行业分类信息等通用的行情数据

Xttrader负责实盘交易,可以和 MiniQMT 客户端交互进行报单、撤单、查询资产、查询委托、查询成交、查询持仓以及接收资金、委托、成交和持仓等变动的主推消息。

最关键的是MiniQMT和XtQuant都是免费的,唯一不足的就是XtQuant不支持策略回测,所以才有了这篇文章,给它加上Backtrader就形成了一个完整的闭环。
在这里插入图片描述


接下来说说策略
方便大家搞懂XtQuant+Backtrader是如何进行回测的,我这里给大家准备了一个回测收益还不错的策略。

策略的核心是低位开仓+网格交易

当日线出现底分型,且底分型是近20个K线的最低点,这个时候我们就买1/5的仓位,当最新买入的仓位跌了5%就再加仓1/5的仓位,直到满仓为止,如果其中某个1/5的仓位盈利了8%我们就止盈,直到全部仓位为0以后我们在从头开始这个循环。


策略有了怎么实现

首先打开券商提供的QMT客户端,然后勾选独立交易点登录,就进入到MiniQMT的模式了。你的QMT是否支持miniQMT就需要你去问券商了。
在这里插入图片描述

接下来创建一个Python虚拟环境,然后从XtQuant官网下载XtQuant的Python包
这是下载地址
https://dict.thinktrader.net/nativeApi/download_xtquant.html

下载以后是个rar压缩文件,解压以后把它放到你Python对应虚拟环境的site-packages文件夹夹中

比如花姐的是H:\program\anaconda\envs\pyqmt\Lib\site-packages
在这里插入图片描述

XtQuant包安装以后,就可以获取行情数据了

from xtquant import xtdata
code = "xxxxxx.SZ"

period = "1d"
xtdata.download_history_data(stock_code=code,period=period,incrementally=True) 
# 增量下载行情数据(开高低收,等等)到本地
history_data = xtdata.get_market_data_ex([],[code],period=period,count=-1,dividend_type="front_ratio")
df = history_data[code]

dividend_type 除权方式,可选值为
‘none’:不复权
‘front’:前复权
‘back’:后复权
‘front_ratio’: 等比前复权
‘back_ratio’: 等比后复权

有了行情数据,接下来就该Backtrader上场了

Backtrader 是一个用 Python 编写的开源量化回测框架,专为策略研究、历史回测和模拟交易设计。它结构清晰、功能强大,在量化圈中被广泛用于个人和教育场景,堪称“轻量级回测中的天花板”。
以下是一个最小Backtrader策略结构模板:

import backtrader as bt

# 1. 策略类定义
class MyStrategy(bt.Strategy):
    def __init__(self):
        # 初始化指标,比如简单均线
        self.ma = bt.indicators.SimpleMovingAverage(self.data.close, period=10)

    def next(self):
        # 简单策略逻辑:价格上穿均线买入,下穿卖出
        if self.data.close[0] > self.ma[0] and not self.position:
            self.buy()
        elif self.data.close[0] < self.ma[0] and self.position:
            self.sell()

# 2. 创建Cerebro引擎
cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)

# 3. 加载数据(以CSV为例)
data = bt.feeds.GenericCSVData(
    dataname='your_data.csv',  # 请替换成你的CSV路径
    dtformat='%Y-%m-%d',
    timeframe=bt.TimeFrame.Days,
    openinterest=-1,
    volume=-1,
    open=1,
    high=2,
    low=3,
    close=4,
    datetime=0
)

cerebro.adddata(data)

# 4. 设置初始资金
cerebro.broker.setcash(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花小姐的春天(同公众号)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值