量化交易核心是把我们的投资交易思路、选股逻辑、买卖时机、风险控制等经验转化为由计算机严格执行的程序化策略,通过程序自动完成数据处理、信号判断、委托下单、仓位管理、止盈止损等全流程交易操作。
量化交易需要用到量化软件,依托量化软件的高速运算能力,实现多市场、多品种、多时间周期的实时监控与快速交易。国内主流量化交易软件里,QMT系统实功能强大、实用性强,支持量化交易全流程操作。
这篇文章 将详细给大家介绍QMT 的 Python 接口,手把手教大家编写第一个自动交易策略。
一、QMT系统Python的基本架构
QMT支持Python+VBA双语言,其中Python 简单易学且配备丰富数据分析工具库(Pandas、 Numpy),加上Python底层是C++封装的高性能接口,数据获取和实盘下单速度都非常快,所以Python成为量化用户的主流选择。
QMT 系统安装包自带 Python运行环境,用户安装完QMT客户端后,可以直接使用Python。在这个预先封装的Python环境中,QMT除了提供常规的Python api带的库外,还支持用户自行安装自己所需的库。
现在我们看看QMT系统的python框架。在QMT中,任何一个Python策略都必须包含两个函数:init 和 handlebar。
#encoding:gbkdef init(ContextInfo):print('hello init')def handlebar(ContextInfo):print('hello handlebar')1、init(初始化函数)
初始化函数 init() 在整个策略中只执行一次,一般用于初始化操作,比如:
(1)设定交易账户:指定用于后续下单的资金账号。
ContextInfo.accID = '8888888'(2)设定股票池:定义策略需要关注和交易的股票列表。
ContextInfo.trade_code_list = ['******.SH','*******.SZ']ContextInfo.set_universe(ContextInfo.trade_code_list)(3)设置全局变量:定义初始化在整个策略生命周期中需要使用的自定义变量,例如买卖状态标志、手数等。
ContextInfo.buy = TrueContextInfo.order = 10(4)设置回测参数:虽然在策略编辑器的回测参数界面可以设置,但也可以在 init 函数中通过代码设置回测的起始和结束时间,且代码中的设置优先级更高。
ContextInfo.start = '2012-06-06 10:00:00'ContextInfo.end = '2013-08-08 14:30:00'2、handlebar 行情处理函数
行情事件函数 handlebar() 为行情数据的处理函数,每根 K 线运行一次;实时行情获取状态下,先每根历史 K 线运行一次,再在每个 tick 数据到来时运行一次,也就是说,在盘中,handlebar会被频繁调用,你可以在这里编写你的交易逻辑,包括读取行情数据、计算指标、判断买卖条件、下单。
def handlebar(ContextInfo):# 输出当前运行到的 K 线的位置print(ContextInfo.barpos)二、QMT完整策略示例
根据上面的框架,现在我们来写一个简单且完整的量化策略。它只在初始化时打印“hello init”,并在每一根K线上打印“hello handlebar”。
# coding:gbkdef init(ContextInfo):print('hello init')# 可以在这里设置股票池 stock_list = ContextInfo.get_stock_list_in_sector("", "") ContextInfo.set_universe(stock_list)def handlebar(ContextInfo):print('hello handlebar')# 获取当前K线的索引和时间 index = ContextInfo.barpos timetag = ContextInfo.get_bar_timetag(index)print('当前K线索引:', index, '时间戳:', timetag)登录QMT账户,首页点击新建策略,选择Python 模型后进入QMT 策略编辑器里,把上面策略复制进去后点击运行。在QMT下面的日志中,会先打印一行hello init,之后再连续输出多条hello handlebar。
这是因为策略在启动时,会先执行一次init初始化方法;接着,会对主图加载的每一根历史 K 线,按顺序执行一遍handlebar函数。
以上就是今天分享的全部内容,有任何疑问可以评论区交流!

研报速递
发表评论
发表评论: