满足条件开多或者开空后,亏损1%,平仓然后反手,是上次开仓数量的2倍;盈利超过1%后,回撤50%,平所有仓。怎么我写的不对呢。。。
M:=1;
VARIABLE:AA:=0; N:=1;
KD:CROSS(MA(C,5),MA(C,10));
KK:CROSS(MA(C,10),MA(C,5));
DTKS:=HOLDING>0 AND C<=ENTERPRICE-M/100*ENTERPRICE;
KTKS:=HOLDING<0 AND C>=ENTERPRICE+M/100*ENTERPRICE;
DTYL:=HOLDING>0 AND HHV(H,ENTERBARS)-AVGENTERPRICE>M/100*ENTERPRICE&&c<ENTERPRICE+(HHV(H,ENTERBARS)-c)/2;
KTYL:=HOLDING<0 AND llV(l,ENTERBARS)-AVGENTERPRICE>M/100*ENTERPRICE&&c>ENTERPRICE-(llV(l,ENTERBARS)-c)/2;
if KD then begin
BUY(AA=0&&HOLDING=0,N,MARKET);
AA:=N;
END
if KK THEN BEGIN
BUYSHORT(AA=0&&HOLDING=0,N,MARKET);
AA:=-N;
END
IF DTKS AND HOLDING>0 THEN BEGIN
sell(AA>0,0,MARKET);
BUYSHORT(AA>0,2,MARKET);
AA:=ABS(AA)*(-2);
END
IF DTYL AND HOLDING>0 THEN BEGIN
SELL(AA>0,0,MARKET);
AA:=0;
END
IF KTKS AND HOLDING<0 THEN BEGIN
sellshort(AA<0,0,MARKET);
BUY(AA<0,4,MARKET);
AA:=ABS(AA)*2;
END
IF KTYL AND HOLDING<0 THEN BEGIN
SELLSHORT(AA<0,0,MARKET);
AA:=0;
END
资产:asset,noaxis;
可用现金:cash(0),linethick0;
盈利1%后,回撤50%,然后平仓后,满足KD或者KK后才开仓。不反手了。
为什么我改成这样依然运行不了我的那个意思的呢?就是说盈利1%后,盈利回撤50%平掉之前的所有仓;亏损1%后,如果之前开仓是N手的,反手做2N手,直到亏第三次,那就不反手了,直接平仓,怎么下面的源码只能运行一段时间呢?
VARIABLE:AA:=0;
KD:CROSS(MA(C,5),MA(C,10));
KK:CROSS(MA(C,10),MA(C,5));
DTKS:=HOLDING>0 AND C<=ENTERPRICE-M/100*ENTERPRICE;
KTKS:=HOLDING<0 AND C>=ENTERPRICE+M/100*ENTERPRICE;
DTYL:=HOLDING>0 AND HHV(H,ENTERBARS+1)-AVGENTERPRICE>M/100*ENTERPRICE&&c<ENTERPRICE+(HHV(H,ENTERBARS)-c)/2;
KTYL:=HOLDING<0 AND llV(l,ENTERBARS+1)-AVGENTERPRICE<-M/100*ENTERPRICE&&c>ENTERPRICE-(llV(l,ENTERBARS)-c)/2;
m:=1;
n:=1;
if KD then begin
BUY(AA=0&&HOLDING=0,1,MARKETR);
AA:=1;
END
if KK THEN BEGIN
BUYSHORT(AA=0&&HOLDING=0,2,MARKETR);
AA:=-1;
END
//开仓
IF DTKS AND HOLDING>0 THEN BEGIN
sell(AA=1,HOLDING,MARKETR);
BUYSHORT(AA=1,2,MARKETR);
AA:=-2;
END
IF DTYL AND HOLDING>0 THEN BEGIN
SELL(AA=1,HOLDING,MARKETR);
AA:=0;
END
IF KTKS AND HOLDING<0 THEN BEGIN
sellshort(AA=-1,HOLDING,MARKETR);
BUY(AA=-1,2,MARKETr);
AA:=2;
END
IF KTYL AND HOLDING<0 THEN BEGIN
SELLSHORT(AA=-1,HOLDING,MARKETR);
AA:=0;
END
//一次平
IF DTKS AND HOLDING>0 THEN BEGIN
sell(AA=2,HOLDING,MARKETR);
BUYSHORT(AA=2,4,MARKETR);
AA:=-4;
END
IF DTYL AND HOLDING>0 THEN BEGIN
SELL(AA=2,HOLDING,MARKETR);
AA:=0;
END
IF KTKS AND HOLDING<0 THEN BEGIN
sellshort(AA=-2,HOLDING,MARKETr);
BUY(AA=-2,4,MARKETr);
AA:=4;
END
IF KTYL AND HOLDING<0 THEN BEGIN
SELLSHORT(AA=-2,0,MARKETR);
AA:=0;
END
//二次平
IF DTKS AND HOLDING>0 THEN BEGIN
sell(AA=4,HOLDING,MARKETR);
AA:=0;
END
IF DTYL AND HOLDING>0 THEN BEGIN
SELL(AA=4,HOLDING,MARKETR);
AA:=0;
END
IF KTKS AND HOLDING<0 THEN BEGIN
sellshort(AA=-4,HOLDING,MARKETr);
AA:=0;
END
IF KTYL AND HOLDING<0 THEN BEGIN
SELLSHORT(AA=-4,0,MARKETR);
AA:=0;
END
[此贴子已经被作者于2017/4/6 9:22:54编辑过]
上边有点问题,套用下边这个
//开多为例
VARIABLE:x=0;//n是开仓手数
n:=1;
if kd and holding=0 then buy(1,n,marketr);
if (enterprice-c)/enterprice>=0.01 and holding>0 then begin //亏损超过1%平仓,平仓反手开仓以前的2倍
sell(1,holding,marketr);
buyshort(holding=0,2*n,marketr);
end
if (c-enterprice)/enterprice>=0.01 then x:=1;//记录盈利超过1%
hh:=hhv(h,enterbars+1);
if x=1 and 2*(hh-c)>=hh-enterprice and holding<0 then begin //盈利超过1%后,回撤50%
sellshort(1,holding,marketr);
n:=1;
x:=0;
end
[此贴子已经被作者于2017/4/6 16:14:23编辑过]
为什么写出来之后,最大的开仓手数只有2手?
KD:CROSS(MA(C,5),MA(C,10));
KK:CROSS(MA(C,10),MA(C,5));
//开多为例
VARIABLE:x=0;//n是开仓手数
n:=1;
if kd and holding=0 then buy(1,n,marketr);
if (enterprice-c)/enterprice>=0.01 and holding>0 then begin //亏损超过1%平仓,平仓反手开仓以前的2倍
sell(1,holding,marketr);
buyshort(holding=0,2*n,marketr);
end
if (c-enterprice)/enterprice>=0.01 then x:=1;//记录盈利超过1%
hh:=hhv(h,enterbars+1);
if x=1 and 2*(hh-c)>=hh-enterprice and holding<0 then begin //盈利超过1%后,回撤50%
sellshort(1,holding,marketr);
n:=1;
x:=0;
end
if kk and holding=0 then buyshort(1,n,marketr);
if (c-enterprice)/enterprice>=0.01 and holding<0 then begin //亏损超过1%平仓,平仓反手开仓以前的2倍
sellshort(1,holding,marketr);
buy(holding=0,2*n,marketr);
end
if (c-enterprice)/enterprice<=-0.01 then x:=1;//记录盈利超过1%
ll:=llv(l,enterbars+1);
if x=1 and 2*(c-ll)>=enterprice-ll and holding>0 then begin //盈利超过1%后,回撤50%
sell(1,holding,marketr);
n:=1;
x:=0;
end