【MQL4学習】iStochastic()関数とはなにか?MT4でインジケーター・EA作成に役に立つ!

ザフナーラボブログ

iStochastic()関数は、ストキャスティクスの値を取得するために使用します。

なお、MetaTrader4(MT4)におけるストキャスティクスの値は、多くの書籍やwebページで紹介されている計算式とは異なった計算式によって算出されています。

MT4におけるストキャスティクスの値を算出する計算式は、以下のとおりです。

Formula-of-Stochastics

ストキャスティクス-fx-使い方-mt4

多くの書籍やwebページで紹介されているストキャスティクス(以下「通常のストキャスティクス」という。)の計算式については、「こちら」(作成方法については「こちら」)を参照してください。

iStochastic()関数は、以下のように定義されています。

サンプルコード

double iStochastic(
string symbol,
int timeframe,
int Kperiod,
int Dperiod,
int slowing,
int method,
int price_field,
int mode,
int shift
);

各引数の意味は、以下のとおりです。

  • string symbol
    ストキャスティクスの値を計算する通貨ペア名を指定します。
    通貨ペア名は、「気配値表示ウィンドウ」に表示されているとおりに記述します。
    特定の通貨ペア名を指定せず、EA等を適用したチャートの通貨ペアのストキャスティクスの値を取得したい場合は、「NULL」と記述します。
  • int timeframe
    以下の表に従って、ストキャスティクスの値を計算する時間軸を指定します。

    種 類
    定 数
    内 容
    PERIOD_CURRENT
    現在の時間足
    PERIOD_M1
    1分足
    PERIOD_M5
    5分足
    PERIOD_M15
    15
    15分足
    PERIOD_M30
    30
    30分足
    PERIOD_H1
    60
    1時間足
    PERIOD_H4
    240
    4時間足
    PERIOD_D1
    1440
    日 足
    PERIOD_W1
    10080
    週 足
    PERIOD_MN1
    43200
    月 足
  • int Kperiod
    %K期間を指定します。
  • int Dperiod
    %D期間を指定します。
  • int slowing
    スローイング期間を指定します。
    「1」と指定すると、メインラインは通常のストキャスティクスの%Kラインとなり、シグナルラインは%Dラインとなります(いわゆる「ファーストストキャスティクス」。)。
    「2以上」に指定すると、メインラインは%Dラインとなり、シグナルラインはSDラインとなります(いわゆる「スローストキャスティクス」。ただし、上述のように、MT4のストキャスティクスの計算式は通常のストキャスティクスの計算式とは異なるので、通常のストキャスティクスの%Dライン及びSDラインの値とは異なる値が算出されます。)。
  • int method
    以下の表に従って、シグナルラインを算出する移動平均の種類を指定します。

    種 類
    定 数
    内 容
    MODE_SMA
    単純移動平均線
    MODE_EMA
    指数移動平均線
    MODE_SMMA
    平滑移動平均線
    MODE_LWMA
    線形加重移動平均線
  • int price_field
    ストキャスティクスの値の計算に使用する価格データを指定します。
    高値・安値を基にしてストキャスティクスの値を計算したい場合は「0」と記述します。
    終値を基にしてストキャスティクスの値を計算したい場合は「1」と記述します。
  • int mode
    ライン番号を指定します。
    メインラインの値を取得したい場合は「0」と記述します。
    シグナルラインの値を取得したい場合は「1」と記述します。
  • int shift
    ストキャスティクスの値を取得したいバーの位置を指定します。
    ストキャスティクスの値を取得したいバーが現在のバーであれば「0」、1本前のバーであれば「1」、2本前のバーであれば「2」……と記述します。

具体例

2本前のバーの%Kの値が2本前のバーの%Dの値以下で、かつ、1本前のバーの%Kの値が1本前のバーの%Dの値よりも大きい場合であれば、買いエントリーしたい場合は、以下のように記述します。

サンプルコード

double K_Line_1 = iStochastic(NULL,0,5,3,1,0,0,0,1);
double K_Line_2 = iStochastic(NULL,0,5,3,1,0,0,0,2);
double D_Line_1 = iStochastic(NULL,0,5,3,1,0,0,1,1);
double D_Line_2 = iStochastic(NULL,0,5,3,1,0,0,1,2);

if(K_Line_2 <= D_Line_2 && K_Line_1 > D_Line_1)
{
int Ticket
= OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,
NULL,1459,0,Magenta);
}

  • OrderSend()関数の詳細については「こちら」を参照してください。
  • Symbol()関数の詳細については「こちら」を参照してください。
  • Askの詳細については「こちら」を参照してください。