INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1)
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
IF LOW<=下轨 THEN BEGIN
SELL(HOLDING>0 AND ENTERBARS>0,0,market);
BUYSHORT(HOLDING=0,1,market);
END
IF HIGH>=上轨 THEN BEGIN
SELLSHORT(HOLDING<0 AND ENTERBARS>0,0,market);
BUY(HOLDING=0,1,market);
END
如何编写在已有开多或开空的情况下,每突破上轨或下轨都加一次仓(单个交易日只加一次),单边加三次为限。
INPUT:N(1,1,100,1),K1(0.7,0.1,1,0.1),K2(0.7,0.1,1,0.1);
variable:n=0,m=0;
CYC:=BARSLAST(DATE<>REF(DATE,1))+1;
昨高:=CALLSTOCK(STKLABEL,VTHIGH,6,-1);
昨低:=CALLSTOCK(STKLABEL,VTLOW,6,-1);
昨收:=CALLSTOCK(STKLABEL,VTCLOSE,6,-1);
开盘价:=VALUEWHEN(CYC=1,OPEN);
HH:=HHV(昨高,N);//N日HIGH的最高价
HC:=HHV(昨收,N);//N日CLOSE的最高价
LC:=LLV(昨收,N);//N日CLOSE的最低价
LL:=LLV(昨低,N);//N日LOW的最低价
浮动区间:=MAX(HH-LL,HC-LL);//RANGE
上轨:开盘价+K1*浮动区间;
下轨:开盘价-K2*浮动区间;
IF LOW<=下轨 THEN BEGIN
SELL(HOLDING>0 AND ENTERBARS>0,0,market);
if holding=0 then begin
BUYSHORT(HOLDING=0,1,market);
n:=0;
m:=0;
end
END
IF HIGH>=上轨 THEN BEGIN
SELLSHORT(HOLDING<0 AND ENTERBARS>0,0,market);
if holding=0 then begin
BUY(HOLDING=0,1,market);
n:=0;
m;=0;
end
END
if l<=下轨 and holding<0 and n=0 and m<3 then begin
buyshort(1,1,market);
n:=1;
m:=m+1;
end
if h>=上轨 and holding>0 and n=0 and m<3 then begin
buy(1,1,market);
n:=1;
m:=m+1;
end
if time=closetime(0) then n:=0;
比如平多开空时,平多单正常(全平),反手开空单时(初次空单次只开一手,但实际会多开一手)。
if l<=下轨 and holding<0 and n=0 and m<3 and enterbars>0 then begin
buyshort(1,1,market);
n:=1;
m:=m+1;
end
if h>=上轨 and holding>0 and n=0 and m<3 and enterbars>0 then begin
buy(1,1,market);
n:=1;
m:=m+1;
end
从逻辑上来讲同根k线加仓是满足你上面的条件对吧?
那么不想要同根k线开仓就加条件:enterbars>0
加仓部分没有问题,而是出在反手的时候,比如平多翻空,平多正常,开空单的时候设定开一手,但图形显示会开二手