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

[复制链接]
查看462 | 回复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_Zk线H1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
Zk线H2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_Zk线H := DUAN_Zk线H1 || Zk线H2; //做空信号
//2、定义带鱼的开仓条件
DAI_ZDXH1 := ABS(ZDAIYUCS-REF(DAICS, 1))>=N && DQJC;
DAI_Zk线H1 := ABS(ZDAIYUCS-REF(DAICS, 1))>=N && DQSC;
DAI_ZDXH := DAI_ZDXH1 || ZDXH2;//做多信号
DAI_Zk线H := DAI_Zk线H1 || Zk线H2;//做空信号
//八、定义平仓条件
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_Zk线H, 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_Zk线H1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
Zk线H2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_Zk线H := DUAN_Zk线H1 || Zk线H2; //做空信号
//2、定义短鱼 + 胖头鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DP_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DP_Zk线H2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DP_ZDXH := DP_ZDXH1 || ZDXH2; //做多信号
DP_Zk线H := DP_Zk线H2 || Zk线H2; //做空信号
//八、定义平仓条件
//1、胖头鱼中间的高点、低点平仓止盈
DPZY := DPZYTJ;//多胖平多止盈
KPZY := KPZYTJ;//空胖平空止盈
//2、短鱼的平仓条件
DUAN_PDTJ := BKVOL>0 && DQSC;
DUAN_PKTJ := SKVOL>0 && DQJC;
//九、交易的整体逻辑
//1、短鱼开仓信号
DUAN_ZDXH, BK(LOTS);
DUAN_Zk线H, SK(LOTS);
//2、短鱼 + 胖头鱼 的开仓信号
DP_ZDXH, BK(LOTS);
DP_Zk线H, 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_Zk线H1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
Zk线H2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_Zk线H := DUAN_Zk线H1 || Zk线H2; //做空信号
//2、定义飞鱼的开仓条件
FEI_ZDXH := DFEI; //做多信号
FEI_Zk线H := KFEI; //做空信号
//3、定义短鱼 + 飞鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DF_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DF_Zk线H2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DF_ZDXH := (DF_ZDXH1 || ZDXH2); //做多信号
DF_Zk线H := (DF_Zk线H2 || Zk线H2); //做空信号
//八、定义平仓条件
//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_Zk线H, SK(LOTS);
//2、短鱼 + 飞鱼 的开仓
DF_ZDXH, BK(LOTS);
DF_Zk线H, SK(LOTS);
FEI_ZDXH, BK(LOTS);
FEI_Zk线H, 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_Zk线H1 := ABS(ZDUANYUCS-REF(DUANCS, 1))>=N && DQSC;
ZDXH2 := N=0 AND COUNTSIG(BPK, 0)=0 AND CROSSUP(DIFF,DEA);
Zk线H2 := N=0 AND COUNTSIG(SPK, 0)=0 AND CROSSDOWN(DIFF,DEA);
DUAN_ZDXH := DUAN_ZDXH1 || ZDXH2; //做多信号
DUAN_Zk线H := DUAN_Zk线H1 || Zk线H2; //做空信号
//2、定义短鱼 + 胖头鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DP_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DP_Zk线H2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DP_ZDXH := DP_ZDXH1 || ZDXH2; //做多信号
DP_Zk线H := DP_Zk线H2 || Zk线H2; //做空信号
//3、定义飞鱼的开仓条件
FEI_ZDXH := DFEI; //做多信号
FEI_Zk线H := KFEI; //做空信号
//4、定义短鱼 + 飞鱼 的开仓条件     短鱼连续出现次数小于2时,开仓;
DF_ZDXH1 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQJC;
DF_Zk线H2 := ABS(ZDUANYUCS-REF(DUANCS, 1))<N && DQSC;
DF_ZDXH := (DF_ZDXH1 || ZDXH2); //做多信号
DF_Zk线H := (DF_Zk线H2 || Zk线H2); //做空信号
//八、定义平仓条件
//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_Zk线H, SK(LOTS);
//2、短鱼 + 飞鱼 的开仓
DF_ZDXH, BK(LOTS);
DF_Zk线H, SK(LOTS);
FEI_ZDXH, BK(LOTS);
FEI_Zk线H, SK(LOTS);
//3、短鱼 + 胖头鱼 的开仓信号
DP_ZDXH, BK(LOTS);
DP_Zk线H, 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);


回复

使用道具 举报

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

本版积分规则

媒体报道
反包测试
心怡反包测试
反包:今日K线H>昨日K线H 且今日K线L
如何抄在针尖上?
刘昱妗如何抄在针尖上?
如果有办法能让你抄在针尖上,你想不想学? 不需要复杂的指标,也不需要高深的技术,
交易模型测试库
宇晨交易模型测试库
目录 1.MACD日线 2.海6日线3.海龟S1日线 4.海龟S2日线
关于调delta的研究
刘昱妗关于调delta的研究
调备兑时间点 早晨9点,下午14:30,晚上21点 12.9 夜盘调delta 纸浆成交量为0 delta
文华各分区测试
宇晨文华各分区测试
////一楼////
test1
admintest1
test1
test1
admintest1
test1
交易SOP
刘昱妗交易SOP
日常任务及流程【金山文档 | WPS云文档】 交易sop https://www.kdocs.cn/l/cvXFT8HZDO
相关课程推荐
反包测试
反包:今日K线H>昨日K线H 且今日K线L
如何抄在针尖上?
如果有办法能让你抄在针尖上,你想不想学? 不需要复杂的指标,也不需要高深的技术,只要死磕这招盈亏比极
交易模型测试库
目录 1.MACD日线 2.海6日线3.海龟S1日线 4.海龟S2日线

43

主题

235

帖子

799

积分

宽论高级会员

Rank: 4

积分
799
  • 官方论坛

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