ストキャスティクスの作成

 ストキャスティクス(Stochastics)とは、ジョージ・レーン(George Lane)氏が開発したインジケーターで、一定期間の最高値と最安値の範囲内における、現在のレートの最安値からの相対的な位置を見ることによって、買われすぎなのか、売られすぎなのかを見極めるために使用するものです(なお、最高値からの相対的な位置を見るインジケーターは、%Rオシレーター(詳細は「こちら」を参照してください。)となります。)。

 ストキャスティクスは、%Kライン、%Dライン、SDラインの3本から構成されており、それぞれのラインは、以下の計算式により算出されます。

formula of stochastics
ストキャスティクスの計算式

 ストキャスティクスは、「Stochastics Oscillator」として、MetaTrader4(MT4)でも標準で装備されていますが、MT4のストキャスティクスは、%Kライン、%Dライン、SDラインの3本表示ではなく、2本表示(また、MT4のストキャスティクスの計算式は上記のものとは異なります。詳細については「こちら」を参照してください。)となっています。

 そこで、%Kライン、%Dライン、SDラインの3本を表示させるストキャスティクス(Stochastics_3Lines.mq4)の作成方法について解説します。

  1. 全体像
  2. #property命令の記述
  3. インジケーターバッファーの宣言
  4. 変数の宣言
  5. 基本設定の記述
  6. 具体的な処理内容
  7. 関連インジケーター
  8. 関連書籍
Stochastics 3Lines
Stochastics_3Lines

1.全体像

 MT4でインジケーターを作成するには、以下の手順に従ってプログラムを書いていくことになります。

  1. #property命令を記述する。
  2. インジケーターバッファーの宣言を行う。
  3. 変数の宣言を行う。
  4. init()関数内にインジケーターの基本的な設定を記述する。
  5. start()関数内に具体的な処理内容を記述する。

 具体的には、以下のようになります。

Download (PDF, 657KB)

>>目次に戻る

2.#property命令の記述

 #property命令とは、インジケーターの色、ラインの太さ、インジケーターを表示する場所などの、プログラム全体にかかわる設定を行うものです。

 #property命令の詳細については「こちら」を参照してください。

 「Stochastics_3Lines.mq4」における、#property命令を記述した部分の解釈を示すと、以下のようになります。

#property
#property命令

⑴ サブウィンドウに表示させる

 #property_indicator_separate_window命令によって、「Stochastics_3Lines.mq4」は、サブウィンドウに表示されます。

⑵ 3種類のデータを表示させる

 「Stochastics_3Lines.mq4」は、以下の3つのデータを表示させます。

  • %Kライン
  • %Dライン
  • SDライン

 したがって、#property indicator_buffers命令には、「」を指定します。

⑶ 色を指定する

 「Stochastics_3Lines.mq4」で表示される3つのデータの表示色を指定します。

  • #property indicator_color1 Aqua
    1番目のインジケーターとして%Kラインを指定する(後述)ので、#property indicator_color命令には「」を指定し、表示色を「Aqua」に指定しています。
  • #property indicator_color2 Magenta
    2番目のインジケーターとして%Dラインを指定する(後述)ので、#property indicator_color命令には「」を指定し、表示色を「Magenta」に指定しています。
  • #property indicator_color3 Gold
    3番目のインジケーターとしてSDラインを指定する(後述)ので、#property indicator_color命令には「」を指定し、表示色を「Gold」に指定しています。

⑷ インジケーターの最大値・最小値を指定する

 「Stochastics_3Lines.mq4」で表示される3つのデータは、「0」%から「100」%の間で推移するので、#property indicator_maximum命令には「100」を指定して、最大値を「100」に設定し、また、#property indicator_minimum命令には「」を指定して、最小値を「」に設定しています。

⑸ レベルを設定する

 ストキャスティクスは、ラインが「80」を超えたり、「20」を下回った場合を買われすぎ・売られすぎの判断の基準の1つとします。

 そこで、ストキャスティクスを構成する各ラインの値が「80」と「20」を示す位置に、#property indicator_level命令によって、レベルラインを表示するように設定しています。

>>目次に戻る

3.インジケーターバッファーの宣言

  インジケーターバッファーとは、インジケーターの計算に使用するデータを格納しておく配列のことをいいます。

 インジケーターバッファーの詳細については「こちら」を参照してください。

 「Stochastics_3Lines.mq4」における、インジケーターバッファーを宣言した部分の解釈を示すと、以下のようになります。

indicator buffer
インジケーターバッファーの宣言

⑴ double K_Line[];

 %Kラインの値を格納していく配列です。

⑵ double D_Line[];

 %Dラインの値を格納していく配列です。

⑶ double SD_Line[];

SDラインの値を格納していく配列です。

⑷ double Numerator[];

 上述の%Kラインの値を算出する計算式のうち、分子に相当する値を格納していく配列です。

⑸ double Denominator[];

 上述の%Kラインの値を算出する計算式のうち、分母に相当する値を格納していく配列です。

>>目次に戻る

4.変数の宣言

 「変数」の詳細については「こちら」を参照してください。

 「Stochastics_3Lines.mq4」においては、以下の項目をパラメーターとして指定します。

  • %Kラインの計算期間
  • %Dラインの計算期間
  • SDラインの計算期間

 上記項目は、インジケーターをチャートに適用した際に任意の値に設定することができるようにするため、以下に示すように、「外部変数」(詳細については「こちら」を参照してください。)として宣言します。

  • extern int K_Period
    %Kラインの計算期間
  • extern int D_Period
    %Dラインの計算期間
  • extern int SD_Period
    SDラインの計算期間

>>目次に戻る

5.基本設定の記述

 「Stochastics_3Lines.mq4」におけるinit()関数内に記述したコードについて解説します。

Download (PDF, 236KB)

⑴ IndicatorBuffers()とは

 IndicatorBuffers()は、MQL4であらかじめ定義されている関数で、インジケーターの計算に使用するバッファーの個数を指定するものです。

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

⑵ SetIndexBuffer()とは

 SetIndexBuffer()とは、MQL4であらかじめ定義されている関数で、各インジケーターバッファーを、インジケーターバッファー領域(データを一時的に蓄えるデータ領域)に割り当てるものです。

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

⑶ SetIndexLabel()とは

 SetIndexLabel()とは、MQL4であらかじめ定義されている関数で、データウィンドウにインジケーターの描画線の説明を表示させるものです。

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

⑷ IndicatorShortName()とは

 IndicatorShortName()とは、MQL4であらかじめ定義されている関数で、データウィンドウとサブウィンドウに表示されるインジケーターの名前等を表示させるものです。

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

⑸ SetIndexStyle()とは

 SetIndexStyle()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画スタイル(線orヒストグラム、色など)を設定するものです。

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

⑹ SetIndexDrawBegin()とは

 SetIndexDrawBegin()とは、MQL4であらかじめ定義されている関数で、インジケーターの描画を開始するバーの位置を指定するものです。

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

>>目次に戻る

6.具体的な処理内容

 「Stochastics_3Lines.mq4」のstart()関数内に記述したコードについて解説します。

Download (PDF, 251KB)

⑴ int limit = ……について

 「limt」という変数を、「Bars-IndicatorCounted()」を初期値として宣言しています。

 当該コードの詳細については「こちら」を参照してください。

⑵ %Kラインの計算

ア 分子の計算

 %Kラインの値を算出する計算式の分子は、「最新の終値-過去n日間の最安値」で算出されます。

 分子を構成するそれぞれの項は、以下のように表すことができます。

  • 最新の終値
    
    Close[i]
    
  • 過去n日間の最安値
    
    Low[iLowest(NULL,0,MODE_LOW,K_Period,i)]
    

 したがって、%Kラインの値を算出する計算式の分子は、


Close[i] – Low[iLowest(NULL,0,MODE_LOW,K_Period,i)]

と表すことができることになります。

 そして、「Stochastics_3Lines.mq4」では、for()文を用いて、当該値を配列Numeratorに順次格納していくこととしています。

  • Close[]の詳細については「こちら」を参照してください。
  • Low[]の詳細については「こちら」を参照してください。
  • iLowest()関数の詳細については「こちら」を参照してください。
  • for()文の詳細については「こちら」を参照してください。
イ 分母の計算

 %Kラインの値を算出する計算式の分母は、「過去n日間の最高値-過去n日間の最安値」で算出されます。

 分母を構成するそれぞれの項は、以下のように表すことができます。

  • 過去n日間の最高値
    
    High[iHighest(NULL,0,MODE_HIGH,K_Period,i)]
    
  • 過去n日間の最安値
    
    Low[iLowest(NULL,0,MODE_LOW,K_Period,i)]
    

 したがって、%Kラインの値を算出する計算式の分母は、


High[iHighest(NULL,0,MODE_HIGH,K_Period,i)] –
Low[iLowest(NULL,0,MODE_LOW,K_Period,i)]

と表すことができることになります。

 そして、「Stochastics_3Lines.mq4」では、for()文を用いて、当該値を配列Denominatorに順次格納していくこととしています。

  • High[]の詳細については「こちら」を参照してください。
  • iHighest()関数の詳細については「こちら」を参照してください。
ウ 0divideの回避

 %Kラインの値は、上記イの値を分母として算出されます。

 したがって、分母となる上記イの値がであれば、%Kラインの値を算出することはできません

 そこで、%Kラインの値の算出過程において、「0」で割る(=0divideといいます。)という場合が生じないように、if()文(詳細は「こちら」を参照してください。)を用いて「上記イの値が0でなかったら」という条件を付加しています。

エ %Kラインの値の算出

 %Kラインの値は、上記アの値(=Numeratorの値)を上記イの値(=Denominatorの値)で除した値に100を乗ずることによって算出されます。

 そこで、以下のように記述して、配列K_Lineに計算結果を順次格納しています。


K_Line[i] = (Numerator[i] / Denominator[i]) * 100;

⑶ %Dラインの計算

ア 変数の宣言

 %Dラインの値は、「上記⑵アの値のm日間の合計」を、「上記⑵イの値のm日間の合計」で除した値に100を乗ずることによって算出されます。

 そこで、以下のように2つの変数を宣言しています。

  • double Sum_Numerator
    上記⑵アの値のm日間の合計を格納する変数
  • double Sum_Denominator
    上記⑵イの値のm日間の合計を格納する変数
イ m日間の合計の計算

 for()文を用いて、%Dラインの値を算出する計算式の分母と分子のm日間(=Stochastics_3Lines.mq4では、D_Period)の合計を、上記アの2つの変数に、それぞれ格納しています。

ウ 0divideの回避

 %Dラインの値は、「Sum_Denominatorの値を分母として算出されます。

 したがって、分母となるSum_Denominatorの値がであれば、%Dラインの値を算出することはできません

 そこで、%Dラインの値の算出過程において、「0」で割る(=0divide)という場合が生じないように、if()文(詳細は「こちら」を参照してください。)を用いて「Sum_Denominatorの値が0でなかったら」という条件を付加しています。

エ %Dラインの値の算出

 %Dラインの値は、上記アの「Sum_Numerator」の値を、上記アの「Sum_Denominator」の値で除した値に100を乗ずることによって算出されます。

 そこで、以下のように記述して、配列D_Lineに計算結果を順次格納しています。


D_Line[i] = (Sum_Numerator / Sum_Denominator) * 100;

⑷ SDラインの計算

ア 変数の宣言

 SDラインの値は、「%Dのy日間の単純移動平均」、すなわち、「%Dラインの値の、SDラインの計算期間における合計」を、「SDラインの計算期間」で除することによって 算出されます。

 そこで、「%Dラインの値の、SDラインの計算期間における合計」を格納する変数として、変数「Sum_Numerator」を宣言しています。

イ y日間の合計の計算

 for()文を用いて、%Dラインの値のy日間(=Stochastics_3Lines.mq4では、SD_Period)の合計を、上記アの変数「Sum_Numerator」に格納しています。

ウ SDラインの値の算出

  SDラインの値は、上記アの「Sum_Numerator」の値を「SD_Period」の値で除することによって算出されます。

 そこで、以下のように記述して、配列SD_Lineに計算結果を順次格納しています。


SD_Line[i] = Sum_Numerator / SD_Period;

>>目次に戻る

7.関連インジケーター

全通貨ペアと8通貨の最強通貨 音声とメールで通知
通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング
通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング | fx-on.com

通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング
通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング | fx-on.com

 上記インジケーター(通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング | fx-on.com)の詳細については「こちら通貨強弱Stochastic 一目瞭然 全通貨ペア・8通貨・全時間足 強さランキング | fx-on.com」を参照してください。

時間を味方に短期と長期の動きはどう関連するのか!?
マルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター
マルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター | fx-on.com

マルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター
マルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター | fx-on.com

 上記インジケーター(マルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーターマルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター | fx-on.com)の詳細については「こちらマルチタイムフレーム ストキャスティスク/FXも225も使用可能 インジケーター | fx-on.com」を参照してください。

>>目次に戻る

8.関連書籍

ストキャスを間違って使わないための教本
円心流テクニカル教本パート6 ストキャスティックス編
円心流テクニカル教本パート6 ストキャスティックス編 | fx-on.com

円心流テクニカル教本パート6 ストキャスティックス編
円心流テクニカル教本パート6 ストキャスティックス編 | fx-on.com

 上記書籍(円心流テクニカル教本パート6 ストキャスティックス編円心流テクニカル教本パート6 ストキャスティックス編 | fx-on.com)の詳細については「こちら円心流テクニカル教本パート6 ストキャスティックス編 | fx-on.com」を参照してください。

>>目次に戻る


MT4の使い方からプログラミングまで、わかりやすく解説