最初の構文:
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 )
);
}