ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

2026/8/8 18:28:21 拓冰建站 浏览量
QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

QMT实盘交易入门:5分钟搞定ETF全球配置策略(附完整代码)

在量化交易的世界里,ETF因其流动性好、费用低廉、分散风险等优势,成为全球资产配置的首选工具。而QMT平台作为国内领先的量化交易系统,为个人投资者提供了机构级的交易能力。本文将带你从零开始,用最简单的代码实现一个全球ETF动量轮动策略,5分钟即可完成从策略编写到实盘部署的全流程。

1. 环境准备与平台基础操作

QMT(Quantitative Trading Platform)是券商提供的专业量化交易终端,支持Python策略开发与实盘交易。与普通交易软件不同,QMT通过xtquant等库直接对接交易所接口,实现毫秒级交易响应。

首次使用需完成以下准备:

  1. 开通券商QMT权限(通常需要50万以上资产门槛)
  2. 下载安装QMT客户端(建议选择"大QMT"版本)
  3. 准备Python环境(QMT内置Python 3.6+)

注意:不同券商版本可能存在细微差异,建议先使用模拟交易功能测试

进入平台后,你会看到几个核心模块:

  • 策略编辑器:编写和调试Python代码
  • 行情中心:查看实时和历史数据
  • 交易监控:观察订单执行情况
  • 账户管理:配置资金和风险参数

2. 策略逻辑与代码解析

我们的全球ETF动量策略基于一个简单原理:选择近期表现最好的资产持有,定期轮换。以下是核心代码分解:

import numpy as np import pandas as pd import math class Strategy: def __init__(self): self.acct = '你的账户号' # 替换为实际账户 self.acct_type = 'STOCK' self.etf_pool = [ '518880.SH', # 黄金ETF '513100.SH', # 纳指ETF '159915.SZ', # 创业板ETF '510300.SH', # 沪深300ETF '513500.SH' # 标普500ETF ] self.m_days = 60 # 动量计算周期 self.Num = 3 # 持有ETF数量

动量计算函数采用对数收益率线性回归,衡量资产趋势强度:

def get_rank(self, etf_pool): scores = [] for etf in etf_pool: # 获取历史数据 data = self.get_market_data( fields=["close"], stock_code=[etf], period="1d", count=self.m_days ) df = data[etf] # 计算对数收益率趋势 y = np.log(df.close) x = np.arange(len(y)) slope, _ = np.polyfit(x, y, 1) annualized = math.pow(math.exp(slope), 250) - 1 scores.append(annualized) # 按动量排序 return [etf for _,etf in sorted(zip(scores,etf_pool), reverse=True)]

3. 交易执行与风险控制

完整的交易逻辑包括持仓检查和订单发送:

def trade(self): # 获取推荐持仓 target_list = self.get_rank(self.etf_pool)[:self.Num] # 获取当前持仓 holdings = get_trade_detail_data( self.acct, self.acct_type, 'position' ) hold_dict = {h.m_strInstrumentID: h.m_nCanUseVolume for h in holdings} # 卖出不在目标列表的ETF for etf in hold_dict: if etf not in target_list: passorder( 24, 1101, # 卖出操作代码 self.acct, etf, 10, 0, # 市价单 hold_dict[etf], '', 1, '', self ) # 买入新标的(简化版) for etf in target_list: if etf not in hold_dict: passorder( 23, 1101, # 买入操作代码 self.acct, etf, 10, 0, # 市价单 10000, '', 1, '', self # 假设每只买入1万元 )

风险控制参数建议:

参数类型建议值说明
单品种最大仓位≤30%避免过度集中
止损幅度-8%动态跟踪止损
交易频率每周/每月调仓降低交易成本
最大回撤控制总账户-15%止损系统级保护

4. 实盘部署与监控

完成策略编写后,按以下步骤部署:

  1. 策略导入

    • 在QMT界面右键点击"策略管理"
    • 选择"导入Python策略"
    • 上传.py文件
  2. 参数设置

    # 在init函数中修改这些参数 def init(self): self.etf_pool = [...] # 更新你的ETF列表 self.risk_control = { 'max_position': 0.3, 'stop_loss': -0.08 }
  3. 实盘挂载

    • 编译成功后点击"模型交易"
    • 选择"挂载实盘"
    • 设置定时触发(如每日14:55)

监控建议:

  • 首次运行建议先用模拟账户测试1-2周
  • 关注"交易日志"中的错误信息
  • 定期检查"绩效分析"中的盈亏统计

5. 策略优化方向

基础策略可以进一步扩展:

多时间框架动量

# 同时考虑周线和日线动量 weekly_momentum = self.get_rank(etf_pool, period='1w') daily_momentum = self.get_rank(etf_pool, period='1d') combined_score = [w*0.6 + d*0.4 for w,d in zip(weekly_momentum, daily_momentum)]

波动率调整仓位

# 根据波动率动态调整仓位 def calc_position_size(etf): data = self.get_market_data(..., period='1d', count=20) returns = np.log(data[etf].close).diff() vol = returns.std() * np.sqrt(252) return 0.2 / vol # 目标20%年化波动

ETF池选择建议

  • 美股市场:SPY(标普500)、QQQ(纳斯达克)
  • 债券类:TLT(20年期美债)、SHY(短期国债)
  • 商品类:GLD(黄金)、USO(原油)
  • 新兴市场:EEM(MSCI新兴市场)

实际使用中,我发现ETF流动性和交易时间差异是需要特别注意的细节。比如跨境ETF的申赎机制可能导致溢价,而不同市场的交易时段差异会影响调仓时机。建议对每个纳入组合的ETF都先观察其折溢价和成交量特征。