//源于《均线之鱼0525-正反手》
//代码逻辑:
//开仓条件一: 连续出现大于等于N次短鱼;
//开仓条件二: 不满足开仓条件一;
//开仓条件三:不满足开仓条件一,且飞鱼次数大于等于 N1 时,
//加仓条件: 出现飞鱼;
//止盈条件: 根据开仓条件二开仓后,MACD柱子缩短则平仓止盈;
//反手条件: 根据开仓条件三开仓后,MACD柱子缩短则反手;
//变量设置
//N 设置短鱼的次数
//N1 设置飞鱼的次数(几条飞鱼才加仓)
//N1 设置飞鱼的次数(飞鱼次数大于等于 N1 时才加仓,遇到MACD柱子缩短就反手)
//仓位计算
FUND:=10000000; //资金
LOTS:=INTPART(FUND*0.4/(C*MARGIN*UNIT+FEE));// 计算开仓手数
//手数计算
// 1、设置一个头存值,头存是LOTS和BKVOL之间取最大值,或者在LOTS和SKVOL取最大值;
// BKTC:在LOTS和SKVOL之间取最大值;
BKTC := MAX(LOTS, SKVOL);//反手做多的手数
// SKTC:在LOTS和BKVOL之间取最大值;
SKTC := MAX(LOTS, BKVOL);//反手做空的手数
//二、定义MACD
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA := EMA(DIFF,9);//DIFF的M个周期指数平滑移动平均
MACD := 2*(DIFF-DEA);
2*(DIFF-DEA),COLORSTICK;//DIFF减DEA的2倍画柱状线
//定义距离:
MACD_DIFF := ABS(MACD)/MA(ABS(MACD), 240);
//三、描述均线之鱼--短鱼和带鱼
LEN :=CONDBARS(CROSSUP(DIFF,DEA),CROSSDOWN(DIFF,DEA));//最近一次满足DIFF上穿DEA与DIFF下穿DEA之间的周期数
LEN1:=BARSLAST(CROSS(DIFF,DEA));//
LEN2 :=BARSLAST(CROSSDOWN(DIFF,DEA));//
//1、带鱼
DDAI := C>REF(C, LEN) AND CROSSDOWN(DIFF, DEA); //多带鱼
KDAI := C<REF(C, LEN) AND CROSSUP(DIFF, DEA); //空带鱼
//2、短鱼
DDUAN := C<REF(C, LEN) AND CROSSDOWN(DIFF,DEA); //多短鱼
KDUAN := C>REF(C, LEN) AND CROSSUP(DIFF,DEA); //空短鱼
//3、松飞鱼SFEI
//上穿下穿金叉死叉
DSFEI := DIFF>DEA AND CROSS(C,REF(C,LEN1));//多飞鱼
KSFEI := DIFF<DEA AND CROSSDOWN(C,REF(C,LEN2));//空飞鱼
//4、VA鱼
MACDV:=MACD>REF(MACD,1) AND REF(MACD,2)>REF(MACD,1);
MACDA:=MACD<REF(MACD,1) AND REF(MACD,2)<REF(MACD,1);
// 对VA鱼进行计数
IF (DIFF>DEA) THEN
BEGIN
MACDA_CS :=COUNT(MACDA, LEN1);// 金叉之后多飞鱼的个数
END
IF (DIFF<DEA) THEN
BEGIN
MACDV_CS : =COUNT(MACDV, LEN2);// 死叉之后空飞鱼的个数
END
//四、在k线图上画出符合对应条件的形态
DRAWTEXT(DDAI ,H ,'多带'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(DDUAN ,H ,'多短'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KDAI ,L ,'空带'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KDUAN ,L ,'空短'),VALIGN2,FONTSIZE18,COLORWHITE;
//DRAWTEXT(DSFEI ,H+0.2 ,'多飞'),VALIGN2,FONTSIZE18,COLORWHITE;
//DRAWTEXT(KSFEI ,L-0.2 ,'空飞'),VALIGN2,FONTSIZE18,COLORWHITE;
//五、记录带鱼和短鱼的次数
DDAICS := -1*COUNT(DDAI,0);//多带鱼次数
KDAICS := -1*COUNT(KDAI,0);//空带鱼次数
DDUANCS := COUNT(DDUAN ,0);//多短鱼次数
KDUANCS := COUNT(KDUAN ,0);//空短鱼次数
DAIYUCS := DDAICS+KDAICS;//带鱼总次数
DUANYUCS := DDUANCS+KDUANCS;//短鱼总次数
DKDUANYUCS := IF(ABS(DAIYUCS)>REF(ABS(DAIYUCS),1), DUANYUCS, REF(DUANYUCS, BARSLAST((KDAI OR DDAI))));
//当前是带鱼,取短鱼次数,否则取上一次是带鱼时的短鱼次数【当前是带鱼时,短鱼次数不会变化】
DKDAIYUCS := IF(ABS(DUANYUCS)>REF(ABS(DUANYUCS),1), DAIYUCS, REF(DAIYUCS, BARSLAST((DDUAN OR KDUAN))));
//当前是短鱼,取带鱼次数,否则取上一次是短鱼时的带鱼次数【当前是短鱼时,带鱼次数不会变化】
DUANYULXCS :ABS(DUANYUCS-DKDUANYUCS);//短鱼连续次数
DAIYULXCS :ABS(DAIYUCS-DKDAIYUCS);//带鱼连续次数
//六、定义当前的金叉死叉
DQSC := CROSSDOWN(DIFF,DEA);//记录当前的死叉信号
DQJC := CROSSUP(DIFF,DEA);//记录当前的金叉信号
//七、定义开仓条件
DUANS:= DUANYULXCS=1 OR DUANYULXCS=3 OR DUANYULXCS=5;
//DUANN:= DUANYULXCS=2 ;
DAIS:= DAIYULXCS=2 ;
DAIN:= DAIYULXCS>=3;
KNDUANK:=DAIN AND DIFF<DEA;
//KNDAIK:=DUANN AND DIFF<DEA;
KNDUAND:=DAIN AND DIFF>DEA;
//KNDAID:=DUANN AND DIFF>DEA;
//1、开仓条件一 短鱼顺势
DUAN_ZDXH := DUANS AND MACDV AND DIFF>DEA;// 短鱼连续等于 1次
DUAN_Zk线H := DUANS AND MACDA AND DIFF<DEA;// 短鱼连续等于 1次
//2、开仓条件二 带鱼顺势
DAI_ZDXH := DAIS AND MACDV AND DIFF>DEA;
DAI_Zk线H := DAIS AND MACDA AND DIFF<DEA;
//3、开仓条件三短鱼逆势
//DUAN_ZDXH1 := DUANOU AND MACDV AND DIFF<DEA AND MACDV_CS<=N2;// 短鱼连续等于 1次
//DUAN_Zk线H1 := DUANOU AND MACDA AND DIFF>DEA AND MACDA_CS<=N2;// 短鱼连续等于 1次
//4、开仓条件四 带鱼逆势
DAI_ZDXH1 := DAIN AND MACDV AND DIFF<DEA AND MACDV_CS<=N2;
DAI_Zk线H1 := DAIN AND MACDA AND DIFF>DEA AND MACDA_CS<=N2;
//5、开仓条件五 短鱼金叉死叉
JC_ZDXH := DUANS AND BKVOL=0 AND CROSS(DIFF,DEA);// 金叉
SC_Zk线H := DUANS AND SKVOL=0 AND CROSSDOWN(DIFF,DEA);// 死叉
//6、开仓条件五 带鱼金叉死叉
JC_ZDXH1 := DAIS AND BKVOL=0 AND CROSS(DIFF,DEA);// 金叉DAIOU AND
SC_Zk线H1 := DAIS AND SKVOL=0 AND CROSSDOWN(DIFF,DEA);// 死叉DAIOU AND
//3、开仓条件汇总
DXH:=(DUAN_ZDXH OR DAI_ZDXH OR DAI_ZDXH1 OR JC_ZDXH OR JC_ZDXH1) AND BKVOL=0;
k线H:=(DUAN_Zk线H OR DAI_Zk线H OR DAI_Zk线H1 OR SC_Zk线H OR SC_Zk线H1) AND SKVOL=0;
//八、定义不同开仓条件下的代码逻辑
DXH,BPK(BKTC);
k线H,SPK(SKTC);
CROSSDOWN(DIFF,DEA),SP(BKVOL);
CROSS(DIFF,DEA),BP(SKVOL);
//MACDA AND BKVOL>0,SP(BKVOL);AND KNDUANK
//MACDV AND SKVOL>0,BP(SKVOL);AND KNDUAND
TRADE_AGAIN(10);
|