
MQL4MQL5 テクニカル指標
iStochastic()
- できること
- ストキャスティクスの値を取得する
- 対応
- MQL4・MQL5
iStochastic() とは
ストキャスティクス(%K と %D)を計算する関数です。0〜100 の値で、買われすぎ・売られすぎや、%K と %D のクロスの判定に使います。
iStochastic() の書式と引数
MQL4 の場合MT4
double iStochastic(
string symbol,
int timeframe,
int Kperiod,
int Dperiod,
int slowing,
int method,
int price_field,
int mode,
int shift
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。0 または PERIOD_CURRENT でチャートの時間足。 |
Kperiod | int | 必須 | %K の期間(よく使われるのは 5)。 |
Dperiod | int | 必須 | %D の期間(よく使われるのは 3)。 |
slowing | int | 必須 | スローイング(よく使われるのは 3)。 |
method | int | 必須 | %D の移動平均の種類。MODE_SMA など。 |
price_field | int | 必須 | 価格の種類。MQL4 は 0(高値・安値)または 1(終値)、MQL5 は STO_LOWHIGH または STO_CLOSECLOSE。 |
mode | int | 必須 | 取得するライン。MODE_MAIN(%K)または MODE_SIGNAL(%D)。 |
shift | int | 必須 | 値を取得するバーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL4)
指定したラインの値(0〜100)。
MQL5 の場合MT5
int iStochastic(
string symbol,
ENUM_TIMEFRAMES period,
int Kperiod,
int Dperiod,
int slowing,
ENUM_MA_METHOD ma_method,
ENUM_STO_PRICE price_field
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
period | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT でチャートの時間足。 |
Kperiod | int | 必須 | %K の期間(よく使われるのは 5)。 |
Dperiod | int | 必須 | %D の期間(よく使われるのは 3)。 |
slowing | int | 必須 | スローイング(よく使われるのは 3)。 |
ma_method | ENUM_MA_METHOD | 必須 | %D の移動平均の種類。MODE_SMA など。 |
price_field | ENUM_STO_PRICE | 必須 | 価格の種類。MQL4 は 0(高値・安値)または 1(終値)、MQL5 は STO_LOWHIGH または STO_CLOSECLOSE。 |
戻り値(MQL5)
インジケーターのハンドル。バッファ番号は 0 が %K(MAIN_LINE)、1 が %D(SIGNAL_LINE)です。
iStochastic() の使い方(コード例)
MQL4
double k1 = iStochastic(_Symbol, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
double d1 = iStochastic(_Symbol, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1);
if(k1 < 20 && k1 > d1)
Print("売られすぎゾーンで %K が %D より上");MQL5
int hSto = INVALID_HANDLE;
int OnInit()
{
hSto = iStochastic(_Symbol, PERIOD_CURRENT, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
return hSto == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED;
}
void OnTick()
{
double k[], d[];
if(CopyBuffer(hSto, MAIN_LINE, 1, 1, k) < 1 || CopyBuffer(hSto, SIGNAL_LINE, 1, 1, d) < 1)
return;
if(k[0] < 20 && k[0] > d[0])
Print("売られすぎゾーンで %K が %D より上");
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iStochastic() の注意点
- MQL5 では値ではなく「ハンドル」(インジケーターの番号)が返ります。ハンドルは OnInit() で1回だけ作り、OnTick() などで CopyBuffer() を使って値を読み出します。毎ティック作り直すと動作が重くなります。
MQL4 と MQL5 の違い
MQL4 の price_field は 0 / 1 の数値、MQL5 は STO_LOWHIGH / STO_CLOSECLOSE の定数です。












