先说语法:
double iADX( string symbol, // BEST AS: _Symbol
int timeframe, // BEST AS: one of {}-ENUMs ~ PERIOD_CURRENT
int period, // averaging period
int applied_price, // BEST AS: one of {}-ENUMs ~ PRICE_CLOSE
int mode, // BEST AS: one of {}-ENUMs ~ MODE_PLUSDI
int shift // shift
);
为什么0.0
?
一旦我们读入调用界面,对所选PRICE_CLOSE
记录序列进行平均的要求,为当前Symbol()
( NULL
) 保留似乎是公平的,但请注意,对零连续条执行此操作指示什么都不做,而不是采取一些合理的计算SUM( Close[i..j] )/period
允许任何有意义的处理。
尝试非零周期,你就回到了正轨,朝着你的目标前进。
double DI_plus,
DI_minus;
int ADX_PERIOD = 8;
int OnInit() {
ObjectCreate( ChartID(), "GUI-SHOW+DI", ... ); // LABEL for +DI
ObjectCreate( ChartID(), "GUI-SHOW-DI", ... ); // LABEL for -DI
}
int OnTick() {
DI_plus = iADX( _Symbol,
PERIOD_CURRENT,
ADX_PERIOD,
PRICE_CLOSE,
MODE_PLUSDI,
0
);
DI_minus = iADX( _Symbol,
PERIOD_CURRENT,
ADX_PERIOD,
PRICE_CLOSE,
MODE_MINUSDI,
0
);
ObjectSetString( Chart_ID(),
"GUI-SHOW+DI",
OBJPROP_TEXT,
StringFormat("+DI %12.6f", DI_plus )
);
ObjectSetString( Chart_ID(),
"GUI-SHOW-DI",
OBJPROP_TEXT,
StringFormat("-DI %12.6f", DI_minus )
);
}