TB中A函数实现程序化的思路——个人笔记
标签:
tb程序化期货a函数 |
一、我的程序化整体思路分为三部分:
(一)入场
(二)出场
(三)止盈、止损
对1分钟k线数据收盘价的统计结果如下:
发现差分后的数据近似正态分布,然后以样本估计10%分为点处的临界值,最后得出的结论是差分后绝对值不大于3的概率为0.93007,那么就可以针对该结论指定相应止盈策略。
但是由于采取了时时挂单止盈的思路,当出现反手指令或者出场指令时如何处理已经挂出去但未成交的止盈单就是一个问题了,本策略的解决方法是给出场、入场、止盈条件赋予不同的优先顺序,出场和入场均优先于止盈单,比如在有持仓的情况下,出现了出场指令,这时由于所有持仓均已挂着止盈单,这时,必须撤销止盈单,然后发出出场指令,在出场指令未成交的前提下,是不能发止盈指令的。而出场条件优于进场条件,即类似反手,先平后下单的意思。
另外一个值得注意的问题是何时更改止盈指令(在有持仓但无出场和入场的情况下),一开始本人选取了以每根bar的开盘时更改止盈指令,后来发现这种想法愚蠢至极,走了一段弯路,如果采取这种思路,要么知道BarsSinceEntry(自出场以来经历了多少根K线),由于这个参数是图表函数类的,因此,在用A函数时,这个值就为0了,即没有意义了,这时我想到的是将最后一个入场的单子的当日委托单数量保存起来,然后查看该单子否是成交属性,自该单子有成交开始记时,在持仓时间内,每有一个新的开盘价,则其值增加一个,那么接下来的问题是如何判断新的开盘价,也许有人认为只要判断新的k线的开盘价与前一根K线的开盘价即可,如果这样,那开盘价一样的呢。。。。于是我选择了从判断时间入手,当然以15分钟为例,在交易mod(分钟数/15)=0的时刻是K线的开盘时间,比如9:00,9:15,9:30……,这种思路非常简单,但实践起来比较繁琐,因为商品期货盘中有休盘,中午有午休,还有其他非交易时间和节假日,并且不同商品的交易时间不一样,比如有夜盘的商品、无夜盘的商品,和股指的交易时间就不一样,虽然思路简单,但真正做起来比较麻烦,这里还好,因为本人的止盈价格是当前K线开盘价的函数,即:止盈价stopPrice=function(open),那么对于开盘价一样的K线,则可采取相同的止损价,这时就不需要从一根K线过渡到另一根K线时取消止盈,再重新发了,即只有当开盘价不同时,才有可能更新止盈价,为什么说才有可能更新,因为不同的开盘价可能通过计算获取相同的止盈价,即问题最终归结到,当计算出不同的止盈价时,才更新止盈单。最终问题通过这种最简单的途径解决:当开盘价变化时,且产生了不同的止盈单,这时,才撤销原有的止盈单,而按发送新的止盈单。(注意:相同的开盘价一定能计算出相同的止盈价,即open到stopPrice是单射;不同的开盘价有可能计算出相同的止损价,即function不是一一对应的)。
最后考虑到当下单量较大无法一次完全成交时如何发送止盈指令,由于止盈指令是在只要入场条件有成交时(也许是部分成交),就按当前可平的量进行发送,如果有新的成交,则会将新的成交后可平仓发送止盈,直到全部成交为止,只要有最新的成交信息出来都会触发发送止盈单发送命令。
具体结构如下图所示:

加载中…