Board logo

标题: 交易开拓者运行机理 [打印本页]

作者: 龙听    时间: 2017-11-1 16:10     标题: 交易开拓者运行机理

我认为基于交易开拓者(TB)进行程序化交易的关键,在于理解其背后运行的机理。因为TB对于行情,交易等偏底层接口(如恒生接口,CTP接口)进行了较为复杂的封装,以便让投资者更专注于自己的策略研发,所以理解其运行的机理,对于策略开发有莫大的好处。下面就对TB的程序化交易运行的机理做一描述。以下的有些描述是参考之前看到另一位朋友写的博文,所以可能有地方与其雷同,特此声明交易开拓者运行机理。
首先,TB的代码结构如下:
Params
//参数
Vars
//变量
Begin
//策略代码
End
第一种情况,当历史回测时(仅加载策略),策略代码在每一根bar(K线)上执行一遍;每根bar包含的信息是静止的,比如open,close,high,low等;参数的值也是静止的,即从一开始确定params之后,以后策略代码的每次执行都用确定的params值,而不能动态变化;不存在交易买卖方的撮合,所以不存在不能交易的情况,也不会出现滑点,即策略中用什么价买卖就一定能够成交。
举个例子,假设选择的历史回测商品样本周期有500条K线,TB的执行过程是:
1、先显示出500条K线,每根k线包含相应的数据,所有的数据都是静止的,也没有新的数据进来。
2、从第一条K线开始(最左边的一条),开始执行交易公式,读取参数值(仅此一次)。然后,初始化局部变量,执行begin和end之间的代码。
3、然后,进入下一根K线(Bar),再初始化局部变量,执行begin和end之间的代码。
4、依次处理所有的K线。
5、在某根K线上,发现符合开仓条件,于是在超级图表上显示出开仓标识,并修改marketposition的值。
6、继续运行下面的K线。
7、在某根K线上,发现符合平仓条件,于是在超级图表上显示出平仓标识,并在开仓和平仓价之间画出连线。若该笔交易盈利,则用红色连线,若该笔交易亏损,则用绿色连线。
8、继续运行后面的K线,直到最后一条。
第二种情况,在开盘前启动自动策略交易系统
假设商品样本中已经有了200条数据,假设在开盘前2分钟启动TB的自动交易,TB的执行过程是:
1、开盘前,在已经存在的每根Bar上运行一次交易代码。如果发现某些K线符合开仓或平仓条件,只是显示标识符号,但不实际发出交易指令,因为还没开盘。
2、开盘后,分笔交易数据(tick)开始传过来。为了保持实时性,TB就必须对每个tick做出响应,就是在每个tick都运行一次程序代码。由此可见,交易时间里,最后一根也就是最新的那根Bar上,程序代码都被多次执行。这一点,和历史数据测试时明显不同。
3、由于在最新的一根bar上,交易代码反复被Tick数据触发,而此时下一根bar还没出现,这条Bar的数据中,除了开盘价之外,其他的比如:收盘价、最高价、最低价都在随着每个Tick的变动而变动。当下一根K线出现的瞬间,这条Bar的所有数据才能被确定下来。

第三种情况,在交易时间内启动自动交易
假设商品样本中已经有了200条k线数据,其中最后2条k线数据还是开盘后生成的,假设在开盘后2分钟启动TB的自动交易,TB的执行过程是:
1、读取出200条Bar,包括开盘后产生的2条,在每根Bar上执行一次交易代码。如果发现某些Bar上符合开平仓条件,仅仅显示交易信号,但不实际发出交易指令。因为你迟到了,刚才的行情已经成为历史了。
2、在新的Bar上,201条k线上,依据Tick去运行交易代码。
由此可见,TB的交易指令,应该只能在最后一根bar上(Barstauts == 2)且有行情数据时才能发出。这一点,应该是TB内部的运行机制,不需要我们在TB代码中去再写一遍。

那么,这种机制就会引发下面的问题:
  如果交易代码中的开平仓条件中,用到了close、high、low,则有可能使信号时有时无,而开平仓信号只是在最后一个tick当数据到来形成这根bar后,才会根据已经确定下来的值判断是否显示信号。同样的一根Bar上,由于主力的拉升,价格突然走高,符合 了买入条件,该Tick出现后,交易代码执行一次,发现符合买入条件,就发出买入指令。如果用的是Buy,sellshort,sell,buytocover这些交易函数,那么在这根bar上只交易这一次,所以会出现交易和图形上显示的交易信号不一致的问题。如果用的是A_SendOrder(),若下一笔tick数据再次符合交易条件,则又会再次执行交易代码。价格如此反复几次,就会在该Bar上反复买入多次。从而形成反复开仓,导致资金被大量占用的问题,而信号显示的仍然是最后一个tick数据到来形成这根bar时,判断此时数据是否满足交易条件而显示信号。
这些问题的存在,是很多刚刚用TB的朋友问我最多的问题,今后我在这个专栏里面,分享一些自己的处理办法,供大家参考,也欢迎大家一起讨论。




欢迎光临 龙听期货论坛 (http://www.qhlt.cn/) Powered by Discuz! 7.2