我用代码调试的方法发现 :“开仓次数 ” “开仓方向 ” 两个变量 只在“ if 开仓方向 = 0 and COND1 then ”这个条件的控制语句执行,而且赋值为1,可为什么后来这个两个又自动变为了 0 ??
INPUT:N(30,10,50,2);
INPUT:MAP3(60,12,90,2);
INPUT:NPOINT(1,1,10,1);
INPUT:NLOST(1,1,10,1);
VARIABLE: 开仓次数:= 0;
VARIABLE: 开仓方向:= 0; //1:买入股票 -1 :卖出股票
VARIABLE: 开基V:= 100;
VARIABLE:开仓量1:=0;
VARIABLE:开仓量2:=0;
VARIABLE:开仓量3:=0;
VARIABLE:开仓价1:=0;
VARIABLE:开仓价2:=0;
VARIABLE:开仓价3:=0;
HS300_CLOSE: CALLSTOCK('SH300',vtCLOSE,1),LINETHICK0;
HS300_OPEN: CALLSTOCK('SH300',vtOPEN,1),LINETHICK0;
HS300_EMA: EMA(HS300_CLOSE, MAP3),LINETHICK0;
EMA3:= EMA(HS300_CLOSE, MAP3);//,LINETHICK0;
EMA22:= EMA(HS300_CLOSE, 34);//,LINETHICK0;
//EMA1: EMA(HS300_CLOSE, 13);//,LINETHICK0;
//EMA11: EMA(HS300_CLOSE, 8);//,LINETHICK0;
XL:= (EMA3 - REF(EMA3,5))/5;
XL2:= (EMA22 - REF(EMA22,5))/5;
MA1:=MA(CLOSE, N);
TTR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR :=REF(MA(TTR,N),1);
BEFORBARISDOWN:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1);
BEFORBARISUP:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1);
//用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 START
ISDOWNCONTINTWO := REF(HS300_CLOSE,1)< REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)< REF(HS300_OPEN,2);
ISUPCONTINTWO:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)> REF(HS300_OPEN,2) ;
//用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 END
//本K前面的K线是否连续收三个阴线
ISDOWNCONTINTHREE:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)< REF(HS300_OPEN,2)AND REF(HS300_CLOSE,3)< REF(HS300_OPEN,3);
//本K前面的K线是否连续收三个阳线
ISUPCONTINTHREE:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1) AND REF(HS300_CLOSE,2)> REF(HS300_OPEN,2) AND REF(HS300_CLOSE,3)> REF(HS300_OPEN,3) ;
//DRAWICON();
COND1:= ISDOWNCONTINTHREE AND HS300_CLOSE > HS300_OPEN;
COND2:= ISUPCONTINTHREE AND HS300_CLOSE < HS300_OPEN;
//DRAWICON(COND1,LOW-3,'ICON1');
// DRAWICON(COND2,h+3,'ICON2');
//加仓
//多单加仓
if COND1 and 开仓方向 = 1 AND 开仓次数 <3 then
begin
if 开仓次数 = 1 then
begin
开仓量2 = 开基V * 3;
BUY(1,开仓量2,LIMITR,CLOSE);
开仓价2:= CLOSE;
开仓次数 := 开仓次数 + 1;
end
if 开仓次数 = 2 then
begin
开仓量3 := 开基V * 5;
BUY(1,开仓量3,LIMITR,CLOSE);
开仓价3:= CLOSE;
开仓次数 := 开仓次数 + 1;
end
end
//空单加仓
IF COND2 AND 开仓方向 = -1 AND 开仓次数 <3 THEN
begin
if 开仓次数 = 1 then
begin
开仓量2 := 开基V * 3;
BUYSHORT(1,开仓量2,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1;
end
if 开仓次数 = 2 then
begin
开仓量3 := 开基V * 5;
BUYSHORT(1,开仓量3,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1;
end
end
持仓均价:= (开仓价1*开仓量1+开仓价2*开仓量2+开仓价3*开仓量3)/(开仓量1+开仓量2+开仓量3);
//出场
//固定止盈止损
if 开仓方向 = 1 then
begin
止盈:=持仓均价 < close AND ( close - 持仓均价)/持仓均价> 0.01* NPOINT;
止损:= 持仓均价 > close AND ( 持仓均价-close)/持仓均价> 0.01* NLOST;
IF COND2 OR 止盈 OR 止损 THEN
BEGIN
SELL(1,(开仓量1+开仓量2+开仓量3),LIMITR,close);
//出场后还原初始值
开基V:=100;
开仓次数 := 0;
开仓方向 := 0;
开仓量:= 0;
开仓均价:=0;
开仓量1:=0;
开仓量2:=0;
开仓量3:=0;
开仓价1:=0;
开仓价2:=0;
开仓价3:=0;
持仓均价:=0;
END
//DRAWICON(1,h+1,'ICON5');
end
if 开仓方向 = -1 then
begin
止盈:=持仓均价 > close and ( 持仓均价-close)/持仓均价> 0.01* NPOINT;
止损:= 持仓均价 < close and ( close - 持仓均价)/持仓均价> 0.01* NLOST;
IF COND1 OR 止盈 OR 止损 THEN
BEGIN
SELLSHORT(1,(开仓量1+开仓量2+开仓量3),LIMITR,close);
//出场后还原初始值
开基V:=100;
开仓次数 := 0;
开仓方向 := 0;
开仓量:= 0;
开仓均价:=0;
开仓量1:=0;
开仓量2:=0;
开仓量3:=0;
开仓价1:=0;
开仓价2:=0;
开仓价3:=0;
持仓均价:=0;
END
end
//第一次开仓 多
if 开仓方向 = 0 and COND1 then
begin
if XL>0 then //第一次开仓,同时满足XL>0则重仓入场 //开仓次数 = 0 and
begin
开基V := 开仓基数 *2;
end
开仓量1 := 开基V;
BUY(1,开仓量1,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1;
开仓方向 := 1;
开仓价1:= CLOSE;
DRAWICON(1,h+1,'ICON1');
end
//第一次开仓 空
if 开仓方向 = 0 and COND2 then
begin
if XL< 0 then //第一次开仓,同时满足XL>0则重仓入场 //开仓次数 = 0 and
begin
开基V := 开仓基数 *2;
end
开仓量1 := 开基V;
BUYSHORT(1,开仓量1,LIMITR,CLOSE);
开仓次数 := 开仓次数 + 1;
开仓方向 := -1;
开仓价1:= CLOSE;
DRAWICON(1,L-1,'ICON2');
end