[QMT]01-我的第一个Python策略

本文介绍了如何在QMT系统上用Python编写一个简单的HelloWorld策略,包括init()和handlebar()两个核心接口的使用,以及ContextInfo对象在模型中的作用,如股票池设定和K线处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新年立个Flag 学写50个QMT策略:

新建一个 Python 策略

创建方法:

我的主页-新建策略

删掉模板带的内容,输入第一个策略 01-HelloWorld:

编写 Python 策略需在开始时定义编码格式,如 gbk。

Init 方法和 handlebar 方法的定义是必须的。

上图展示了如何在 QMT 系统上用 Python 写一个输出HelloWorld 的模型。

图中的模型实现了一个Python 模型必须实现 的两个接口: init()与 handlebar() 。

输出窗口展示了这个模型的运行输出。

系统首先调用 init() 方法输出了 hello init,

随后在每根 K 线上调用一次 handlebar() ,输出一次hello handlebar。

小贴士:

print用函数,别用命令式,记得带上圆括号.

概念

1)Bar

QMT 系统的模型是根据行情驱动,逐 K 线(Bar)运行,即点击运行模型时,模型是从第 0 根 K 线开始运行到最后一根 K 线.

每根 K 线调用一次 Python 模型中的handlebar(ContextInfo) 函数。

在盘中,最后一根 K 线每变动一次,handlebar(ContextInfo) 函数被执行一次。这根 K 线的最后一个tick 判定模型信号是否成立,如果模型信号成立,交易函数被调用,则在下一根 K 线的第一个 tick 发出下单信号,生成下单任务。

根据选择的运行周期不同,handlebar(ContextInfo) 函数的运行次数也不同。

如选择在日线上运行策略,则 handlebar(ContextInfo) 函数每天被调用一次

快速计算: 如想加快模型运行速度,可以策略编辑器 - 基本信息中设置快速计算,限制计算范围,只计算最新的指定数量的 K 线范围.限制计算范围,默认为 0 时模型运行会从模型设置的默认品种(主图)的第一根 K 线开始计算,设置为 n 则从当前 K 线再往前 n 个 K 线开始计算.

2)Init

init是一个Python模型的初始化方法。会在模型加载策略时调用一次,负责初始化模型运行所需的初始变量,初始化资金账号、初始化全局变量、对于基准 benchmark 和设定股票池universe等。

ContextInfo.accID = '3037834' #初始化资金账号
ContextInfo.order=10 #初始化设置也写全局变量,例如设定买入的手数

如果用户的模型无需做初始化,可以在方法体中写pass,但方法的定义必须存在,否则模型的运行会报错。

3)Handlebar

handlebar 是整个 Python 模型中的核心执行函数。当模型从数据层获取到运行所需要的数据之后,会对数据集上的每一根 bar,调用一次 handlebar 函数,处理当前这根 bar 上的数据。也就是说,用户模型的核心逻辑都是写在该函数中的,如获取数据,设置下单条件等。在 handlebar 中处理完数据后,用户可以通过 print 方法将需要绘图输出的结果返回给界面。界面会将输出结果如实的展示出来。

可在 handlebar 中使用 ContextInfo.barpos 来获取当前的 bar 索引位置。

def handlebar(ContextInfo):
    print ('hello handlebar')
    if ContextInfo.is_last_bar(): #判断是否为最后一根K线,跳过历史K线,用最新K线运行策略
        index=ContextInfo.barpos #返回当前运行到的K线索引号
        t=ContextInfo.get_bar_timetag(index)  #获取当前K线对应的时间戳
        date=timetag_to_datetime(t,"%Y%m%d") #将当前的时间戳转化成日期的格式
        print(index,t,date)

4)ContextInfo

ContextInfo 是整个 框架中的一个核心对象。它包含了各种与 Python 底层框架交互的 API 方法,也是一个全局的上下文环境,可以在 init 以及 handlebar 这两个函数中自由地传递用户创建的各种自定义数据。

ContextInfo 是 Python 模型中的全局对象,其中封装了 benchmark,universe 等变量,也封装了get_history_data 等重要函数,是 init 与 handlebar 之间,以及各个 handlebar 之间进行信息传递的重要载体。用户也可以在其中封装自己想要定义的全局变量或函数,但注意不要与原有的重名。

5) 设定股票池

方法一:取板块的成分股作为股票池,例如取"上证50"成分股,

ContextInfo.trade_code_list=ContextInfo.get_stock_list_in_sector("上证50")

方法二:可以自定义列表,将股票代码加到列表里

ContextInfo.trade_code_list=['600000.SH','300462.SZ','000697.SZ','300008.SZ']
ContextInfo.set_universe(ContextInfo.trade_code_list)
03-12
<think>好的,用户的问题是关于QMT(Quantitative Trading Platform)、quantmod和trader的。首先需要明确用户的具体需求。QMT公司开发的量化交易平台,主要用于A股市场。而quantmod是R语言中一个用于量化金融分析的包,常用于数据获取、可视化和技术分析。用户可能想知道如何将quantmod与QMT结合使用,或者如何在QMT中实现类似quantmod的功能。 需要确认QMT是否支持R语言的集成。查阅资料发现,QMT主要支持Python和VBA,而quantmod是R的包,因此直接集成可能有难度。可能需要通过其他方式在QMT中使用R代码,比如调用外部脚本或者使用中间件进行通信。 接下来,考虑用户提到的“trader”,可能是指实际的交易执行部分。用户可能希望了解如何在QMT中实现策略回测和自动化交易。需要查找QMT的API文档,了解其交易函数和回测框架的结构。例如,QMT提供XtTrader和XtQuant等模块,用于连接交易接口和数据获取。 然后,整合信息。用户可能需要将quantmod的分析结果应用到QMT交易策略中。可能的解决方案包括:使用R进行数据分析后导出结果,再用Python读取并执行交易;或者使用Python的类似库(如pandas、TA-Lib)替代quantmod,直接在QMT策略中实现分析。 此外,需要检查QMT的API是否支持实时数据获取和订单提交。例如,XtQuant提供历史数据获取函数get_market_data,而XtTrader处理订单。代码示例可能涉及初始化交易接口、订阅数据、计算指标、生成交易信号等步骤。 最后,确保回答符合格式要求:分步骤、无第一人称、代码和公式正确格式化,并在最后添加相关问题。相关问题应围绕QMT的功能扩展、quantmod替代方案以及策略部署问题展开。</think>QMT量化交易平台)与quantmod的结合应用涉及数据获取、策略开发和交易执行三个核心环节。以下是实现量化交易的关键方法: --- **数据对接与处理** 通过XtQuant模块获取实时行情数据,使用Python的pandas进行数据处理: ```python from xtquant import xtdata data = xtdata.get_market_data(['000001.SZ'], period='1d') df = data.to_dataframe().reset_index() ``` **技术指标计算** 替代quantmod的技术分析方法,使用TA-Lib实现MACD指标计算: ```python import talib df['macd'], df['signal'], _ = talib.MACD(df['close'], fastperiod=12, slowperiod=26, signalperiod=9) ``` **交易策略实现** 构建双均线策略并通过XtTrader执行: ```python from xtquant.xttrader import XtQuantTrader class Strategy: def on_tick(self): short_ma = df['close'].rolling(5).mean() long_ma = df['close'].rolling(20).mean() if short_ma.iloc[-1] > long_ma.iloc[-1]: XtQuantTrader.order_stock('000001.SZ', 'BUY', 1000) else: XtQuantTrader.order_stock('000001.SZ', 'SELL', 1000) ``` --- **回测验证** 使用QMT内置回测框架验证策略有效性,核心评价指标包括: - 年化收益率:$R_{annual} = (1 + R_{total})^{252/N} - 1$ - 夏普比率:$Sharpe = \frac{E[R_p - R_f]}{\sigma_p}$ - 最大回撤:$MDD = \max_{0≤i<j≤T}(P_i - P_j)/P_i$ ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liuyukuan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值