请选择 进入手机版 | 继续访问电脑版

均线之鱼交易系统代码汇总

[复制链接]
查看28 | 回复4 | 张孟珂 | 2020-5-12 18:12:18 | 显示全部楼层 |阅读模式
一、均线之鱼交易系统描述
在均线之鱼系统中,短鱼都是亏损性,而带鱼都是盈利性的,其中短鱼又分为胖头鱼和食人鱼。胖头鱼是指根据入市信号进场之后,中间有盈利的机会,但是若根据退市信号退场是亏损的;我们可以依据此短鱼形态进行止盈操作。
食人鱼是指入场后没有一丝盈利的机会,遇到这种短鱼形态,需谨慎操作。

二、关于均线之鱼交易系统的测试逻辑
测试一:连续出现N个短鱼,就开仓;
测试二:短鱼+胖头鱼:短鱼连续出现N次,就开仓;短鱼没有连续出现N次,也开仓,遇到胖头鱼就平仓;
测试三:短鱼+飞鱼:短鱼连续出现N次,就开仓;短鱼没有连续出现N次,也开仓,飞鱼作为一个开仓或者加仓条件;
测试四:短鱼+胖头鱼+飞鱼:短鱼连续出现N次,就开仓;短鱼没有连续出现N次,也开仓,遇到胖头鱼就平仓;飞鱼作为一个开仓或者加仓条件;

回复

使用道具 举报

张孟珂 | 2020-5-12 18:51:13 | 显示全部楼层
测试一【均线之鱼交易系统原版测试】
【测试逻辑】
A. 均线之鱼交易系统原版的基础测试;连续出现2个短鱼就开仓;

【测试代码】【代码中N:2】
//一、定义仓位
FUND:=10000000; //资金
//LOTS:=INTPART(FUND*0.4/(C*MARGIN*UNIT+FEE));//计算开仓手数【此计算方法,开不出来仓位】
LOTS:=INTPART(FUND*0.4/(CLOSE+FEE));//计算手数
//二、定义MACD
DIFF := EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA := EMA(DIFF,M);//DIFF的M个周期指数平滑移动平均
MACD := 2*(DIFF-DEA);
2*(DIFF-DEA),COLORSTICK;//DIFF减DEA的2倍画柱状线
LEN:=CONDBARS(CROSSUP(DIFF,DEA),CROSSDOWN(DIFF,DEA));//最近一次满足DIFF上穿DEA与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); //当前金叉,前一次死叉,空短鱼
//四、在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;
//五、记录带鱼和短鱼的次数
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))));
//当前是短鱼,取带鱼次数,否则取上一次是短鱼时的带鱼次数【当前是短鱼时,带鱼次数不会变化】
DUANCS := DKDUANYUCS; //短鱼次数
DAICS := DKDAIYUCS; //带鱼次数
ZDAIYUCS : DAIYUCS; //带鱼总次数
ZDUANYUCS : DUANYUCS;//短鱼总次数
//六、定义当前的金叉死叉
DQSC:=CROSSDOWN(DIFF,DEA);//记录当前的死叉信号
DQJC:=CROSSUP(DIFF,DEA);//记录当前的金叉信号
DD:REF(DUANCS, 1);
CC:REF(DAICS, 1);
//七、定义开仓条件
//1、定义短鱼的开仓条件【其中:参数N是短鱼/带鱼连续出现的次数】
DUAN_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQJC;
DUAN_ZKXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
ZKXH2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_ZKXH := DUAN_ZKXH1 || ZKXH2; //做空信号
//2、定义带鱼的开仓条件
DAI_ZDXH1 := ABS(ZDAIYUCS-REF(DAICS, 1))>=N && DQJC;
DAI_ZKXH1 := ABS(ZDAIYUCS-REF(DAICS, 1))>=N && DQSC;
DAI_ZDXH := DAI_ZDXH1 || ZDXH2;//做多信号
DAI_ZKXH := DAI_ZKXH1 || ZKXH2;//做空信号
//八、定义平仓条件
PDTJ2 := BKVOL>0 && DQSC;
PKTJ2 := SKVOL>0 && DQJC;
//1、短鱼的平仓条件
DUAN_PDTJ1 := BKVOL>0 && ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DUAN_PKTJ1 := SKVOL>0 && ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DUAN_PDTJ := DUAN_PDTJ1 || PDTJ2;//平多仓条件
DUAN_PKTJ := DUAN_PKTJ1 || PKTJ2;//平空仓条件
//2、带鱼的平仓条件
DAI_PDTJ1 := BKVOL>0 && ABS(ZDAIYUCS-REF(DAICS, 1))<N && DQSC;
DAI_PKTJ1 := SKVOL>0 && ABS(ZDAIYUCS-REF(DAICS, 1))<N && DQJC;
DAI_PDTJ := DAI_PDTJ1 || PDTJ2;//平多仓条件
DAI_PKTJ := DAI_PKTJ1 || PKTJ2;//平空仓条件
//九、交易的整体逻辑
//1、开仓信号
DUAN_ZDXH, BPK(LOTS);
DUAN_ZKXH, SPK(LOTS);
//2、平仓条件
DUAN_PDTJ, SP(BKVOL);
DUAN_PKTJ, BP(SKVOL);


回复

使用道具 举报

张孟珂 | 2020-5-12 18:54:49 | 显示全部楼层
测试二【均线之鱼之短鱼+胖头鱼结合测试】
【测试逻辑】
A. 短鱼+胖头鱼:短鱼连续出现N次,就开仓;短鱼没有连续出现N次,也开仓,遇到胖头鱼就平仓;

【测试代码】【代码中N:2】
//一、定义仓位
FUND:=10000000; //资金
//LOTS:=INTPART(FUND*0.4/(C*MARGIN*UNIT+FEE));//计算开仓手数【此计算方法,开不出来仓位】
LOTS:=INTPART(FUND*0.4/(CLOSE+FEE));//计算手数
//二、定义MACD
DIFF .. EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA ..EMA(DIFF,M);//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之间的周期数
//三、描述均线之鱼【带鱼都是盈利的,短鱼都是亏损的】
//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); //当前金叉,前一次死叉,空短鱼
// 区别胖头鱼和食人鱼:判断金叉和死叉之间是否有MACD柱子的最大值时的收盘价大于金(死)叉时的收盘价
//判断当天的MACD_DIFF是否是前一次发生金叉以来的高点/低点
MDH := IF(MACD_DIFF=HHV(MACD_DIFF, BARSLAST(CROSSUP(DIFF, DEA))), 1, -1);
MDL := IF(MACD_DIFF=LLV(MACD_DIFF, BARSLAST(CROSSDOWN(DIFF, DEA))), 1, -1);
//记录MACD_DIFF高低点时的收盘价
MC : IF(MDH>0, C, REF(C, BARSLAST(MDH>0)));//MACD_DIFF是前一次发生金叉以来的高点时的收盘价
LC : IF(MDL>0, C, REF(C, BARSLAST(MDL>0)));//MACD_DIFF是前一次发生死叉以来的低点时的收盘价
//记录金叉死叉时的收盘价
JC : REF(C, BARSLAST(CROSSUP(DIFF, DEA)));
SC : REF(C, BARSLAST(CROSSDOWN(DIFF, DEA)));
//3、胖头鱼:开始赚钱后面亏损的,中可以止盈;在金叉和死叉之间:有创新高,可以平仓止盈;
DPANGTOU := DDUAN AND MC>JC; //多胖头鱼
KPANGTOU := KDUAN AND LC<SC; //空胖头鱼
DPZYTJ := MC>JC AND MACD_DIFF<REF(MACD_DIFF,1);//多胖的平仓止盈条件,昨天是开仓以来的高点,今天比昨天低;
KPZYTJ := LC<SC AND MACD_DIFF>REF(MACD_DIFF,1);//空胖的平仓止盈条件,昨天是开仓以来的低点,今天比昨天高;
//4、食人鱼:金叉买进去,没有赚钱的机会
DSHIREN := DDUAN AND MC<JC; //多食人鱼
KSHIREN := KDUAN AND LC>SC; //空食人鱼
//四、在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(DPANGTOU ,H+20 ,'多胖'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KPANGTOU ,L-20 ,'空胖'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(DSHIREN ,H+40 ,'多食'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KSHIREN ,L-40 ,'空食'),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))));
//当前是短鱼,取带鱼次数,否则取上一次是短鱼时的带鱼次数【当前是短鱼时,带鱼次数不会变化】
DUANCS : DKDUANYUCS; //短鱼次数
DAICS := DKDAIYUCS; //带鱼次数
ZDAIYUCS : DAIYUCS; //带鱼总次数
ZDUANYUCS : DUANYUCS;//短鱼总次数
//六、定义当前的金叉死叉
DQSC := CROSSDOWN(DIFF,DEA);//记录当前的死叉信号
DQJC := CROSSUP(DIFF,DEA);//记录当前的金叉信号
//七、定义开仓条件
//1、定义短鱼的开仓条件【其中:参数N是短鱼连续出现的次数】
DUAN_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQJC;
DUAN_ZKXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
ZKXH2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_ZKXH := DUAN_ZKXH1 || ZKXH2; //做空信号
//2、定义短鱼 + 胖头鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DP_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DP_ZKXH2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DP_ZDXH := DP_ZDXH1 || ZDXH2; //做多信号
DP_ZKXH := DP_ZKXH2 || ZKXH2; //做空信号
//八、定义平仓条件
//1、胖头鱼中间的高点、低点平仓止盈
DPZY := DPZYTJ;//多胖平多止盈
KPZY := KPZYTJ;//空胖平空止盈
//2、短鱼的平仓条件
DUAN_PDTJ := BKVOL>0 && DQSC;
DUAN_PKTJ := SKVOL>0 && DQJC;
//九、交易的整体逻辑
//1、短鱼开仓信号
DUAN_ZDXH, BK(LOTS);
DUAN_ZKXH, SK(LOTS);
//2、短鱼 + 胖头鱼 的开仓信号
DP_ZDXH, BK(LOTS);
DP_ZKXH, SK(LOTS);
//3、胖头鱼平仓信号
DPZY, SP(BKVOL);
KPZY, BP(SKVOL);
//4、短鱼平仓信号
DUAN_PDTJ, SP(BKVOL);
DUAN_PKTJ, BP(SKVOL);


回复

使用道具 举报

张孟珂 | 2020-5-12 19:20:34 | 显示全部楼层
测试三【均线之鱼之短鱼+飞鱼结合测试】
【测试逻辑】
A. 短鱼+飞鱼,飞鱼作为一个开仓或者加仓条件;

【测试代码】【代码中N:2】

//一、定义仓位
FUND:=10000000; //资金
//LOTS:=INTPART(FUND*0.4/(C*MARGIN*UNIT+FEE));//计算开仓手数【此计算方法,开不出来仓位】
LOTS:=INTPART(FUND*0.4/(CLOSE+FEE));//计算手数
//二、定义MACD
DIFF .. EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA ..EMA(DIFF,M);//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之间的周期数
//三、描述均线之鱼【带鱼都是盈利的,短鱼都是亏损的】
//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、飞鱼:没有交叉但是贴的很近(没有穿过去);
//飞鱼:MACD金叉之后,DIFF下跌,且又转头向上,同时DIFF并未跌破DEA,且MACD 和DIFF的比例值小于一个给定值
DFEI := DIFF>DEA AND COUNT(MACD_DIFF<N1, 3)>0 AND MACD_DIFF>REF(MACD_DIFF,1) AND COUNT(CROSSUP(DIFF, DEA), N2)=0;//多飞鱼
//3根K线内,MACD_DIFF<N1 的K线数量大于0,且当根K线的MACD_DIFF大于昨日的,N2个周期内没有出现金叉
KFEI := DIFF<DEA AND COUNT(MACD_DIFF<N1, 3)>0 AND MACD_DIFF<REF(MACD_DIFF,1) AND COUNT(CROSSDOWN(DIFF, DEA), N2)=0;//空飞鱼
//四、在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(DFEI ,H+30 ,'多飞'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KFEI ,L-30 ,'空飞'),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))));
//当前是短鱼,取带鱼次数,否则取上一次是短鱼时的带鱼次数【当前是短鱼时,带鱼次数不会变化】
DUANCS := DKDUANYUCS; //短鱼次数
DAICS := DKDAIYUCS; //带鱼次数
ZDAIYUCS : DAIYUCS; //带鱼总次数
ZDUANYUCS : DUANYUCS;//短鱼总次数
//六、定义当前的金叉死叉
DQSC := CROSSDOWN(DIFF,DEA);//记录当前的死叉信号
DQJC := CROSSUP(DIFF,DEA);//记录当前的金叉信号
//七、定义开仓条件
//1、定义短鱼的开仓条件【其中:参数N是短鱼连续出现的次数】
DUAN_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQJC;
DUAN_ZKXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
ZKXH2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_ZKXH := DUAN_ZKXH1 || ZKXH2; //做空信号
//2、定义飞鱼的开仓条件
FEI_ZDXH := DFEI; //做多信号
FEI_ZKXH := KFEI; //做空信号
//3、定义短鱼 + 飞鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DF_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DF_ZKXH2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DF_ZDXH := (DF_ZDXH1 || ZDXH2); //做多信号
DF_ZKXH := (DF_ZKXH2 || ZKXH2); //做空信号
//八、定义平仓条件
//1、短鱼的平仓条件
DUAN_PDTJ := BKVOL>0 && DQSC;
DUAN_PKTJ := SKVOL>0 && DQJC;
//2、飞鱼的平仓条件
FEI_PDTJ := BKVOL>0 && DQSC;//平多仓条件
FEI_PKTJ := SKVOL>0 && DQJC;//平空仓条件
//九、交易的整体逻辑
//1、短鱼开仓信号
DUAN_ZDXH, BK(LOTS);
DUAN_ZKXH, SK(LOTS);
//2、短鱼 + 飞鱼 的开仓
DF_ZDXH, BK(LOTS);
DF_ZKXH, SK(LOTS);
FEI_ZDXH, BK(LOTS);
FEI_ZKXH, SK(LOTS);
//3、飞鱼的平仓条件
//FEI_PDTJ, SP(BKVOL);
//FEI_PKTJ, BP(SKVOL);
//3、平仓信号
DUAN_PDTJ, SP(BKVOL);
DUAN_PKTJ, BP(SKVOL);


回复

使用道具 举报

张孟珂 | 2020-5-12 19:25:02 | 显示全部楼层
测试四【均线之鱼系统之短鱼+飞鱼+胖头鱼结合测试】
【测试逻辑】
A. 短鱼连续出现N次,就开仓;短鱼没有连续出现N次,也开仓,遇到胖头鱼就平仓;飞鱼作为一个开仓或者加仓条件;

【测试代码】【代码中N:2】

//一、定义仓位
FUND:=10000000; //资金
//LOTS:=INTPART(FUND*0.4/(C*MARGIN*UNIT+FEE));//计算开仓手数【此计算方法,开不出来仓位】
LOTS:=INTPART(FUND*0.4/(CLOSE+FEE));//计算手数
//二、定义MACD
DIFF .. EMA(CLOSE,SHORT) - EMA(CLOSE,LONG);//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA ..EMA(DIFF,M);//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之间的周期数
//三、描述均线之鱼【带鱼都是盈利的,短鱼都是亏损的】
//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); //当前金叉,前一次死叉,空短鱼
// 区别胖头鱼和食人鱼:判断金叉和死叉之间是否有MACD柱子的最大值时的收盘价大于金(死)叉时的收盘价
//判断当天的MACD_DIFF是否是前一次发生金叉以来的高点/低点
MDH := IF(MACD_DIFF=HHV(MACD_DIFF, BARSLAST(CROSSUP(DIFF, DEA))), 1, -1);
MDL := IF(MACD_DIFF=LLV(MACD_DIFF, BARSLAST(CROSSDOWN(DIFF, DEA))), 1, -1);
//记录MACD_DIFF高低点时的收盘价
MC : IF(MDH>0, C, REF(C, BARSLAST(MDH>0)));//MACD_DIFF是前一次发生金叉以来的高点时的收盘价
LC : IF(MDL>0, C, REF(C, BARSLAST(MDL>0)));//MACD_DIFF是前一次发生死叉以来的低点时的收盘价
//记录金叉死叉时的收盘价
JC : REF(C, BARSLAST(CROSSUP(DIFF, DEA)));
SC : REF(C, BARSLAST(CROSSDOWN(DIFF, DEA)));
//3、胖头鱼:开始赚钱后面亏损的,中可以止盈;在金叉和死叉之间:有创新高,可以平仓止盈;
DPANGTOU := DDUAN AND MC>JC; //多胖头鱼
KPANGTOU := KDUAN AND LC<SC; //空胖头鱼
DPZYTJ := MC>JC AND MACD_DIFF<REF(MACD_DIFF,1);//多胖的平仓止盈条件,昨天是开仓以来的高点,今天比昨天低;
KPZYTJ := LC<SC AND MACD_DIFF>REF(MACD_DIFF,1);//空胖的平仓止盈条件,昨天是开仓以来的低点,今天比昨天高;
//4、食人鱼:金叉买进去,没有赚钱的机会
DSHIREN := DDUAN AND MC<JC; //多食人鱼
KSHIREN := KDUAN AND LC>SC; //空食人鱼
//5、飞鱼:没有交叉但是贴的很近(没有穿过去);
//飞鱼:MACD金叉之后,DIFF下跌,且又转头向上,同时DIFF并未跌破DEA,且MACD 和DIFF的比例值小于一个给定值
DFEI := DIFF>DEA AND COUNT(MACD_DIFF<N1, 3)>0 AND MACD_DIFF>REF(MACD_DIFF,1) AND COUNT(CROSSUP(DIFF, DEA), N2)=0;//多飞鱼
//3根K线内,MACD_DIFF<N1 的K线数量大于0,且当根K线的MACD_DIFF大于昨日的,N2个周期内没有出现金叉
KFEI := DIFF<DEA AND COUNT(MACD_DIFF<N1, 3)>0 AND MACD_DIFF<REF(MACD_DIFF,1) AND COUNT(CROSSDOWN(DIFF, DEA), N2)=0;//空飞鱼
//四、在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(DPANGTOU ,H+30 ,'多胖'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KPANGTOU ,L-30 ,'空胖'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(DSHIREN ,H+60 ,'多食'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KSHIREN ,L-60 ,'空食'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(DFEI ,H+90 ,'多飞'),VALIGN2,FONTSIZE18,COLORWHITE;
DRAWTEXT(KFEI ,L-90 ,'空飞'),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))));
//当前是短鱼,取带鱼次数,否则取上一次是短鱼时的带鱼次数【当前是短鱼时,带鱼次数不会变化】
DUANCS := DKDUANYUCS; //短鱼次数
DAICS := DKDAIYUCS; //带鱼次数
ZDAIYUCS : DAIYUCS; //带鱼总次数
ZDUANYUCS : DUANYUCS;//短鱼总次数
//六、定义当前的金叉死叉
DQSC := CROSSDOWN(DIFF,DEA);//记录当前的死叉信号
DQJC := CROSSUP(DIFF,DEA);//记录当前的金叉信号
//七、定义开仓条件
//1、定义短鱼的开仓条件【其中:参数N是短鱼连续出现的次数】
DUAN_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQJC;
DUAN_ZKXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
ZKXH2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_ZKXH := DUAN_ZKXH1 || ZKXH2; //做空信号
//2、定义短鱼 + 胖头鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DP_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DP_ZKXH2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DP_ZDXH := DP_ZDXH1 || ZDXH2; //做多信号
DP_ZKXH := DP_ZKXH2 || ZKXH2; //做空信号
//3、定义飞鱼的开仓条件
FEI_ZDXH := DFEI; //做多信号
FEI_ZKXH := KFEI; //做空信号
//4、定义短鱼 + 飞鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DF_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DF_ZKXH2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DF_ZDXH := (DF_ZDXH1 || ZDXH2); //做多信号
DF_ZKXH := (DF_ZKXH2 || ZKXH2); //做空信号
//八、定义平仓条件
//1、胖头鱼中间的高点、低点平仓止盈
DPZY := DPZYTJ;//多胖平多止盈
KPZY := KPZYTJ;//空胖平空止盈
//2、短鱼的平仓条件
DUAN_PDTJ := BKVOL>0 && DQSC;
DUAN_PKTJ := SKVOL>0 && DQJC;
//3、飞鱼的平仓条件
FEI_PDTJ := BKVOL>0 && DQSC;//平多仓条件
FEI_PKTJ := SKVOL>0 && DQJC;//平空仓条件
//九、交易的整体逻辑
//1、短鱼开仓信号
DUAN_ZDXH, BK(LOTS);
DUAN_ZKXH, SK(LOTS);
//2、短鱼 + 飞鱼 的开仓
DF_ZDXH, BK(LOTS);
DF_ZKXH, SK(LOTS);
FEI_ZDXH, BK(LOTS);
FEI_ZKXH, SK(LOTS);
//3、短鱼 + 胖头鱼 的开仓信号
DP_ZDXH, BK(LOTS);
DP_ZKXH, SK(LOTS);
//4、胖头鱼平仓信号
DPZY, SP(BKVOL);
KPZY, BP(SKVOL);
//5、飞鱼的平仓条件
//FEI_PDTJ, SP(BKVOL);
//FEI_PKTJ, BP(SKVOL);
//6、平仓信号
DUAN_PDTJ, SP(BKVOL);
DUAN_PKTJ, BP(SKVOL);


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关课程推荐
桥博士《MACD指标详解》
为什么我们只用MACD金叉死叉来进行操作效果并不好,学习课程就能在研究MACD指标上少走很多弯路
桥博士《K线形态组合解析》
从理论到实战,让您全面掌握各种K线形态及各种组合,帮您分析梳理大量K线知识让您的投资更游刃有余
桥博士《股票入门基础知识》
从理论到实战,课程包括如何买卖股票、开户流程、交易软件、k线图知识、技术指标、价值投资等新手必备知识

37

主题

214

帖子

629

积分

高级会员

Rank: 4

积分
629
  • 官方论坛

    提供最新 Discuz! 产品新闻、软件下载与技术交流