金字塔“序列模式下,平仓信号未出现,却出现另一方向的开仓信号”的解决方法,类似的问题之前论坛上好几个人提过,当时只是给你建议,没有具体解决
今天一客户刚好碰到类似情况,故在此给一个解决的示例
某投资者的策略:
做多: 仓位为0时,macd 金叉开多,死叉平多(需穿越)
做空:仓位为0时, 慢速KD死叉开空,金叉平空(需穿越)
当然,如果是标准版用户,使用逐K线模式,此模型很容易便可实现,但在序列模式下如何实现呢?
如果采用以下代码,则会出现“平仓信号未出现,却出现另一方向的开仓信号”:
diff:=ema(c,12)-ema(c,26);
dea:=ema(diff,9);
RSV:= (CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
FASTK:=SMA(RSV,3,1);
K:=SMA(FASTK,3,1);
D:=SMA(K,5,1);
bk:=cross(diff,dea);sp:=cross(dea,diff);
sk:=cross(d,k);bp:=cross(k,d);
enterlong:bk,tfilter;
exitlong:sp,tfilter;
entershort:sk,tfilter;
exitshort:bp,tfilter;
问题出现的原因是 平仓条件成立之前,另一方向的开仓信号就成立了。所以,这里要过滤一下。
方法有多种,可以采用如下思路,这种思路比较有通用性:
diff:=ema(c,12)-ema(c,26);
dea:=ema(diff,9);
RSV:= (CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
FASTK:=SMA(RSV,3,1);
K:=SMA(FASTK,3,1);
D:=SMA(K,5,1);
bk:=cross(diff,dea);
sp:=cross(dea,diff);
sk:=cross(d,k);
bp:=cross(k,d);
flagd1:=if(barpos=1,0,if(bk,1,if(sp,0,0)));
flagd:=valuewhen(barpos=1 or bk or sp,flagd1);
flagk1:=if(barpos=1,0,if(sk,-1,if(bp,0,0)));
flagk:=valuewhen(barpos=1 or sk or bp,flagk1);
enterlong:bk and flagk=0,tfilter;//flagk过滤
exitlong:sp,tfilter;
entershort:sk and flagd=0,tfilter;//flagd过滤
exitshort:bp,tfilter;