- 精华
- 0
- 在线时间
- 19 小时
- UID
- 237434
- 积分
- 17
- 帖子
- 10
- 阅读权限
- 10
- 注册时间
- 2016-7-21
- 最后登录
- 2018-2-22
- 精华
- 0
- UID
- 237434
- 积分
- 17
- 帖子
- 10
- 主题
- 5
- 阅读权限
- 10
- 注册时间
- 2016-7-21
- 最后登录
- 2018-2-22
|
//------------------------------------------------------------------------
// 简称: U_F_ADX2
// 名称: 文华财经定义的ADX
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
//TR :true range
//HD := HIGH-REF(HIGH,1);
//LD := REF(LOW,1)-LOW;
//DMP:= SUM(IFELSE(HD>0 && HD>LD,HD,0),N);
//DMM:= SUM(IFELSE(LD>0 && LD>HD,LD,0),N);
//PDI: DMP*100/TR;
//MDI: DMM*100/TR;
//ADX: MA(ABS(MDI-PDI)/(MDI+PDI)*100,M);
//ADXRADX+REF(ADX,M))/2;
Params
Numeric DMI_N(14); //DMI的N值
Numeric DMI_M(30); //ADX均线周期 ,DMI的M值
Vars
//DMI最终输出
NumericSeries DMIPlus;
NumericSeries DMIMinus;
NumericSeries ADX;
//DMI过程计算
NumericSeries sDMI;
NumericSeries sADX;
NumericSeries cumm;
Numeric PlusDM;
Numeric MinusDM;
Numeric UpperMove;
Numeric LowerMove;
Numeric SumPlusDM(0);
Numeric SumMinusDM(0);
Numeric SumTR(0);
NumericSeries AvgPlusDM;
NumericSeries AvgMinusDM;
NumericSeries sVolty;
NumericSeries DX;
Numeric i;
NumericSeries TRValue;
//--------------------
NumericSeries ADXValue(20); //计算ADX均线
Begin
TRValue=TrueRange;
if (CurrentBar < DMI_N)
Return InvalidNumeric;
// 计算DM ,可以根据定义再细化
For i = 0 To DMI_N - 1
{
PlusDM = 0 ;
MinusDM = 0 ;
UpperMove = High[i] - High[ i + 1 ] ;
LowerMove = Low[ i + 1 ] - Low[i] ;
If (UpperMove > LowerMove and UpperMove > 0 )
{
PlusDM = UpperMove;
} Else if (LowerMove > UpperMove and LowerMove > 0)
{
MinusDM = LowerMove ;
}
SumPlusDM = SumPlusDM + PlusDM ;
SumMinusDM = SumMinusDM + MinusDM ;
SumTR = SumTR + TRValue[i] ;
}
AvgPlusDM = SumPlusDM / DMI_N ;
AvgMinusDM = SumMinusDM / DMI_N;
sVolty = SumTR / DMI_N ;
DMIPlus=AvgPlusDM/sVolty;
DMIMinus=AvgMinusDM/sVolty;
DX=100*Abs(DMIPlus-DMIMinus)/(DMIPlus+DMIMinus);
PlotNumeric("DMI_PLUS",DMIPlus);
PlotNumeric("DMI_MINUS",DMIMinus);
PlotNumeric("DX",DX);
ADXValue=Average(DX,DMI_M);
Return ADXValue;
End
|
|