海龟交易策略
核心要点概述:
1. 指标与信号计算 真实波幅(TR): 计算公式:TR := MAX((HIGH - LOW), MAX((HIGH - LC), (LC - LOW))) ,其中LC是上一周期的收盘价。 平滑移动平均(ATR):ATR := SMA(TR, 20, 1),20周期的简单移动平均。 高低点调整:
AA:最近N1周期内的最高价减去两倍的ATR。
BB:收盘价上穿过去55周期内的最高价。
买入与卖出信号:
定义了B1、B2、B3作为不同的买入条件。
定义了SS1、SS2作为止损信号。
SSSS:快卖信号。
2. 绘制交易信号 在图表上绘制买入信号(B1、B2、B3)和止损信号(SS1、SS2)、快卖信号(SSSS)。
买入信号绘制在最低价下方0.25位置。
止损和快卖信号绘制在最高价上方0.25位置。
3. ADX与趋势强度 计算ADX相关指标: HD(最高价变动)、LD(最低价变动)。 DMP (正向指标)、DMM(负向指标)。 PDI(DMP百分比)、MDI(DMM百分比)。
ADX:平均方向性指数,衡量趋势强度。 ADXR:ADX的移动平均值。
交易信号:
当ADX在21到32之间且当前周期的最高价大于过去20周期内的最高价时,执行买入平开操作。
当ADX在10到53之间且当前周期的最低价小于过去20周期内的最低价时,执行卖出平开操作。
收盘价小于买入高点减去30时,执行卖出平仓。 收盘价大于卖出低点加上30时,执行买入平仓。
指标代码:
LC:=REF(CLOSE,1); TR:=MAX((HIGH - LOW),MAX((HIGH - LC),(LC - LOW))); ATR:=SMA(TR,20,1); AA:=(HHV(HIGH,N1) - (2 * ATR)); BB:=CROSS(CLOSE,REF(HHV(HIGH,55),1)); SSS:=CROSS(MIN(MA(CLOSE,13),AA),CLOSE); BBB:=BARSLAST(BB); SSSB:=BARSLAST(SSS); B1:=((BBB = 0) AND (REF(SSSB,1) < REF(BBB,1))); B1B:=BARSLAST(B1); B2:=((((BB = 1) AND (B1B < SSSB)) AND (B1B > 0)) AND (COUNT(BB,SSSB) < 3)); B2B:=BARSLAST(B2); B3:=((((BB = 1) AND (B2B < B1B)) AND (COUNT(BB,SSSB) < 4)) AND (COUNT(BB,SSSB) > 2)); B3B:=BARSLAST(B3); SS:=CROSS(MAX(AA,MA(CLOSE,13)),CLOSE); SS1:=(((SS AND ((B3B < B2B) OR (B2B < B1B))) AND (SSSB > B1B)) AND (COUNT(SS,B2B) < 2)); SS1B:=BARSLAST(SS1); SS2:=((((SS AND (SS1B < SSSB)) AND (B3B < B2B)) AND (SS1B > 0)) AND (COUNT(SS,B2B) < 3)); SSSS:=(SSS AND (REF(SSSB,1) > REF(B1B,1))); DRAWTEXT((B1 = 1),(LOW - 0.25),'买1'); DRAWTEXT((B2 = 1),(LOW - 0.25),'买2'); DRAWTEXT((B3 = 1),(LOW - 0.25),'买3'); DRAWTEXT((SS1 = 1),(HIGH+0.25),'止损1'); DRAWTEXT((SS2 = 1),(HIGH+0.25),'止损2'); DRAWTEXT((SSSS = 1),(HIGH+ 0.25),'快卖');
策略信号代码:
HH:=HV(H,20); LL:=LV(L,20); TR := SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),14);
HD := HIGH-REF(HIGH,1);
LD := REF(LOW,1)-LOW; DMP:= SUM(IFELSE(HD>0 && HD>LD,HD,0),18); DMM:= SUM(IFELSE(LD>0 && LD>HD,LD,0),18);
PDI:= DMP*100/TR; MDI:= DMM*100/TR; ADX:= MA(ABS(MDI-PDI)/(MDI+PDI)*100,6);
ADXR:=(ADX+REF(ADX,6))/2; ADX>21&&ADX<32&&H>HH,BPK; ADX>10&&ADX<53&&L<LL,SPK; C<BKHIGH-30,SP; C>SKLOW+30,BP; AUTOFILTER;
信号代码解释
// 计算过去20个周期内的最高价 HH:=HV(H,20);
// 计算过去20个周期内的最低价 LL:=LV(L,20);
// 计算真实波幅(TR),为过去14个周期内的最大值:
// 1. 当前周期的最高价与最低价之差
// 2. 当前周期的最高价与上一个周期的收盘价之差的绝对值
// 3. 当前周期的最低价与上一个周期的收盘价之差的绝对值
TR := SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),14);
// 当前周期的最高价与上一个周期的最高价之差
HD := HIGH-REF(HIGH,1); // 上一个周期的最低价与当前周期的最低价之差
LD := REF(LOW,1)-LOW; // 正向指标(DMP),如果当前周期的HD大于0并且大于LD,则累加HD,否则累加0,周期数为18 DMP:= SUM(IFELSE(HD>0 && HD>LD,HD,0),18); // 负向指标(DMM),如果当前周期的LD大于0并且大于HD,则累加LD,否则累加0,周期数为18
DMM:= SUM(IFELSE(LD>0 && LD>HD,LD,0),18); // 计算正向指标的百分比(PDI),DMP与TR的比值乘以100
PDI:= DMP*100/TR; // 计算负向指标的百分比(MDI),DMM与TR的比值乘以100
MDI:= DMM*100/TR; // 计算平均方向性指数(ADX),为(MDI与PDI差的绝对值除以MDI与PDI之和)乘以100的过去6个周期的移动平均值 ADX:= MA(ABS(MDI-PDI)/(MDI+PDI)*100,6); // 计算ADX的移动平均值(ADXR),为当前周期的ADX与上一个周期的ADX的平均值
ADXR:=(ADX+REF(ADX,6))/2; // 当ADX在21到32之间且当前周期的最高价大于HH时,执行买入平开操作 ADX>21&&ADX<32&&H>HH,BPK; // 当ADX在10到53之间且当前周期的最低价小于LL时,执行卖出平开操作 ADX>10&&ADX<53&&L<LL,SPK; // 如果当前周期的收盘价小于买入高点减去30,则执行卖出平仓操作
C<BKHIGH-30,SP; // 如果当前周期的收盘价大于卖出低点加上30,则执行买入平仓操作 C>SKLOW+30,BP;
// 应用自动过滤条件
AUTOFILTER;