大师请教一下!一个方向出现三次以上开仓时马上全平,而且后面同方向开仓无效,直到出现不同方向为止。
比如:多单出现三了次开多信号,当出现第四次时就全平多单,后面的多单信号不开仓。当出现开空时再开空单。空单也是就是加仓了三次后第四次加空信号出现就全平,后面出现空单信号无效。
需要明确下:开仓条件是某个单一条件反复触发,还是有多个独立的开仓条件在触发?
单一的条件;如条件:开盘价大于收盘价开多仓。出现三根阳线后面的阳线不再表示,且平多仓。出现阴K线再开空仓,同样出现三次后面的阴线不再表示,且平空仓。请大神编一个!!!!谢谢
还有个地方需要处理。你开了一次多,次根K立马就触发开空条件怎么处理?忽略掉?直到开足三次多头?
开了一次多,后出现开一次空有效,只是连开了三次多单后第四次出现开多就全平多单,以后的所有多单无效不开多仓,直到出现开空信号才开空单为止。开空反过来就是一样的。麻烦大神了!
只是连开了三个多单,在第四个多单信号出现时平仓。
条件w
当开多条件满足W时,开多单一次 ,再一次出现开多条件信号W时开多单第二次,再一次出现开多信号W时开多单第三次,当出现这种连续开多单时在出现第四次W开多时平多单,且以后出现N次条件W开多单都无效,直到出现反向开空单。
当出现一次开多后,再出现开空这样的信号还是不变,照样执行开平空信号。只是要表示当出现连续三次开多,中单没有开空的时候。当出现第四次开多要提示信号!
VARIABLE:ct:=0,mark:=0;//使用全局变量ct记录单向的开仓次数,mark表示下次可开仓的方向。在连续单向开仓三次后,mark重置一次或者是反手后也会重置一次
ma25:=ma(c,25);
ma50:=ma(c,50);
masc:cross(ma50,ma25);
input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
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;
kdjjc:cross(k,d),NODRAW;//kdj金叉
//以kdjjc金叉作为开仓条件 masc死叉作为平仓条件。你替换成自己的条件即可
//遇到反向信号时候直接反手
if kdjjc and ct=3 and holding>0 then //满足已经单向开仓三次,则平仓 重置全局变量
begin
sell(1,holding,market);
mark:=-1;
ct:=0;
end
if holding<0 and kdjjc then //反手
begin
反手平空:sellshort(1,holding,market);
ct:=0;
mark:=1;
end
if kdjjc and ct<3 and mark>=0 then //开仓+加仓
begin
buy(ct<3,1,market);
if holding>=0 then ct:=ct+1;
end
if masc and ct=3 and holding<0 then //满足已经单向开仓三次,则平仓 重置全局变量
begin
sellshort(1,holding,market);
mark:=1;
ct:=0;
end
if holding>0 and masc then //反手
begin
反手平多:sell(1,holding,market);
ct:=0;
mark:=-1;
end
if masc and ct<3 and mark<=0 then //开仓+加仓
begin
buyshort(ct<3,1,market);
if holding<=0 then ct:=ct+1;
end
DRAWICON(kdjjc,h,1);//标记下金叉死叉的位置,方便观察。
DRAWICON(masc,l,2);
楼上代码供参考。主要就是需要用到全局变量来记录开仓次数。以及在合适时机重置全局变量。