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

海龟交易法则测试和代码汇总

[复制链接]
查看274 | 回复8 | 张孟珂 | 2020-5-11 18:14:54 | 显示全部楼层 |阅读模式
海龟交易系统描述
系统1: 以20日突破为基础的短期系统
系统2: 以55日突破为基础的长期系统
“海龟”可以自由决定在两个系统之间分配资金,也可以只用系统2
注:系统2是可以单独使用的,即只看55日的信号,而系统1则必须搭配系统2一起使用(这一点会在入市信号具体介绍)

系统逻辑
系统1
入市信号:价格突破20日最高或最低点;
                价格突破55日最高或最低点;(如果前一次突破被过滤,为避免错过重大趋势,该信号将无条件触发,即55日为保障性突破点)
过滤信号:上一次突破必须是亏损性突破(原著中对于亏损性突破定义为:触发止损条件)
                上一次突破如果是赢利性突破,则忽略此次信号;
加仓信号:在入市价或加仓价格的基础上,按0.5*ATR的价格间隔逐步扩大头寸;(注意,此时止损价也将随之上调)
                头寸规模最大为4个;
止损信号:入市价格朝不利方向,发生2*ATR变动,则立即止损!(对于多头头寸来说,止损价比入市价低2*ATR)
退出信号:系统1(价格朝不利方向突破过去10日最高/低点时退出)
                系统2(价格朝不利方向突破过去20日最高/低点时退出)

系统2
入市信号:价格突破55日最高或最低点;
过滤信号:无
加仓信号:在入市价或加仓价格的基础上,按0.5*ATR的价格间隔逐步扩大头寸;(注意,此时止损价也将随之上调)
                头寸规模最大为4个;
止损信号:入市价格朝不利方向,发生2*ATR变动,则立即止损!(对于多头头寸来说,止损价比入市价低2*ATR)
退出信号:价格朝不利方向突破过去20日最高/低点时退出


回复

使用道具 举报

张孟珂 | 2020-5-11 18:50:27 | 显示全部楼层
A1文华海龟交易系统一 (不加仓/不过滤)

【测试代码】
变量: N1(0,1,0.4)

TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//真实波幅
ATR:=MA(TR,20); //求26个周期内真实波幅的简单移动平均
BKLOTS20:= (INTPART(MONEYTOT * N1 / C / 100)) * 100;
HH:=HV(H,20);
LL:=LV(L,20);
CROSSUP(C,HH)&&ISLASTBK=0&&ISLASTSK=0&&BARPOS>=20,BK(BKLOTS20);
C<=(BKPRICE-2*ATR)&&BKVOL>0,SP(BKVOL);//最新价小于开仓价减去2倍的ATR,止损平仓
CROSSDOWN(L,LV(L,10))&&BKVOL>0,SP(BKVOL); //最低价下穿10周期的最低价,平仓

回复

使用道具 举报

张孟珂 | 2020-5-11 18:54:04 | 显示全部楼层
S1海龟交易系统一(不加仓/有过滤)

【测试代码】
变量: N1(0,1,0.4)

// 一、计算ATR
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR := MA(TR,20);
// 二、定义高低点
H20 := HV(H, 20);  // 20日高点
L10 := LV(L, 10);  // 10日低点
H55 := HV(H, 55);  // 55日高点
L55 := LV(L, 55); // 55日低点
L20 := LV(L, 20);  // 20日低点
H10 := HV(H, 10);  // 10日高点
// 三、定义系统1、2开平仓信号
TPH20 := CROSSUP(C, H20);  // 突破20日高点 1
DPL10 := CROSSDOWN(L, L10);// 跌破10日低点 1
TPL20 := CROSSDOWN(C, L20);// 突破20日低点 2
TPH10 := CROSSUP(H, H10);  // 突破10日高点 2
// 四、定义首次开平仓
FTPH20:= TPH20 AND COUNT(TPH20, BARSLAST(DPL10))=1;//首次向上突破20日高点 (FRIST 突破 HIGH 20)= FTPH20
DRAWTEXT(FTPH20 ,H+20 ,'系统1_BK'), VALIGN2, FONTSIZE16, COLORWHITE;
FDPL10:= DPL10 AND COUNT(DPL10, BARSLAST(FTPH20))=1 ;
DRAWTEXT(FDPL10 ,L-20 ,'系统1_SP'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPL20:= TPL20 AND COUNT(TPL20, BARSLAST(TPH10))=1;//首次向下突破20日低点
DRAWTEXT(FTPL20 ,L-20 ,'系统1_SK'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPH10:= TPH10 AND COUNT(TPH10, BARSLAST(FTPL20))=1;
DRAWTEXT(FTPH10 ,H+20 ,'系统1_BP'), VALIGN2, FONTSIZE16, COLORWHITE;
// 五、记录开仓(平仓)收盘价
//系统1做多数据记录
BKC20 := IF( FTPH20, C, REF(C, BARSLAST(FTPH20)) );//首次突破20日高点时的价格
SPC10 := IF( FDPL10,  C, REF(C, BARSLAST(FDPL10)) );//首次跌破10日低点时的价格
BKC20_ZS := BKC20 - 2 * ATR;//系统1止损位置
YK1 := IF( SPC10 - BKC20 > 0 , 1, -1);//多头头盈亏判断  (卖平-买开> 0 说明盈利,记1,反之则记-1)
//系统1做空数据记录
SKC20 := IF( FTPL20,  C, REF(C, BARSLAST(FTPL20)) );//首次突破20日低点时的价格
BPC10 := IF( FTPH10, C, REF(C, BARSLAST(FTPH10)) );//首次突破10日高点时的价格
SKC20_ZS := SKC20 + 2 * ATR;
YK2 := IF( BPC10 - SKC20 > 0, -1, 1);//空头盈亏判断 (买平-卖开> 0 说明亏损,记-1,反之则记1)
//YK=盈亏 (用于判断是否满足亏损性突破)
YK : IF( BARSLAST(FTPH10) < BARSLAST(FDPL10), YK2, YK1);
// BARSLAST(FTPH10) < BARSLAST(FDPL10) 比对最近一次平仓是做多平仓,还是做空平仓
// YK2 记录多头盈亏信号
// YK1 记录空头盈亏信号
//六、交易手数计算
BKLOTS20:= (INTPART(MONEYTOT * N1 / BKC20 / 100)) * 100;//系统1做多手数
//SKLOTS20:= (INTPART(MONEYTOT * N2 / SKC20 / 100)) * 100;//系统1做空手数(股票不使用)
//固定开仓位置手数(不让手数随着K线变化)
LOTS20:= IF( FTPH20 AND REF(YK, 1)<0, BKLOTS20, REF(BKLOTS20, BARSLAST(FTPH20 && REF(YK, 1)<0)) );
//七、开仓信号
FTPH20 AND BKVOL=0 AND REF(YK, 1)<0,BK(LOTS20);
//八、平仓及止损信号
BKVOL>0 AND CROSSDOWN(C, BKC20_ZS),SP(BKVOL);
BKVOL>0 AND FDPL10,SP(BKVOL);//平仓

回复

使用道具 举报

张孟珂 | 2020-5-11 18:59:23 | 显示全部楼层
S2海龟交易系统二(不加仓)

【测试代码】
// 一、计算ATR
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR := MA(TR,20);
// 二、定义高低点
H20 := HV(H, 20);  // 20日高点
L10 := LV(L, 10);  // 10日低点
H55 := HV(H, 55);  // 55日高点
L55 := LV(L, 55); // 55日低点
L20 := LV(L, 20);  // 20日低点
H10 := HV(H, 10);  // 10日高点
// 三、定义系统1、2开平仓信号
TPH20 := CROSSUP(C, H20);  // 突破20日高点 1
TPH55 := CROSSUP(C, H55);  // 突破55日高点 3
TPL55 := CROSSDOWN(C, L55);// 突破55日低点 4
DPL10 := CROSSDOWN(L, L10);// 跌破10日低点 1
DPL20 := CROSSDOWN(L, L20);// 跌破20日低点 3
TPL20 := CROSSDOWN(C, L20);// 突破20日低点 2
TPH10 := CROSSUP(H, H10);  // 突破10日高点 2
TPHH20 := CROSSUP(H, H20); // 突破20日高点 4
// 四、定义首次开平仓
FTPH55:= TPH55 AND COUNT(TPH55, BARSLAST(DPL20))=1;//首次向上突破55日高点
DRAWTEXT(FTPH55 ,H+40 ,'系统2_BK'), VALIGN2, FONTSIZE16, COLORYELLOW;
FDPL20:= DPL20 AND COUNT(DPL20, BARSLAST(FTPH55))=1;//
// 五、记录开仓(平仓)收盘价
//系统1做多数据记录
BKC55 := IF( FTPH55, C, REF(C, BARSLAST(FTPH55)) );//首次突破55日高点时的价格
BKC55_ZS := BKC55 - 2 * ATR;//系统2止损位置
//六、交易手数计算
BKLOTS55:= (INTPART(MONEYTOT * N1 / BKC55 / 100)) * 100;//系统2做多手数
//固定开仓位置手数(不让手数随着K线变化)
LOTS55:= IF( FTPH55, BKLOTS55, REF(BKLOTS55, BARSLAST(FTPH55)) );
//七、开仓信号
FTPH55 AND BKVOL=0,BK(LOTS55);
//八、平仓及止损信号
BKVOL>0 AND CROSSDOWN(C, BKC55_ZS),SP(BKVOL);
BKVOL>0 AND FDPL20,SP(BKVOL);
回复

使用道具 举报

张孟珂 | 2020-5-11 19:00:27 | 显示全部楼层
S1+S2海龟交易系统 (不加仓/不过滤)  

【测试代码】
变量:N1 (0, 1, 0.4)

// 一、计算ATR
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR := MA(TR,20);
// 二、定义高低点
H20 := HV(H, 20);  // 20日高点
L10 := LV(L, 10);  // 10日低点
H55 := HV(H, 55);  // 55日高点
L55 := LV(L, 55); // 55日低点
L20 := LV(L, 20);  // 20日低点
H10 := HV(H, 10);  // 10日高点
// 三、定义系统1、2开平仓信号
TPH20 := CROSSUP(C, H20);  // 突破20日高点 1
TPH55 := CROSSUP(C, H55);  // 突破55日高点 3
TPL55 := CROSSDOWN(C, L55);// 突破55日低点 4
DPL10 := CROSSDOWN(L, L10);// 跌破10日低点 1
DPL20 := CROSSDOWN(L, L20);// 跌破20日低点 3
TPL20 := CROSSDOWN(C, L20);// 突破20日低点 2
TPH10 := CROSSUP(H, H10);  // 突破10日高点 2
TPHH20 := CROSSUP(H, H20); // 突破20日高点 4
// 四、定义首次开平仓
FTPH20:= TPH20 AND COUNT(TPH20, BARSLAST(DPL10))=1;//首次向上突破20日高点 (FRIST 突破 HIGH 20)= FTPH20
DRAWTEXT(FTPH20 ,H+20 ,'系统1_BK'), VALIGN2, FONTSIZE16, COLORWHITE;
FDPL10:= DPL10 AND COUNT(DPL10, BARSLAST(FTPH20))=1 ;
DRAWTEXT(FDPL10 ,L-20 ,'系统1_SP'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPL20:= TPL20 AND COUNT(TPL20, BARSLAST(TPH10))=1;//首次向下突破20日低点
DRAWTEXT(FTPL20 ,L-20 ,'系统1_SK'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPH10:= TPH10 AND COUNT(TPH10, BARSLAST(FTPL20))=1;
DRAWTEXT(FTPH10 ,H+20 ,'系统1_BP'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPH55:= TPH55 AND COUNT(TPH55, BARSLAST(DPL20))=1;//首次向上突破55日高点
DRAWTEXT(FTPH55 ,H+40 ,'系统2_BK'), VALIGN2, FONTSIZE16, COLORYELLOW;
FDPL20:= DPL20 AND COUNT(DPL20, BARSLAST(FTPH55))=1;//
FTPL55:= TPL55 AND COUNT(TPL55, BARSLAST(TPHH20))=1;//首次向下突破55日低点
FTPHH20:= TPHH20 AND COUNT(TPHH20, BARSLAST(FTPL55))=1;
//DRAWTEXT(FTPL20 ,L-40 ,'系统1_SPK'), VALIGN2, FONTSIZE14, COLORYELLOW;
// 五、记录开仓(平仓)收盘价
//系统1做多数据记录
BKC20 := IF( FTPH20, C, REF(C, BARSLAST(FTPH20)) );//首次突破20日高点时的价格
SPC10 := IF( FDPL10,  C, REF(C, BARSLAST(FDPL10)) );//首次跌破10日低点时的价格
BKC55 := IF( FTPH55, C, REF(C, BARSLAST(FTPH55)) );//首次突破55日高点时的价格
BKC55_ZS := BKC55 - 2 * ATR;//系统2止损位置
BKC20_ZS := BKC20 - 2 * ATR;//系统1止损位置
YK1 := IF( SPC10 - BKC20 > 0 , -1, -1);//多头头盈亏判断  (卖平-买开> 0 说明盈利,记1,反之则记-1)
//系统1做空数据记录
SKC20 := IF( FTPL20,  C, REF(C, BARSLAST(FTPL20)) );//首次突破20日低点时的价格
BPC10 := IF( FTPH10, C, REF(C, BARSLAST(FTPH10)) );//首次突破10日高点时的价格
SKC55 := IF( FTPL55, C, REF(C, BARSLAST(FTPL55)) );//首次突破55日低点时的价格
SKC55_ZS := SKC55 + 2 * ATR;
SKC20_ZS := SKC20 + 2 * ATR;
YK2 := IF( BPC10 - SKC20 > 0, -1, -1);//空头盈亏判断 (买平-卖开> 0 说明亏损,记-1,反之则记-1)
//YK=盈亏 (用于判断是否满足亏损性突破)
YK : IF( BARSLAST(FTPH10) < BARSLAST(FDPL10), YK2, YK1);
// BARSLAST(FTPH10) < BARSLAST(FDPL10) 比对最近一次平仓是做多平仓,还是做空平仓
// YK2 记录多头盈亏信号
// YK1 记录空头盈亏信号
//六、交易手数计算
BKLOTS20:= (INTPART(MONEYTOT * N1 / BKC20 / 100)) * 100;//系统1做多手数
BKLOTS55:= (INTPART(MONEYTOT * N1 / BKC55 / 100)) * 100;//系统2做多手数
//SKLOTS20:= (INTPART(MONEYTOT * N2 / SKC20 / 100)) * 100;//系统1做空手数(股票不使用)
//SKLOTS55:= (INTPART(MONEYTOT * N2 / SKC55 / 100)) * 100;//系统2做空手数(股票不使用)
//固定开仓位置手数(不让手数随着K线变化)
LOTS20:= IF( FTPH20 AND REF(YK, 1)<0, BKLOTS20, REF(BKLOTS20, BARSLAST(FTPH20 && REF(YK, 1)<0)) );
LOTS55:= IF( FTPH55, BKLOTS55, REF(BKLOTS55, BARSLAST(FTPH55)) );
//七、开仓信号
FTPH20 AND REF(YK, 1)<0 AND FTPH55 AND BKVOL=0,BK(LOTS20+LOTS55);//系统1、2买入开仓(同时满足系统1、2条件)
FTPH20 AND REF(YK, 1)>0 AND FTPH55 AND BKVOL=0,BK(LOTS55);//系统2买入开仓(系统1信号被过滤)
FTPH20 AND REF(YK, 1)<0 AND BKVOL=0,BK(LOTS20);//系统1买入开仓(只满足系统1条件)
FTPH20 AND REF(YK, 1)<0 AND BKVOL=LOTS55,BK(LOTS20);//系统1买入开仓(系统2持仓)
FTPH55,BK(LOTS55);//系统2买入开仓
//八、平仓及止损信号
//系统1、2同时持仓时
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS) AND FDPL10 AND FDPL20, SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS), SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND FDPL10, SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND NOT(FDPL10) AND NOT(CROSSDOWN(C,BKC20_ZS)), SP(LOTS55);//系统2止损
BKVOL=(LOTS20+LOTS55) AND C<=BKC20_ZS AND FDPL20 AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND C<=BKC20_ZS AND NOT(FDPL20) AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(LOTS20);//系统1止损
BKVOL=(LOTS20+LOTS55) AND FDPL20 AND FDPL10,SP(BKVOL);
BKVOL=(LOTS20+LOTS55) AND FDPL10,SP(LOTS20);
//系统2持仓时
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS), SP(LOTS55);
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND FDPL10, SP(LOTS55);
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND NOT(FDPL10) AND NOT(CROSSDOWN(C,BKC20_ZS)), SP(LOTS55);
BKVOL=LOTS55 AND FDPL20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(LOTS55);
BKVOL=LOTS55 AND COUNT(DPL20, BARSLAST(FTPH55))=1 AND FDPL20, SP(LOTS55);
//系统1持仓时
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND CROSSDOWN(C,BKC55_ZS), SP(LOTS20);
BKVOL=LOTS20 AND FDPL10 AND CROSSDOWN(C,BKC55_ZS), SP(LOTS20);
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)) AND FDPL20, SP(LOTS20);
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)) AND NOT(FDPL20), SP(LOTS20);
BKVOL=LOTS20 AND COUNT(FTPH20 && REF(YK, 1)<0, BARSLAST(FTPH20))=1 AND FDPL10, SP(LOTS20);
BKVOL=LOTS20 AND COUNT(DPL10, BARSLAST(FTPH20 AND REF(YK, 1)<0))=1 AND FDPL10, SP(LOTS20);
回复

使用道具 举报

张孟珂 | 2020-5-11 19:35:52 | 显示全部楼层
S1+S2海龟交易系统 (不加仓/有过滤)

【测试代码】
变量:N1 (0,1,0.4)

// 一、计算ATR
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR := MA(TR,20);
// 二、定义高低点
H20 := HV(H, 20);  // 20日高点
L10 := LV(L, 10);  // 10日低点
H55 := HV(H, 55);  // 55日高点
L55 := LV(L, 55); // 55日低点
L20 := LV(L, 20);  // 20日低点
H10 := HV(H, 10);  // 10日高点
// 三、定义系统1、2开平仓信号
TPH20 := CROSSUP(C, H20);  // 突破20日高点 1
TPH55 := CROSSUP(C, H55);  // 突破55日高点 3
TPL55 := CROSSDOWN(C, L55);// 突破55日低点 4
DPL10 := CROSSDOWN(L, L10);// 跌破10日低点 1
DPL20 := CROSSDOWN(L, L20);// 跌破20日低点 3
TPL20 := CROSSDOWN(C, L20);// 突破20日低点 2
TPH10 := CROSSUP(H, H10);  // 突破10日高点 2
TPHH20 := CROSSUP(H, H20); // 突破20日高点 4
// 四、定义首次开平仓
FTPH20:= TPH20 AND COUNT(TPH20, BARSLAST(DPL10))=1;//首次向上突破20日高点 (FRIST 突破 HIGH 20)= FTPH20
DRAWTEXT(FTPH20 ,H+20 ,'系统1_BK'), VALIGN2, FONTSIZE16, COLORWHITE;
FDPL10:= DPL10 AND COUNT(DPL10, BARSLAST(FTPH20))=1 ;
DRAWTEXT(FDPL10 ,L-20 ,'系统1_SP'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPL20:= TPL20 AND COUNT(TPL20, BARSLAST(TPH10))=1;//首次向下突破20日低点
DRAWTEXT(FTPL20 ,L-20 ,'系统1_SK'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPH10:= TPH10 AND COUNT(TPH10, BARSLAST(FTPL20))=1;
DRAWTEXT(FTPH10 ,H+20 ,'系统1_BP'), VALIGN2, FONTSIZE16, COLORWHITE;
FTPH55:= TPH55 AND COUNT(TPH55, BARSLAST(DPL20))=1;//首次向上突破55日高点
DRAWTEXT(FTPH55 ,H+40 ,'系统2_BK'), VALIGN2, FONTSIZE16, COLORYELLOW;
FDPL20:= DPL20 AND COUNT(DPL20, BARSLAST(FTPH55))=1;//
FTPL55:= TPL55 AND COUNT(TPL55, BARSLAST(TPHH20))=1;//首次向下突破55日低点
FTPHH20:= TPHH20 AND COUNT(TPHH20, BARSLAST(FTPL55))=1;
//DRAWTEXT(FTPL20 ,L-40 ,'系统1_SPK'), VALIGN2, FONTSIZE14, COLORYELLOW;
// 五、记录开仓(平仓)收盘价
//系统1做多数据记录
BKC20 := IF( FTPH20, C, REF(C, BARSLAST(FTPH20)) );//首次突破20日高点时的价格
SPC10 := IF( FDPL10,  C, REF(C, BARSLAST(FDPL10)) );//首次跌破10日低点时的价格
BKC55 := IF( FTPH55, C, REF(C, BARSLAST(FTPH55)) );//首次突破55日高点时的价格
BKC55_ZS := BKC55 - 2 * ATR;//系统2止损位置
BKC20_ZS := BKC20 - 2 * ATR;//系统1止损位置
YK1 := IF( SPC10 - BKC20 > 0 , 1, -1);//多头头盈亏判断  (卖平-买开> 0 说明盈利,记1,反之则记-1)
//系统1做空数据记录
SKC20 := IF( FTPL20,  C, REF(C, BARSLAST(FTPL20)) );//首次突破20日低点时的价格
BPC10 := IF( FTPH10, C, REF(C, BARSLAST(FTPH10)) );//首次突破10日高点时的价格
SKC55 := IF( FTPL55, C, REF(C, BARSLAST(FTPL55)) );//首次突破55日低点时的价格
SKC55_ZS := SKC55 + 2 * ATR;
SKC20_ZS := SKC20 + 2 * ATR;
YK2 := IF( BPC10 - SKC20 > 0, -1, 1);//空头盈亏判断 (买平-卖开> 0 说明亏损,记-1,反之则记1)
//YK=盈亏 (用于判断是否满足亏损性突破)
YK : IF( BARSLAST(FTPH10) < BARSLAST(FDPL10), YK2, YK1);
// BARSLAST(FTPH10) < BARSLAST(FDPL10) 比对最近一次平仓是做多平仓,还是做空平仓
// YK2 记录多头盈亏信号
// YK1 记录空头盈亏信号
//六、交易手数计算
BKLOTS20:= (INTPART(MONEYTOT * N1 / BKC20 / 100)) * 100;//系统1做多手数
BKLOTS55:= (INTPART(MONEYTOT * N1 / BKC55 / 100)) * 100;//系统2做多手数
//SKLOTS20:= (INTPART(MONEYTOT * N2 / SKC20 / 100)) * 100;//系统1做空手数(股票不使用)
//SKLOTS55:= (INTPART(MONEYTOT * N2 / SKC55 / 100)) * 100;//系统2做空手数(股票不使用)
//固定开仓位置手数(不让手数随着K线变化)
LOTS20:= IF( FTPH20 AND REF(YK, 1)<0, BKLOTS20, REF(BKLOTS20, BARSLAST(FTPH20 && REF(YK, 1)<0)) );
LOTS55:= IF( FTPH55, BKLOTS55, REF(BKLOTS55, BARSLAST(FTPH55)) );
//七、开仓信号
FTPH20 AND REF(YK, 1)<0 AND FTPH55 AND BKVOL=0,BK(LOTS20+LOTS55);//系统1、2买入开仓(同时满足系统1、2条件)
FTPH20 AND REF(YK, 1)>0 AND FTPH55 AND BKVOL=0,BK(LOTS55);//系统2买入开仓(系统1信号被过滤)
FTPH20 AND REF(YK, 1)<0 AND BKVOL=0,BK(LOTS20);//系统1买入开仓(只满足系统1条件)
FTPH20 AND REF(YK, 1)<0 AND BKVOL=LOTS55,BK(LOTS20);//系统1买入开仓(系统2持仓)
FTPH55,BK(LOTS55);//系统2买入开仓
//八、平仓及止损信号
//系统1、2同时持仓时
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS) AND FDPL10 AND FDPL20, SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS), SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND FDPL10, SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND CROSSDOWN(C,BKC55_ZS) AND NOT(FDPL10) AND NOT(CROSSDOWN(C,BKC20_ZS)), SP(LOTS55);//系统2止损
BKVOL=(LOTS20+LOTS55) AND C<=BKC20_ZS AND FDPL20 AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(BKVOL);//止损
BKVOL=(LOTS20+LOTS55) AND C<=BKC20_ZS AND NOT(FDPL20) AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(LOTS20);//系统1止损
BKVOL=(LOTS20+LOTS55) AND FDPL20 AND FDPL10,SP(BKVOL);
BKVOL=(LOTS20+LOTS55) AND FDPL10,SP(LOTS20);
//系统2持仓时
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND CROSSDOWN(C,BKC20_ZS), SP(LOTS55);
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND FDPL10, SP(LOTS55);
BKVOL=LOTS55 AND CROSSDOWN(C,BKC55_ZS) AND NOT(FDPL10) AND NOT(CROSSDOWN(C,BKC20_ZS)), SP(LOTS55);
BKVOL=LOTS55 AND FDPL20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)), SP(LOTS55);
BKVOL=LOTS55 AND COUNT(DPL20, BARSLAST(FTPH55))=1 AND FDPL20, SP(LOTS55);
//系统1持仓时
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND CROSSDOWN(C,BKC55_ZS), SP(LOTS20);
BKVOL=LOTS20 AND FDPL10 AND CROSSDOWN(C,BKC55_ZS), SP(LOTS20);
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)) AND FDPL20, SP(LOTS20);
BKVOL=LOTS20 AND CROSSDOWN(C,BKC20_ZS) AND NOT(CROSSDOWN(C,BKC55_ZS)) AND NOT(FDPL20), SP(LOTS20);
BKVOL=LOTS20 AND COUNT(FTPH20 && REF(YK, 1)<0, BARSLAST(FTPH20))=1 AND FDPL10, SP(LOTS20);
BKVOL=LOTS20 AND COUNT(DPL10, BARSLAST(FTPH20 AND REF(YK, 1)<0))=1 AND FDPL10, SP(LOTS20);
回复

使用道具 举报

张孟珂 | 2020-5-11 22:12:15 | 显示全部楼层
===海龟交易系统===
回复

使用道具 举报

春江 | 2020-5-14 15:38:34 | 显示全部楼层
上面这些代码是只做多的,没有做空的。能不能把做空的代码加上去呢
回复

使用道具 举报

也无风雨也无晴 | 2020-5-15 10:35:14 | 显示全部楼层
加仓的?
回复

使用道具 举报

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

本版积分规则

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

43

主题

237

帖子

779

积分

高级会员

Rank: 4

积分
779
  • 官方论坛

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