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

news/2024/11/8 22:46:12/

新年立个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)

http://www.ppmy.cn/news/18453.html

相关文章

YOLO v2主要看这些重点

来源:投稿 作者:ΔU 编辑:学姐 往期内容: YOLOv1学习笔记 论文 《YOLO9000:Better, Faster, Stronger》 Joseph Redmon∗†, Ali Farhadi∗† University of Washington∗ , Allen Institute for AI† http://pjreddie.com/…

应届生身份为什么重要?

文章目录一、应届生身份的划分1、企业角度2、学校角度3、国家角度二、应届生身份的重要性1、国考/省考2、企业招聘3、落户政策4、签约保障一、应届生身份的划分 国家统一招生的高校毕业生离校时,和在择业期内(国家规定择业期为两年)未落实工…

Java是编译性语言还是解释型语言 ?

首先我们应该了解这两种语言的概念 . 高级语言在计算机上执行 , 有两种方式 , 分为编译型语言和解释型语言 . 编译型语言 : 编写源代码–>编译–>链接. 典型的编译型语言 : C/C . 特点 : 源代码中一处有错 , 就不允许编译 ; 编译过程中出现一处错误 , 就停止编译 . 优…

【操作系统】—— 如何使用VMware虚拟机(带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

2023牛客寒假算法基础集训营2

目录C Tokitsukaze and abn (hard)E Tokitsukaze and FunctionF Tokitsukaze and Gold Coins (easy)H Tokitsukaze and K-SequenceL Tokitsukaze and Three IntegersC Tokitsukaze and abn (hard) 思路: 差分 算贡献每个位置被几条线段覆盖,直接返回c…

2023年网络安全比赛--Linux渗透测试中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.通过本地PC中渗透测试平台Kali对靶机场景进行系统服务及版本扫描渗透测试,并将该操作显示结果中Apache服务对应的版本信息字符串作为Flag值提交; 2.通过本地PC中渗透测试平台Kali对靶机场景进行渗透测试,将该场景/var/www/ht…

Linux常用命令——tar命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tar Linux下的归档使用工具,用来打包和备份。 补充说明 tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也…

基于EasyExcel实现百万级数据导入导出

基于EasyExcel实现百万级数据导入导出 在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。 大数据的导入和导出,相信大家在日常的开发、面试中都会遇到。 很多问题只要这一次…