请教:同一做多信号,多头止损后不再开多单。同一做空信号,空头止损后不再开空单。怎么表达
1.你这个应该描述成多久不再开多,比如10个周期,20个周期或者限定当日日内过滤此信号。否则逻辑上是不完整的。
2.是否是多个开仓条件?
[此贴子已经被作者于2020/6/18 9:06:46编辑过]
没有直接的函数可以做到这个需求,只能用全局变量去标记然后限制。
请参考这个例子:
kdj,macd金叉2个开多条件,12个点位止损条件。死叉 是正常平仓条件。
input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
VARIABLE:mark1:=0,mark2:=0;//定义2个不同的全局变量
//KDJ
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,P1,1);
D:=SMA(K,P2,1);
J:=3*K-2*D,NODRAW;
//MACD
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6);
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD1 :=2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea),NODRAW;//macd金叉
macdsc:cross(dea,diff),NODRAW;
kdjjc:cross(k,d),NODRAW;//kdj金叉
kdjsc:cross(d,k),NODRAW;
if macdjc and holding=0 and mark1=0 then
begin
kd1:buy(1,1,market);
mark1:=1; //开仓时候全局变量设为1
end
if kdjjc and holding=0 and mark2=0 then
begin
kd2:buy(1,1,market);
mark2:=1; //开仓时候全局变量设为1
end
if holding>0 and macdsc then
begin
sell(1,holding,market);//KDJ,MACD死叉平仓
mark2:=0; //正常平仓重置为0
end
if holding>0 and kdjsc then
begin
sell(1,holding,market);//KDJ,MACD死叉平仓
mark2:=0; //正常平仓重置为0
end
zscd:(ENTERPRICE-c)>=12*MINDIFF;//12个点位止损
if zscd and holding>0 then
begin
止损平仓:sell(holding>0,holding,market);
if mark1=1 then mark1:=-1;//止损触发的平仓,将全局变量重置为-1,以限制下次开仓
if mark2=1 then mark2:=-1;
end
if all(mark1=-1,20) then mark1:=0;//超过20周期后 全局变量复原为0
if all(mark2=-1,20) then mark2:=0;