关于平仓判断成交后再开仓的反手指令,金字塔的解决方案和TB的不作为比较! [开拓者 TB]
- 咨询内容: 日内满仓交易时,平仓反手的实现方法 Post By:2011-7-13 22:43:44 [只看该作者]
日内满仓交易时,平仓反手的时候,有个问题要特别注意,就是在平仓单未成交前如果发出开仓委托单会出现保证金不足的情况造成无法自动开仓
这个问题是众所周知的
1,一般的处理方法是在每个下单指令的最后面加一个顺序下单控制符,如下:
hi:=ref(hhv(h,20),1);
lo:=ref(llv(l,20),1);
entertime:=time<=144500;
exittime:=time>=145700;
buycond:=c>hi;
sellcond:=c<lo;
if holding>0 and (sellcond or exittime) then sell(1,1,market),orderqueue;
if holding<0 and (buycond or exittime) then sellshort(1,1,market),orderqueue;
if holding=0 and entertime and buycond then buy(1,1,market),orderqueue;
if holding=0 and entertime and sellcond then buyshort(1,1,market),orderqueue;
这种方法基本上可以解决问题。orderqueue顺序下单的意思是委托单按先后顺序排队等待,依次处理
但也有不足的地方,就是在平仓单未及时成交时,依然会出现保证金不足的错误。如 A(平多)、B(开空),A未及时成交自动撤单后追单
自动追单的委托就排在后面了,也就是下单顺序就为 B、A 。B发送时就会提示错误,因为保证金并未释放。
2,现提出另一处理方法
问题的关键,就是要等平仓单完全成交后再发开仓单,这样才能避免出现保证金不足的情况
反手模型有个特点,就是平仓单成交后,仓位为0,而后台的tholding2这个函数就是表示实际持仓
于是:
hi:=ref(hhv(h,20),1);
lo:=ref(llv(l,20),1);
entertime:=time<=144500;
exittime:=time>=145700;
buycond:=ref(c>hi,1);
sellcond:=ref(c<lo,1);
abb:=not(islastbar) or (islastbar and tholding2=0);//这里要这样处理,否则tholding2会影响前面得信号
if holding>0 and (sellcond or exittime) then sell(1,1,market);
if holding<0 and (buycond or exittime) then sellshort(1,1,market);
if holding=0 and entertime and buycond and abb then buy(1,1,market);
if holding=0 and entertime and sellcond and abb then buyshort(1,1,market);
程序执行过程:1,平仓单发出后,不发开仓单,因为tholding2不为0.如果平仓单没及时成交,自动撤单后追单直至成交
2,平仓单成交后,tholding2=0,此时开仓指令条件成立,发出开仓单。不会出现保证金不足的情况
3,注意,用的是tholding2,而非tholding,tholding会受未成交委托单影响。
以上适用的条件 :1,需要平仓委托在信号成立的K线内成交,才能发出开仓委托。模型基本符合这个条件
2,固定时间间隔或者高频。如果是K线走完模式,还需稍作修改为固定时间间隔模式
注:这么重要的功能,TB到现在也没有一个成功的事例来给初级投资者一个模板,来帮助我们这些初级学者来实现这种重要的功能,不知道TB整天都在干什么? - TB技术人员: TB公式里指南里有现成的平仓延迟5个TICK反手的模板。
请查阅
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 262069696 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容