//INPUT:P1(10,5,100,1),P2(30,5,100,1),P3(60,5,100,1);
INPUT:MAP1(10,5,100,1),MAP2(30,5,100,1),MAP3(60,5,100,1);
VARIABLE: flag = 0; //1:已经开多了,-1:已经开空了 0:未持有多空交易单子
VARIABLE: 大盘信号 = 0; //0:无信号状态 1:多头信号 -1:空头信号
VARIABLE: 大盘平仓信号 = 0; //0:无信号状态 1:平空头信号 -1:平多头信号
EMA1: EMA(CLOSE, MAP1);
EMA2: EMA(CLOSE, MAP2);
EMA3: EMA(CLOSE, MAP3);
//大盘数据信号分析处理 start
//大盘数据获取
// 1分钟
HS300_CLOSE: CALLSTOCK('SH300',vtCLOSE,1),LINETHICK0;
HS300_OPEN: CALLSTOCK('SH300',vtOPEN,1),LINETHICK0;
HS300_EMA: EMA(HS300_CLOSE, MAP3),LINETHICK0;
//5秒数据
HS300_CLOSE_SECOND: CALLSTOCK('SH300',vtCLOSE,22,5),LINETHICK0;
HS300_OPEN_SECOND: CALLSTOCK('SH300',vtOPEN,22,5),LINETHICK0;
//本K开盘价大于于前K开盘价:= HS300_OPEN > REF(HS300_OPEN,1);
//大盘多空趋势: IFELSE(CLOSE>HS300_EMA, 1, -1),LINETHICK0;
//大盘信号: IFELSE(HS300_CLOSE>HS300_EMA, 1, -1),LINETHICK0;
//HS300_MA: STKINDI(
OpenRefOpen:= HS300_OPEN > REF(HS300_OPEN,1);
CloseRefOpen_Second:= HS300_CLOSE_SECOND > REF(HS300_OPEN_SECOND, 6);
BeforBarIsDown:= REF(HS300_CLOSE,1)< REF(HS300_OPEN,1);
BeforBarIsUp:= REF(HS300_CLOSE,1)> REF(HS300_OPEN,1);
//用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 start
IsDownContiTwo := REF(ISDOWN(),1) and REF(ISDOWN(),2);
IsUpContinTwo:= REF(ISUP(),1) and REF(ISUP(),2) ;
//用于顺势(和均线方向相反的情况)交易信号的发出 的量化数据 end
//用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 start
//本K前面的K线是否连续收阴
IsDownContinThree:= REF(ISDOWN(),1) and REF(ISDOWN(),2) and REF(ISDOWN(),3);
//阳线上穿前阴K 50%
UPOverP50:= HS300_CLOSE>(REF(HS300_CLOSE,1)+ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
//本K前面的K线是否连续收阳
IsUpContinThree:= REF(ISUP(),1) and REF(ISUP(),2) and REF(ISUP(),3);
//阴线下穿前阳K 50%
DownOverP50:= HS300_CLOSE<(REF(HS300_CLOSE,1)-ABS(REF(HS300_OPEN,1)-REF(HS300_CLOSE,1))/2);
//用于逆势(和均线方向相反的情况)交易信号的发出 的量化数据 end
//平仓信号
//如果前K是阴线则本K为阳线的时候发出平空信号
if BeforBarIsDown and ISUP() then
begin
大盘平仓信号:= 1;
end
//如果前K是阳线则本K为阴线的时候发出平多信号
if BeforBarIsUp and ISDOWN() then
begin
大盘平仓信号:= -1;
end
//K线在指定均线之上
if HS300_CLOSE > HS300_EMA then
begin
//由阴转阳
if BeforBarIsDown and HS300_CLOSE > HS300_OPEN and IsDownContiTwo then
begin
大盘信号 := 1;
DRAWICON(TRUE,LOW-2,1);
end
else if IsUpContinThree and DownOverP50 then
begin
大盘信号 := -1;
DRAWICON(TRUE,HIGH+2,2);
end
end
else
//K线在指定均线之下
if HS300_CLOSE < HS300_EMA then
begin
//由阳转阴线
if BeforBarIsUp and HS300_CLOSE < HS300_OPEN and IsUpContinTwo then
begin
大盘信号 := -1;
DRAWICON(TRUE,HIGH+2,2);
end
else if IsDownContinThree and UPOverP50 then
begin
大盘信号 := 1;
DRAWICON(TRUE,LOW-2,1);
end
end
//大盘数据信号分析处理 end
//中间变量
个股方向:IFELSE(Close> EMA3, 1,-1),LINETHICK0; //1:多头,-1:空头
//如果大盘出现空头信号
//TIMESHOW:TIME,LINETHICK0;
//CURRENTTIMESHOW:CURRENTTIME,LINETHICK0;
//本K开盘价大于于前K开盘价:= HS300_OPEN > REF(HS300_OPEN,1);
//大盘多空趋势: IFELSE(CLOSE>HS300_EMA, 1, -1),LINETHICK0;
//交易条件
//开多条件:= 个股方向 = 1 AND 大盘信号 = 1 AND TIME>094000 AND TIME<145000;
//平多条件:= 大盘平仓信号 = -1 OR CROSS(EMA3,CLOSE) OR TIME>=145000;
开多条件:= 大盘信号 = 1 AND TIME>094000 AND TIME<145000;
平多条件:= 大盘平仓信号 = -1 OR TIME>=145000;
//开空条件:= 个股方向 = -1 AND 大盘信号 = -1 AND TIME>094000 AND TIME<145000;
//平空条件:= 大盘平仓信号 = 1 OR CROSS(CLOSE, EMA3)OR TIME>=145000;
开空条件:= 大盘信号 = -1 AND TIME>094000 AND TIME<145000;
平空条件:= 大盘平仓信号 = 1 OR TIME>=145000;
//交易系统
if flag = 0 and 开多条件 then
BEGIN
BUY(开多条件 ,1000,marketR);//交易系统之开多操作
flag := 1;
end
if flag =1 and 平多条件 THEN
BEGIN
SELL(平多条件 ,1000,marketR); //交易系统之平多操作
flag := 0;
End
if flag =0 and 开空条件 THEN
BEGIN
BUYSHORT(开空条件 ,1000,marketR); //交易系统之开空操作
flag := -1;
End
if flag = -1 and 平空条件 THEN
BEGIN
SELLSHORT(平空条件 ,1000,marketR); //交易系统之平空操作
flag := 0;
End