如何用QMT做双均线策略的回测
发布时间:2025-6-4 09:15阅读:308
双均线策略是做量化交易中最基础的一个策略它的操作原理就是在5日线短线上穿到20日线长线形成金叉的时候买入股票反之在短线下穿长线的时候卖出股票如下图所示
这是一个非常简单的双均线策略在QMT上面是有完整的示例的:
#coding:gbk#导入常用库import pandas as pdimport numpy as npimport talib#示例说明本策略通过计算快慢双均线在金叉时买入死叉时做卖出
点击回测运行 主图选择要交易的股票品种def init(C): #init handlebar函数的入参是ContextInfo对象
可以缩写为C #设置测试标的为主图品种 C.stock= C.stockcode + '.' +C.market
#line1和line2分别为两条均线期数 C.line1=10 #快线参数 C.line2=20 #慢线参数
#accountid为测试的ID 回测模式资金账号可以填任意字符串 C.accountid = "testS" def
handlebar(C): #当前k线日期 bar_date =
timetag_to_datetime(C.get_bar_timetag(C.barpos), '%Y%m%d%H%M%S')
#回测不需要订阅最新行情使用本地数据速度更快 指定subscribe参数为否. 如果回测多个品种 需要先下载对应周期历史数据
local_data = C.get_market_data_ex(['close'], [C.stock], end_time =
bar_date, period = C.period, count = max(C.line1, C.line2), subscribe =
False) close_list = list(local_data[C.stock].iloc[:, 0]) #将获取的历史数据转换为DataFrame格式方便计算 #如果目前未持仓同时快线穿过慢线则买入8成仓位
if len(close_list) <1: print(bar_date, '行情不足 跳过') line1_mean =
round(np.mean(close_list[-C.line1:]), 2) line2_mean =
round(np.mean(close_list[-C.line2:]), 2) print(f"{bar_date} 短均线{line1_mean} 长均线{line2_mean}")
account = get_trade_detail_data('test', 'stock', 'account') account =
account[0] available_cash = int(account.m_dAvailable) holdings =
get_trade_detail_data('test', 'stock', 'position') holdings = {i.m_strInstrumentID + '.' + i.m_strExchangeID : i.m_nVolume for i in holdings}
holding_vol = holdings[C.stock] if C.stock in holdings else0 if
holding_vol == 0and line1_mean > line2_mean: vol =
int(available_cash / close_list[-1] / 100) * 100 #下单开仓
passorder(23, 1101, C.accountid, C.stock, 5, -1, vol, C) print(f"{bar_date} 开仓") C.draw_text(1, 1, '开') #如果目前持仓中同时快线下穿慢线则全部平仓
elif holding_vol > 0and line1_mean < line2_mean: #状态变更为未持仓
C.holding=False #下单平仓 passorder(24, 1101, C.accountid, C.stock,
5, -1, holding_vol, C) print(f"{bar_date} 平仓") C.draw_text(1, 1, '平')
代码可以直接复制到QMT里面使用但是回测出来笔者就觉得有点问题咋这个量化策略是低卖高买呢如下图10.52买入9.55卖出妥妥亏钱呀
看图形上面买是基本上没有问题的问题在于股票冲高的时候反而没有卖等到跌落下来了才触发卖出这样子整体的收益就都是负数了
这样的策略肯定没办法用作实盘需要小小的修改一下笔者这里就简单的把短线大于长线的条件换成了短线减长线的差值大于0.01且小于0.1时买入差值大于等于0.5的时候卖出
这么以来回测出来就不存在全是高买低卖的情况了只有一笔交易是反着的其余都是正整体收益也是正的但是交易的频次也就下去了不过这对于咱们来说不也是节约交易成本了吗毕竟交易不是为了只贡献手续费是以盈利为目的的
以上的修改只作为一个参考给大家做量化交易的好处就是可以通过代码来实现自己对策略的个性化需求只要有想法就可以想办法来实现
量化交易入门可以开立权限之后根据示例慢慢尝试感兴趣的朋友欢迎联系交流~


温馨提示:投资有风险,选择需谨慎。
-
新手投资小白必看!中信证券低风险基金2025投资指南
2025-08-11 11:10
-
消费寒冬破局密码:年轻人正用「情绪价值」改写万亿市场规则
2025-08-11 11:10
-
TLAC非资本债究竟是个啥?国有大行居然发行规模近1700亿
2025-08-11 11:10