诸位同行高人,我有一个想法不知如何实现,请诸位帮忙!
如何同方向连亏两次后,禁止同方向开仓。如果在禁止开仓仍然连续发出同方向信号,则在第二次信号出现时 允许开仓 。 谢谢!
需要明确下:
1.亏损按照完整的平仓亏损计算。
2.连亏的定义。如果先开多 平仓后再次开空,等空头平了再开多,这种是否算按照连续开多处理还是说必须连续2次不间断的开多平多。
是的
1.亏损按照完整的平仓亏损计算。
2.连亏的定义。必须连续2次不间断的开多平多。 谢谢!
刚刚 金字塔系统 竟然还崩溃了
input:p(26,20,100,8),s(12,5,40,4),m(9,2,60,6),n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);//参数设置
VARIABLE:ct1:=0,ct2:=0;
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;
DIFF:=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD1:=2*(DIFF-DEA), COLORSTICK;
macdjc:cross(diff,dea);//macd金叉
macdsc:cross(dea,diff);
kdjjc:cross(k,d);//kdj金叉
kdjsc:cross(d,k);
if macdjc and holding=0 and not(ct1=2 and NUMPROFIT(1)<0 and NUMPROFIT(2)<0) then //macd金叉 且满足条件 not(连续开多且2次开多盈亏均为负) 开多
begin
buy(holding=0,1,MARKET);
ct1:=ct1+1;//ct1记录连续开多次数
ct2:=0;//开多时重置开空的计数
end
if macdsc and holding>0 then //macd死叉平多
begin
sell(holding>0,holding,MARKET);
end
if kdjsc and holding=0 and not(ct2=2 and NUMPROFIT(1)<0 and NUMPROFIT(2)<0) then
begin
buyshort(holding=0,1,market);//kdj死叉开空
ct2:=ct2+1;//ct2记录开空的次数
ct1:=0;//开空时重置开多的计数
end
if kdjjc and holding<0 then
begin
sellshort(holding<0,holding,market);//kdj金叉平空
end
提供一个范例供参考,代码有点多,你先消化下思路。我尽量多做了写注释,有些地方不清晰的可以跟帖。