当前位置:首页>python>QMT+python量化交易:如何用QMT搭建一个完整量化策略?

QMT+python量化交易:如何用QMT搭建一个完整量化策略?

  • 2026-10-11 08:14:28
QMT+python量化交易:如何用QMT搭建一个完整量化策略?

量化软件QMT和ptrade两者均提供历史数据下载、模型编辑、模型回测、模型交易、算法交易及交易风控等完整量化交易功能。

用户可以快速的将自己的转化为计算机代码,形成自己的交易策略,让计算机帮助用户实现策略的回测检验并实现无人值守自动化交易。

ptrade提供一套专有的Python API。风格偏封装、简洁,更接近于一些成熟的量化平台。

QMT支持VBA和python语言,风格更偏向于底层、直接的交易指令。今天我们详细看看QMT重要函数,以及一个完整的策略框架。

一、QMT必备函数详解

今天以一个简单的策略给大家详细介绍QMT搭建一个完整的策略框架必备的框架。

#encoding:gbkdef init(ContextInfo):print('hello init')def handlebar(ContextInfo):print('hello handlebar')

上图展示了在 QMT 量化平台中,通过 Python 编写基础输出模型的完整流程。

上面模型包含了QMT 策略必须实现的两个核心接口:init() 与 handlebar()。

从下面运行日志可以看到,策略启动后,系统会先执行一次 init (),输出 hello init;随后在行情每触发一根 K 线时,自动调用一次 handlebar (),并输出 hello handlebar。

1、init

init是一个Python模型的初始化方法。在模型加载的时候,系统会调用init方法,做一些必要的初始化,比如初始化股票池、初始化资金账号、初始化全局变量等。

def init(ContextInfo):# 设定股票池方法一,取板块的成分股作为股票池,例如取"上证50"成分股    ContextInfo.trade_code_list = ContextInfo.get_stock_list_in_sector("上证50")# 设定股票池方法二,可以自定义将股票代码写到列表里    ContextInfo.trade_code_list = ['******.SH', '******.SZ']    ContextInfo.set_universe(ContextInfo.trade_code_list) #初始化设定股票池    ContextInfo.accID = '******'# 初始化设定资金账号    ContextInfo.order = 10 # 初始化设置一些全局变量,例如设定买入的手数

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

2、Handlebar

handlebar 是 Python 策略模型的核心执行方法。当模型从数据端获取到所需的行情数据后,会逐根 K 线(bar)触发一次 handlebar 函数,并在该方法中完成对当前 K 线数据的处理工作。

因此,策略的核心逻辑,包括数据获取、交易条件判断、下单指令生成等内容,通常都编写在这个函数内部。

在 handlebar 中处理完数据后,用户可以通过 paint 方法将需要绘图输出的结果返回给界面。界面会将输出结果如实的展示出来。

def handlebar(ContextInfo):    buy_sum = 0    sell_sum = 0    index = ContextInfo.barpos    realtimetag = ContextInfo.get_bar_timetag(index)print timetag_to_datetime(realtimetag, '%Y%m%d %H:%M:%S')    dict_close=ContextInfo.get_history_data(7, '1d', 'close', 3)#持仓市值    holdvalue = 0#持仓    holdings=get_holdings(ContextInfo.accountid, "STOCK")

init 和 handlebar 是 Python 模型中最重要的方法,也是唯二由 C++ 直接调用的方法,所有的执行代码都尽量写在这两个方法中或由其中的函数调用。

二、如何编写一个完整策略?

想在 QMT 里写一套完整的交易策略,其实就几步:先选好你要交易的股票;再调用 QMT 自带的历史数据,算出均线这类你要用的指标;因为要真实下单,还得先看看账户里的资金和持仓情况;最后用平台的下单函数发出买卖指令就可以了。

我们以单均线策略为例,给大家详细讲解。

买入条件:当收盘价上穿 20 日均线时,触发买入信号。

卖出条件:当收盘价下穿 20 日均线时,触发卖出信号。

下面我会一步步讲清楚要用哪个 QMT 函数、怎么写,保证你照着就能操作。

1、选股票池

编写策略的第一步,就是先定好要买卖哪几只股票。放到 QMT 里写代码,这一步专业叫法是设定股票池。对应的专用函数就是 ContextInfo.set_universe()。

def init(ContextInfo):         stocklist = ['******.SH','******.SZ']         ContextInfo.set_universe(stocklist)

它的参数是一个列表,里面就是股票代码,代码有后缀,后缀是为了区分市场,“SH”表示上海市场,“SZ”表示深圳市场。

2、获取行情数据

选好操作哪只票后就开始获取行情数据,由于需要计算20日均线,所以需要用到历史行情数据。

获取历史数据相应的QMT函数就是:get_history_data

用法:

ContextInfo.get_history_data(len, period, field, dividend_type='none', skip_paused=True)

示例:

def init(ContextInfo):    ContextInfo.set_universe(['******.SH', '******.SZ'])def handlebar(ContextInfo):# 获取股票池中所有股票的最近两日的收盘价    hisdict = ContextInfo.get_history_data(2, '1d', 'close')for k, v in hisdict.items():if len(v) > 1:print(k, ':', v[1]-v[0])  # 今日涨幅

我们可以看到这个函数的返回值是一个字典,键是股票代码,值是股票行情。这个函数的参数里面没有股票代码,原因是我们之前订阅了股票,获取的就是订阅股票池的历史行情数据。

3、获取账户资金

接下来就是获取账户资金,这里用到的函数就是get_trade_detail_data,这个函数可以获取账户的资金、持仓、委托、成交等信息。

用法:

get_trade_detail_data(accountID,strAccountType,strDatatype);

示例:

def handlebar(ContextInfo):    obj_list = get_trade_detail_data('6000000248', 'stock', 'position')for obj in obj_list:print(obj.m_strInstrumentID)print(dir(obj))  # 查看有哪些属性字段

函数返回的是一个列表,列表里面是某个数据类型的对象,数据类型传什么,则返回什么数据类型。

4、下单函数

最后用下单函数进行下单,QMT里面有很多下单函数,今天介绍这个最基本的下单函数,order_target_value,这个函数表示把仓位调整到某个价值,这个函数比较适合用于对股票值调仓,

用法:

order_target_value(stockcode, tar_value[, style, price], ContextInfo[, accId])

参数:

stockcode:股票代码

tar_value:目标金额(元),就是将股票市值调整到多少,

style:下单选价类型,包括最新价、买一价等等。

ContextInfo[, accId]:资金账号

以上就是QMT一个基本的单均线策略需要用到的函数,4个基本函数就可以实现一个策略,明天我们继续分享ptrade重要函数。

三、如何开通QMT实盘量化软件?

1、QMT开通流程

(1)开户成功后入金10万后提交QMT申请流程

(2)申请过程全程线上,预计2个工作日申请完成。

(3)等待开通过程中,可以提供测试账号、安装配置流程、量化会员资料。

(4)开通成功后,会通过邮件发送你软件下载地址,登录账号后就可以使用。

2、VIP服务

3、VIP福利

福利1:惊喜佣金

福利2:领取完整教程

福利3:添加量化讨论群

福利4:提供专业量化问题解答

福利5:量化工具安装使用教程、视频

福利6:极速柜台,量化投资者专用,速度微秒级

福利7:提供服务器托管模式:ptrade+ldp极速柜台+vip定向服务器(限50人)

最新文章

随机文章