语法优先:
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 )
);
}