[PEL] 复制代码
{
策略说明:基于顾比倒数线的浮动止损止盈系统
系统要素:
1、最近3周期,SAR向上突破K线,并且MACD在0线附近金叉,开多单。
最近3周期,SAR向下跌破K线,并且MACD死叉,开空单。
2、用顾比倒数线构建移动止损线。当最高价创新高,同时顾比低点创新高,上移止损线,重新定位止损离场位,实现浮动止损。
用顾比倒数线构建移动止损线。当最低价创新低,同时顾比高点创新低,下移止损线,重新定位止损离场位,实现浮动止损。
3、上根K线最高价下破顾比倒数移动止损线后离场,平多单。
入场条件:
1、最近3周期,有SAR向上突破K线,并且MACD在0线附近金叉,开多单
2、最近3周期,有SAR向上突破K线,并且MACD死叉,开空单
出场条件:
1、上根K线最高价下破顾比倒数移动止损线后离场,平多单。
2、上根最低价上穿顾比倒数移动止损线后离场,平空单。
}
INPUT:P(26,20,40,2),S(12,5,30,3),M(9,2,20,2); // MACD参数
INPUT:手数(1,1,10000,10); //开仓手数参数
VARIABLE:ZS=C; //ZS开仓后顾比低点的较高点连线
VARIABLE:MAXHL=C; //MAXHL开多仓后最高价
VARIABLE:MINLOW=C; //MINLOW开空仓后最低价
//顾比倒数线,一般用于止损,和均线等指标配合
DISTL:=NEWLBARS(L,1);
DISTH:=NEWHBARS(H,1);
HI20:=REF(HHV(H,20),1);
LO20:=REF(LLV(L,20),1);
GBD1:=REF(L,DISTL);
GBD2:=REF(GBD1,DISTL);
GBD:=IF(GBD2>0,MAX(LLV(L,20),GBD2),LLV(L,20)); //顾比低点连线
GBG1:=REF(H,DISTH);
GBG2:=REF(GBG1,DISTH);
GBG:=IF(GBG2>0,MIN(HHV(H,20),GBG2),HHV(H,20)); //顾比高点连线
SAR1:=SAR(10,2,20),CIRCLEDOT;//SAR指标
//MACD指标
//DIFF线:收盘价短期、长期指数平滑移动平均线间的差
//DEA线:DIFF线的M日指数平滑移动平均线
//MACD线:DIFF线与DEA线的差
DIFF :=EMA(CLOSE,S) - EMA(CLOSE,P);
DEA :=EMA(DIFF,M);
MACD :=2*(DIFF-DEA);
//交易条件
//最近3周期,SAR向上突破K线,并且MACD在0线附近金叉,开多单
COND1:=ANY(REF(SAR1>HIGH,1) AND SAR1<HIGH,3)=1; //最近3周期,有SAR向上突破K线
COND2:=ANY(CROSS(DIFF,DEA),3)=1 AND DIFF<5; //最近3周期,MACD在0线附近金叉
开多条件:=COND1 AND COND2;//开多条件:最近3周期,SAR向上突破K线,并且MACD在0线附近金叉,开多单
//最近3周期,SAR向下跌破K线,并且MACD死叉,开空单
CONK1:=ANY(REF(SAR1<LOW,1) AND SAR1>LOW,3)=1; //最近3周期,有SAR向下突破K线
CONK2:=ANY(CROSS(DEA,DIFF),3)=1; //最近3周期,MACD金叉
开空条件:=CONK1 AND CONK2;//开空条件:最近3周期,有SAR向上突破K线,并且MACD死叉,开空单
多损上移条件:=HIGH>MAXHL AND GBD>ZS; //多损上移条件:当最高价创新高,同时顾比低点创新高,上移止损线
空损下移条件:=LOW<MINLOW AND GBG<ZS; //空损下移条件:当最低价创新低,同时顾比高点创新低,下移止损线
平多条件:= REF(HIGH,1)<ZS ; //上根K线最高价下破移动止损线后离场
平空条件:= REF(LOW,1)>ZS ; //上根K线最低价上穿移动止损线后离场
//开多:最近3周期,SAR向上突破K线,MACD在0线附近金叉
IF 开多条件 AND HOLDING=0 THEN BEGIN
BUY(1,手数,MARKET); //开多仓
ZS:=GBD; //调用开多仓时顾比倒数低点连线的值,做为多单止损初始值
MAXHL:= HIGH; //记录开多仓时的最高价
END
//用顾比倒数低点连线构建多头移动止损线。当最高价创新高,同时顾比低点创新高,上移止损线,重新定位止损离场位,实现多头浮动止损。
IF 多损上移条件 AND HOLDING>0 THEN BEGIN
ZS:=GBD; //创新高后,止损价赋值为当时的GBD,重新定位止损离场位,实现浮动止损
MAXHL:=HIGH; //创新高后,记录当时的最高价
END
//开空:最近3周期,SAR向下跌破K线,并且MACD死叉,开空单。
IF 开空条件 AND HOLDING=0 THEN BEGIN
BUYSHORT(1,1,MARKET);//开空仓
ZS:=GBG; //调用开空仓时顾比倒数高点连线的值,做为空单止损初始值
MINLOW:=LOW; //记录开空仓时的最低价
END
//用顾比倒数高点连线构建空头移动止损线。当最低价创新低,同时顾比高点创新低后,下移止损线,重新定位止损离场位,实现空头浮动止损
IF 空损下移条件 AND HOLDING<0 THEN BEGIN
ZS:=GBG; //创新低后,止损价赋值为当时的GBG,重新定位止损离场位,实现浮动止损
MINLOW:=LOW; //创新低后,记录当时的最低价
END
//止损止盈模块
//多头止盈止损平仓:上根K线最高价下破止损线,平多仓离场
IF 平多条件 AND HOLDING>0 AND ENTERBARS>1 THEN SELL(1,HOLDING,MARKET); //平多:下破止损线,平多仓离场
//空头止盈止损平仓:上根K线最低价上穿移动止损线,平空仓离场
IF 平空条件 AND HOLDING<0 AND enterbars>1 THEN SELLSHORT(1,HOLDING,MARKET); //平空:上穿移动止损线,平空仓离场
止损线:ZS;