iQuant使用手册——(1)软件运行机制

iQuant 极速策略交易系统平台与其他普通股票软件最大的不同点就是其提供模型编辑、模型交易

和风控功能。通过模型编辑,用户可以快速的将自己的转化为计算机代码,形成自己的交易策略,让计

算机帮助用户实现策略的回测检验并实现无人值守自动化交易。

在程序化的支持上,平台目前支持的编程语言:Python 。在后续的规划中, iQuant 系统将全

面支持市面上主流的用于量化领域的编程语言。

随着量化在国内的深入发展以及大量专业编程人员进入量化这个领域,市场上的量化投资者对 Python

的需求越来越大, iQuant 的 Python API 就是为了满足这部分投资者而量身打造的极速策略交易系

统。Python API 既可以高效使用iQuant 底层的数据接口及交易接口,也可以方便地引入

Python 支持的第三方库,极大地便利了量化投资者的模型策略需求

1.1. 策略示例

1.1.1. 一个简单的 Python 策略

简单的Python策略

上图展示了如何在iQuant平台上用 Python 写一个输出 hello world 的模型。图中的模型实现了一个

Python 模型必须实现的两个接口:init 与 handlebar 。输出窗口展示了这个模型的运行输出。系统首

先调用 init 方法输出了hello init,随后在每根 K 线上调用一次 handlebar,输出一次 hello handlebar。

1.2. 运行机制

1.2.1. 重要概念

(1)Bar的概念

我们把单根 K 线称之为 Bar,每根 Bar 由 tick(分笔)组成。

分钟 Bar 示例

我们的模型是根据行情驱动,逐 K 线运行,每根 K 线调用一次 Python 模型中的

handlebar(ContextInfo) 函数。

在盘中,最后一根 K 线会随着 tick 数据的增加而变动,每变动一次,handlebar(ContextInfo) 函数被

执行一次。这根 K 线的最后一个 tick 判定模型信号是否成立,如果模型信号成立,交易函数被调用,则

在下一根 K 线的第一个tick发出下单信号,生成下单任务。

根据选择的运行周期不同,handlebar(ContextInfo) 函数的运行次数也不同。如选择在日线上运行策

略,则handlebar(ContextInfo) 函数每天被调用一次(盘中虽会每个 tick 调用一次,但只有最后一个

tick 才会判定交易函数是否被调用)

(2)Init

init是一个Python模型的初始化方法。在模型加载的时候,系统会调用init方法,做一些必要的初始化,

比如初始化股票池、初始化资金账号、初始化全局变量等。如果用户的模型无需做初始化,可以在方法

体中写pass,但方法的定义必须存在,否则模型的运行会报错。

Init 初始化

(3)Handlebar

handlebar 是整个 Python 模型中的核心执行函数。当模型从数据层获取到运行所需要的数据之后,会

对数据集上的每一根 bar,调用一次 handlebar 函数,处理当前这根 bar 上的数据。也就是说,用户模

型的核心逻辑都是写在该函数中的,如获取数据,设置下单条件等。在 handlebar 中处理完数据后,用

户可以通过 paint 方法将需要绘图输出的结果返回给界面。界面会将输出结果如实的展示出来。

(4)ContextInfo

ContextInfo 是整个 Python 框架中的一个核心对象。它包含了各种与 Python 底层框架交互的 API 方

法,也是一个全局的上下文环境,可以在 init 以及 handlebar 这两个函数中自由地传递用户创建的各种

自定义数据。

1.2.2. Python 策略运行机制

用户在界面上提交请求后,在最终看到结果前会经历两步:

(1)创建模型,初始化环境,发送数据请求;

(2)数据到达后,调用 Python 的 init 函数进行 Python 初始化,然后运行 handlebar 方法;

ContextInfo 是 Python 模型中的全局对象,其中封装了 benchmark,universe 等变量,也封装了

get_history_data 等重要函数,是 init 与 handlebar 之间,以及各个 handlebar 之间进行信息传递的

重要载体。用户也可以在其中封装自己想要定义的全局变量或函数,但注意不要与原有的重名。

init 和 handlebar 是 Python 模型中最重要的方法,也是唯二由 C++ 直接调用的方法,所有的执行代码

都尽量写在这两个方法中或由其中的函数调用。

init 是 Python 的初始化方法,负责初始化模型运行所需的初始变量,如对于基准 benchmark 和股票

池 universe 的初始化。

handlebar 是 Python 的核心执行函数。在 K 线图(目前尚不支持分时图)上运行时会根据主图的时间

轴,每个时间点会进入相应的 handlebar 方法,可在 handlebar 中使用 ContextInfo.barpos 来获取当

前的 bar 索引位置。

获取当前 Bar 位置

1.2.3. Python 交易函数运行机制

iQuant 模型是根据行情驱动,逐 K 线运行的。即点击运行模型时,模型是从第 0 根 K 线开始运行

到最后一根 K 线(如想加快模型运行速度,可以策略编辑器-基本信息中设置快速计算,限制计算范

围,只计算最新的指定数量的 K 线范围),每根 K 线调用一次 Python 模型中的

handlebar(ContextInfo) 函数。

逐 K 线运行:从第 0 根 K 线一直调用 handlebar(ContextInfo) 运行到最后一根

在盘中,最后一根 K 线每变动一次,handlebar(ContextInfo) 函数被执行一次。这根 K 线的最后一个

tick 判定模型信号是否成立,如果模型信号成立,交易函数被调用,则在下一根 K 线的第一个 tick 发出

下单信号,生成下单任务。

每个 tick 数据来时,最后一根 K 线会随着变动

一个模型判定:当收盘价 > 开盘价时产生模型信号触发下单

如上图,当盘中运行到最后一根 K 线的时候,每个 tick 数据来时都会判定一下这个条件是否成立,当不

是这根 K 线的最后一个 tick,之前的所有的 tick 成立的产生的信号就是虚的信号。只有当这个 K 线确定

时,产生的信号才是有效信号,才会触发下单。

模型运行在日 K 线周期及日 K 线以上周期时,

因为是在下一根 K 线的第一个 tick(最新行情 tick )发

出下单信号,而下一个 K 线就是第二日了。所以模型运行当日无法下单,除非:

(1)设置 passorder 函数中的 quickTrade 参数为 1 ,立即下单;

(2)使用 do_order(ContextInfo) 函数。

quickTrade 参数设置为 1 可实现最后一根 K 线没有走完生成的模型信号也发出下单信号。

do_order(ContextInfo) 函数被调用后会把上一根 K 线生成的模型信号立刻发出,且只触发发一次,解决交

易函数必须是在下一根 K 线的第一个 tick 数据时发信号的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

交易猿小锋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值