参考:
ImPort
#Call_Other [DMI ] As DMI
#Call_Other [KDJ] As KDJ
Vars
Numeric PDI;
Numeric MDI;
Numeric ADX;
Numeric ADXR;
Numeric D;
Begin
PDI=DMI.PDI;
MDI=DMI.MDI;
ADX=DMI.ADX;
ADXR=DMI.ADXR;
D=KDJ.D;
Select(Last((High-Low)/ref(Close,1)<0.1,20,0)&&Vol>ref(Vol,1)*2 &&Close >ref(Close,1)*1.03 && PDI>MDI &&CROSS (ADX,ADXR)&& ADXR>MDI &&PDI>ADX&& D>ref(D,1));
End
您是想用于公式选股?
如下修改下:
Params
Numeric Length1(14);
Numeric Length2(6);
Numeric Length(9);
Numeric Length3(3);
Numeric Length4(3);
Vars
Numeric TR;
Numeric HD;
Numeric LD;
Numeric DMP;
Numeric PDI;
Numeric MDI;
NumericSeries ADX;
Numeric ADXR;
Numeric DMM;
Numeric RSV;
Numeric K;
Numeric D;
Numeric J;
Begin
TR = Sum(Max(Max(High - Low,Abs(High - Close[1])),Abs(Low - Close[1])),Length1);//最高价与最低价做差,最高价与前一周期收盘价做差,最低价与前一周期收盘价作差,在上述三个数据中取绝对值最大者,对该最大值做Length1周期累加求和。
HD = High - High[1];//最高价与前一周期最高价做差
LD = Low[1] - Low;//前一周期最低价与最低价做差
DMP = Sum(IIF(HD > 0 && HD > LD,HD,0),Length1);//如果HD>0并且HD>LD,取HD否则取0,对取值做Length1周期累加求和。
DMM = Sum(IIF(LD > 0 && LD > HD,LD,0),Length1);//如果LD>0并且LD>HD,取LD否则取0,对取值做Length1周期累加求和。
PDI = DMP * 100 / TR;
MDI = DMM * 100 / TR;
ADX = Ma(Abs(MDI - PDI) / (MDI + PDI) * 100,Length2);//MDI与PDI差的绝对值与(MDI+PDI)*100做比值,取该比值的Length2个周期均值。
ADXR = (ADX + ADX[Length2])/2;
RSV = (Close - LLV(Low,Length)) / (HHV(High,Length) - LLV(Low,Length)) * 100;//收盘价与N周期最低值做差,N周期最高值与N周期最低值做差,两差之间做比值。
K = Sma(RSV,Length3,1);//RSV的移动平均值
D = Sma(K,Length4,1);//K的移动平均值
J = 3 * K - 2 * D;
Select(Last((High-Low)/ref(Close,1)<0.1,20,0)&&Vol>ref(Vol,1)*2 &&Close >ref(Close,1)*1.03 && PDI>MDI &&CROSS (ADX,ADXR)&& ADXR>MDI &&PDI>ADX&& D>ref(D,1));
End