Board logo

标题: 再谈TB信号丢失 [打印本页]

作者: 龙听    时间: 2017-11-1 15:38     标题: 再谈TB信号丢失

  1.   之前博文“我对关于TB交易信号丢失的理解”中谈到由于没有处理到一根bar上最后一个tick数据,从而丢失了图表交易信号。最近在TB开发的过程发现,导致图表交易信号丢失还不止这个原因,有时莫名其妙的也会丢失,本文不再讨论其原因,因为牵扯TB内部机制的原因不好去探究,也没有太大必要,我仅讨论一下信号丢失后会出现的一些问题。
  2.     之前,我还是说说TB提供给用户的接口分图表接口和交易接口(我自己命名的,不知道准确不)。图表接口就是和超级图表相关联的系统变量,函数等等,比如buy(),MarketPosition,EntryTime等。而交易接口就是单纯相关于账户的交易的一些函数,就是我们通常所说的A_开头的函数,比如A_SendOrder,A_OrderBuyOrSell,A_OpenOrderTime等。图表接口和交易接口其实是相关联的,我理解的是图表接口将交易接口封装其内,包括了:1,某些逻辑控制;2,调用交易接口进行交易;3,绘图等步骤。举个例子,buy函数内部可能就做了以下操作:
  3. Bool Buy(Numeric Share=0,Numeric Price=0)
  4. {
  5. //逻辑控制:
  6.     1.每根Bar上只进行一次交易
  7.     2.MarketPosition = 0 时,该函数按照参数进行多头建仓。
  8.     如果当前持仓状态为空仓,即MarketPosition = -1 时,该函数平掉所有空仓,同时按照参数进行建       仓,两个动作同时发出。
  9.     如果当前持仓状态为多仓,即MarketPosition = 1 时,该函数将继续建仓,但具体是否能够成功建仓要取决于系统中关于连续建仓的设置,以及资金,最大持仓量等限制。
  10. 当委托价格超出k线的有效范围,在历史数据上,将会取最接近的有效价格发单;在实盘中,将会按照实际委托价格发单。
  11. //调用交易接口:
  12. A_SendOrder(Enum_Buy,Enum_Entry,Share,Price)
  13. //绘制交易信号,盈亏连线等
  14. }
  15.     而A_开头的交易接口则直接与交易平台接口相关联,对于其调用,功能相对独立,没有封装太多的处理,封装的部分也仅仅和交易所回报相关。
  16.     因此,图表接口用于历史回测,交易接口用于实盘交易。虽然这句话反复的在各个TB教程里提及,不过很多使用者仍没有好好理解,因此在程序开发的过程中出现问题,特别就是前面所提及的信号丢失的问题,下面我们就来讨论。
  17.     举个例子,MarketPosition,每个人都知道,当MarketPosition值为-1时,当前位置为持空仓;0,当前位置为持平;1,当前位置为持多仓。 有很多示例代码也这样表示:
  18. If(MarketPosition==1) // 有多仓的情况
  19. {
  20.     if(满足策略条件)
  21.     {
  22.     sell();//平仓
  23.     }
  24. }
  25.     这种代码片段乍一看一点问题也没有,不过在交易信号丢失的时候,问题就大了。我们知道,在实盘中,最后一根bar上的每一个tick信号到来时,程序都将执行一次,这时如果触发了buy函数,他还是会调用交易接口去交易的,只是交易成功后,后面的tick数据再触发buy函数时,由于上文讨论到的内部封装的逻辑控制“每根Bar上只进行一次交易”,因此不会重复发单而已。然后,当最后一个tick到来形成最后一根bar时,不论是什么原因只要是造成了交易信号丢失,那么就算是之前你buy成功了,也就是说持仓是多仓,MarketPosition仍然为0,因为MarketPosition是图表接口的变量,他的值取决于图表上的信号。
  26.     这样的话,你已经持有多仓,结果If(MarketPosition==1)永远不能满足,你的平仓条件就设为虚有了。
  27.     总之,图表接口只用于历史回测,以及在实盘中基于图表数据的一些策略编写,交易策略以及执行,必须用A_函数自行控制。比如上述代码段改为:
  28. LastIndex=A_GetLastOrderIndex(Enum_Buy,Enum_Entry);//获取上一个开多仓的报单索引
  29. if(A_OrderStatus(LastIndex)==Enum_Filled)//报单已经成交,也就是说开多仓成功的情况
  30. {
  31.     if(满足策略条件)
  32.     {
  33.     //平仓
  34.     }
  35. }
复制代码





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