正确理解真格事件之间的运行机制,是使用真格量化平台才能写好代码的前提、基础。

一、真格事件之间的关系

真格的事件之间是相互独立的,那么如何建立各独立事件之间的通信机制呢?这个就要靠全局变量。真格的全局变量的声明格式是、例如“g.var”。

真格的事件是相互独立的,也就是说各真格事件内的全局变量、局部变量的更新是相互独立的,相互之间是异步关系,也就是说各事件被触发的时点是随机的、即先后顺序不是固定的。

真格事件内的代码是从上到下运行的。但是,例如你使用了一系列真格事件从上到下罗列了,但事件与事件事件的运行顺序却不是从上到下依次运行的。那么是如何运行的呢?

例如行情事件里的下达指令下达了,关于下单结果的全局变量会在委托事件里被更新,如果继而委托单发生了成交则关于成交结果的全局变量会在成交事件里被更新。这些被更新的全局变量,你可以在行情事件里获取到。这样,各事件之间就可以通过全局变量建立联系沟通关系了。

二、应用全局变量的注意点

如果你的全局变量不需要每天被更新,只需要在上架策略时被定义,则可以把全局变量放在开始事件里。

如果你的全局变量需要每天开盘前被初始化,则应该放在初始化事件里。

可以使用闹钟事件,做收盘当天交易明细及统计结果的打印之类的事情。

三、关于撤单的编程

这个是难点,解决这个难点需要理解真格事件之间的运行机制后才能解决好。笔者是在编写撤单逻辑时反复折腾才最终理解真格运行机制的。

在行情事件里发委托单后,委托的结果的全局变量是在委托事件里更新的。获取到这个全局变量更新结果后,需要你在行情事件里编写撤单指令。同样,撤单指令也是委托单,这个委托结果也是在委托事件里更新相应的全局变量的。

在下达委托单时,需要防止多下单或者少下单,则需要从成交事件里取更新的关于成交结果的全局变量来与你的委托计划手数、价格对照来解决。

注意,判断委托单状态与撤单的指令尽量不要在同一个事件里写,这是因为事件之间的异步关系导致你的判断条件的先后顺序有随机性,即充满不确定性。而且,成交事件数据更新比委托事件的数据更新快,但两者都比行情事件里更新更快(想理解这句话看本文第一条阐述),所以你在行情事件里判断委托状态采取撤单或者继续下单是完全可以的。

其实,就是你需要把事件之间的异步关系在行情事件里处理为同步关系,即理顺事件全局变量之间的先后顺序关系。

四、真格的编程难度是比较高的

如果写简单的下单实现不实用的、无用的程序化交易,只看真格的例程就行,但这样并不能引导学习者入门!

因为交易指令是精细化的逻辑算法的代码实现。所以真格应该整理提供一个适用、实用的模板引导学习者快速入门,否则学习者会走很多弯路、也许最终会放弃使用真格。当然,对于计算机专业毕业的、熟悉事件编程机制的人,学习使用真格并不难。我感觉难,是因为我是文科毕业生完全没有编程基础训练、小白起家。

真格的编程难度是比较高的,这是因为事件机制不容易理解好。真格的编程也是繁杂的,这是因为建立事件之间的通讯,需要建立大量的全局变量。

学习使用真格,做好被折磨的心理准备吧!