【超入門】MQL5 EA講座 第108回「インジケータを使ってエントリーシグナルを生成する」【EAの作り方】

MQL5でEA作ろう講座

———————–

前回トレードシグナル、つまりエントリー条件の生成について、相場の価格情報に焦点をあてて解説しました。

まずは確定足とはそもそも何か?

という説明を行った上で、確定足をエントリー条件に加味する方法をお伝えしました。

※詳細は第106回「68-69回で作ったEAの売買条件に確定足の要素を反映させてみる」セクションをご覧ください。

また、相場の価格情報からトレードシグナルを生成するもう一つの例として、キャンドルパターンというものがある事を説明し、キャンドルパターンの1つである抱き線(包み足)をエントリー条件に追加するコード記述について解説いたしました。

※詳細は第106回「ローソク足の形状(キャンドルパターン)からエントリーシグナルを生成する」セクションをご覧ください。

今回からはMT5インジケータの値をトレードシグナルに実装する方法について解説していきたいと思います。

前回トレードシグナル、すなわちエントリー条件の生成を、確定足キャンドルパターンといった価格情報の変遷などからおこなった訳ですが、今回はエントリー条件の生成を前回解説した内容とは別のアプローチでおこなおう、という回です。

スポンサーリンク
スポンサーリンク
  1. インジケータとは?
  2. シングルバッファインジケータとは?
    1. バッファとは、「インジケータとしてMT5のチャートに表示する数値の数」である
  3. マルチバッファインジケータとは?
  4. シングルバッファインジケータの値を取得する記述
    1. インジケータ関数の引数に記述するための値をinput変数で設定する
      1. input変数「MAPeriod」は移動平均の期間を設定する
      2. input変数「MAShift」は計算した移動平均の値をどれくらいずらして表示するか、を設定する
      3. input変数「MAMethod」は移動平均の種類を設定する
      4. input変数「AppliedPrice」は移動平均に適用する価格種類を設定する
    2. インジケータの値を格納する配列の宣言
    3. 組み込みインジケータ 関数によるハンドル(インジケータの値を取得する鍵のようなもの)の取得
  5. 配列を時系列にセットする
  6. CopyBuffer関数による、インジケータの値情報を配列にコピー
  7. マルチバッファインジケータの値を取得する記述
    1. ストキャスティクスとは?
      1. iStochastic関数について
        1. 第1引数には銘柄を指定する
        2. 第2引数には時間軸を指定する
        3. 第3引数には%kを計算する期間を指定する
        4. 第4引数には%Dを計算する期間を指定する
        5. 第5引数にはスローイングを計算する期間を指定する
        6. 第6引数には計算に用いる移動平均種別を指定する
        7. 第7引数には計算に用いる価格種別を指定する
    2. インジケータ関数の引数に記述するための値をinput変数で設定する
      1. input変数「KPeriod」は%Kの期間を設定する。
      2. input変数「DPeriod」は%Dの期間を設定する。
      3. input変数「Slowing」はスローイングの期間を設定する。
      4. input変数「StochaMethod」はストキャスティクス計算に使う移動平均の種類を設定する。
      5. input変数「StochaPrice」はストキャスティクス計算に使う価格種類を設定する。
    3. インジケータの値を格納する配列の宣言
      1. 組み込みインジケータ 関数によるハンドル(インジケータの値を取得する鍵のようなもの)の取得
    4. 配列を時系列にセットする
      1. CopyBuffer関数による、インジケータの値情報を配列にコピー
  8. まとめ

インジケータとは?

インジケータの値をトレードシグナルに実装する方法について解説する前に、

まず、そもそもインジケータとは何か?という所からまずは始めたいと思います。

インジケータ=indicator→直訳すると「指標」「尺度」を意味する英語であり、

FXなどの金融商品トレードの世界においては、

過去相場の検証および未来相場の予測の為に用いられる、一連の計算式

の事を指します。

インジケータは、相場の見通しを立てたり、場合によってはその見通しを、実際のトレード戦略に採用したりする為に使われます。

例えば、6869回EAを作った際には、そのトレードシグナルとして単純移動平均(SMA)というものを用いました。

この単純移動平均(SMA)インジケータの1つです。

MT5には多くの組み込みインジケータ(=最初からMT5に内蔵されており、外部からインストールしなくても使えるインジケータの事)が実装されており、チャートに挿入するだけで簡単に使えるような仕様になっています。

例えば、チャートに移動平均線を表示させたかったら、MT5の「表示」メニューから「ナビゲーター」を選択し、ナビゲーターウィンドウを表示させ、その中から「Moving Average」を選択して、チャートにドラッグアンドドロップするだけです。

※「Moving Average」は「指標」カテゴリー内の「トレンド系」サブカテゴリーに格納されています。

今回から解説していこうと思っている内容は、それらインジケータの値をトレードシグナルに取り入れて行こう、というものになります。

インジケータの値をトレードシグナルに取り入れていくにあたり、値の取得をより簡単に行う事ができるようなオリジナルクラスをこれから作っていく予定です。

このオリジナルクラスが完成した暁には、よりEA開発に利用できる手札が増えているでしょう。

是非今回も楽しんで学習して頂ければと思います。

※なお、インジケータの値を使って簡単なEAを作る工程については、以下の記事群でも解説しているので参考にして頂ければと思います。

【MQL5入門】MAの傾きでトレンド判定するEAの作り方

【MQL5入門】ウィリアムズ%レンジ(WPR)の売買シグナルを取得する方法【EAの作り方】

【MQL5入門】モメンタムの売買シグナルを取得する方法【EAの作り方】

【MQL5でパラボリックSARの売買シグナルを取得する方法】

【MQL5でADXの値を取得する方法】

【MQL5でストキャスティクスの売買シグナルを取得する方法】

【MQL5でAwesome Oscillatorの値を取得する方法】

インジケータについての説明が終わった所で、今度はインジケータの種類について、もう少し掘り下げていきたいと思います。

というのも、インジケータには大きく分けてシングルバッファインジケータマルチバッファインジケータの2種類があるからです。

シングルバッファインジケータとは?

シングルバッファインジケータマルチバッファインジケータの事を説明する前に、

そもそもバッファとは何か?という所からまずは説明していきたいと思います。

バッファとは、「インジケータとしてMT5のチャートに表示する数値の数」である

バッファとは英単語「Buffer」=「余裕・空き・緩衝」といった意味合いを持つ言葉ですが、

プログラミングの世界で使う「バッファ」というのは、「データの保存領域」という文脈で使われます。ただ、「データの保存領域」と言われても、ピンとこない人の方が多いかもしれません。

MQL5インジケータに関する領域において、バッファという言葉が出てきた場合は、

インジケータとしてMT5のチャートに表示する数値の数」

と読み替えて頂くのが一番わかりやすいかと思います。

※分かり易さを重視して、厳密さを欠いている部分はありますが、MQL5EA開発においてはそれで問題ないです。

バッファの概念についてはインジケータを自作する時などにも重要になってきます。

組み込みインジケータの1つであるパラボリックSARのコード記述を徹底解説した以下の記事も参考にして頂ければと思います。

【徹底解説】MQL5ソースコード解体新書-パラボリック編-【MQL勉強用】

以上の前提を踏まえて改めて、シングルバッファインジケータとはなにか?という事を紐解いていくと、

シングルバッファインジケータ

バッファが1つのインジケータ

MT5のチャートに表示する数値の数が1つのインジケータ

という事になります。

例えば、6869回で作ったEAトレードシグナルとして利用した単純移動平均(SMA)や、

【MQL5入門】モメンタムの売買シグナルを取得する方法【EAの作り方】

で紹介しているモメンタムなどはシングルバッファインジケータになります。

マルチバッファインジケータとは?

シングルバッファインジケータの解説箇所を読み終えた方は、代替察しがついているかと思いますが、シングルバッファインジケータ

MT5のチャートに表示する数値の数が1つのインジケータ

とするならば、

マルチバッファインジケータはマルチ→「Multi」=「複数の・多数の」という意味の接頭辞が冠されているのでもわかるように、

MT5のチャートに表示する数値の数が複数のインジケータ

という事になります。

MACDや【MQL5でストキャスティクスの売買シグナルを取得する方法】 で紹介しているストキャスティクスなどはマルチバッファインジケータになります。

シングルバッファインジケータの値を取得する記述

インジケータバッファに関する前提知識の説明が終わった所で、次はインジケータの値を取得する具体的な記述について今度は解説していきます。

まずはシングルバッファインジケータの記述例からです。

移動平均線の値を取得するコード記述例を紹介していきます。

//必要なパラメータ
input int MAPeriod=20;//移動平均の期間
input int MAShift=0;//移動平均をどのくらいずらすか
input ENUM_MA_METHOD MAMethod=MODE_SMA;//移動平均の種類
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE;//移動平均に適用する価格種類

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      // 単純移動平均の値取得
//単純移動平均の値を格納する配列宣言
   double sma[];

//配列を時系列にセット
   ArraySetAsSeries(sma,true);

//単純移動平均のハンドルを取得
   int smaHandle=iMA(_Symbol,0,MAMethod,MAShift,MAMethod,AppliedPrice);
//単純移動平均の値を配列にコピー
   CopyBuffer(smaHandle,0,0,10,sma);
   
  }

基本的にインジケータの値取得は以下の過程を経て行います。↓

1つ1つ順を追って見ていきましょう。

インジケータ関数の引数に記述するための値をinput変数で設定する

まずは、グローバル領域(関数の外の領域)に、iMA関数引数に記述するための値をinput変数で設定します。

//必要なパラメータ
input int MAPeriod=20;//移動平均の期間
input int MAShift=0;//移動平均をどのくらいずらすか
input ENUM_MA_METHOD MAMethod=MODE_SMA;//移動平均の種類
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE;//移動平均に適用する価格種類

移動平均線の値はiMA関数を使って取得します。

iMA関数講座記事第68回ですでに引数戻り値、使い方を紹介しているのですが、

そのiMA関数引数に記述する為の値を事前にinput変数で用意しておこう、というのがこの工程になります。

iMA関数についてはコチラのリンクをご参照ください。

input変数については↓の記事をご覧ください。

input変数「MAPeriod」は移動平均の期間を設定する

input変数「MAPeriod」は移動平均線の期間を設定するのに使います。

移動平均線の期間は、iMA関数の第3引数で設定するので、この第3引数input変数「MAPeriod」が記述される想定です。

初期値は仮に「20」としておきます。

input変数「MAShift」は計算した移動平均の値をどれくらいずらして表示するか、を設定する

input変数「MAShift」は計算した移動平均線の値をどれくらいずらして表示するか、を設定するのに使います。

この設定は、iMA関数の第4引数で設定するのですが、第4引数で指定した期間分だけ未来の時間方向にずれて表示される仕様になっています。

マイナス記号をつけると、指定した期間だけ過去方向にずれて描画されます。↓の動画は移動平均線インジケータをチャートに挿入し、プロパティ「シフト」箇所(=iMA関数の第4引数にあたる部分)を変更している模様です。

初期値は仮に「0」にしておきます。

つまり、初期値の設定ではチャートへの表示については、過去方向にも未来方向にもずらさず、最新の移動平均線の値は現在足に表示される設定となっています。

input変数「MAMethod」は移動平均の種類を設定する

input変数「MAMethod」は移動平均線の種類を設定するのに使います。

移動平均線にもいくつかの種類があるため、それを選択する必要があります。

データ型は、MQL5で定義済みのenum型である定数値「ENUM_MA_METHOD」となります。

移動平均線の種類はiMA関数の第5引数で設定するので、その5引数input変数「MAMethod」が記述される想定です。

初期値は「ENUM_MA_METHOD」の定数リストの中から「MODE_SMA」、すなわち単純移動平均(SMA)にしておきます。

enum型については↓の記事をご参照ください。

MQL5 EA講座 第21回「Enum列挙型」

移動平均線の種類は単純移動平均(SMA)指数平滑移動平均(Exponential Moving Average, EMA)線形加重移動平均(Weighted Moving Average, WMA)があります。

詳しくは↓の記事で解説をしておりますので、宜しければご覧ください。

input変数「AppliedPrice」は移動平均に適用する価格種類を設定する

input変数「AppliedPrice」は移動平均線に適用する価格種類を設定するのに使います。

データ型は、MQL5で定義済みのenum型である定数値「ENUM_APPLIED_PRICE」となります。

移動平均線に適用する価格種類iMA関数の第6引数で設定するので、その6引数input変数「AppliedPrice」が記述される想定です。

初期値は「ENUM_APPLIED_PRICE」の定数リストの中から「PRICE_CLOSE」、すなわち終値価格を選択します。

以上でinput変数の設定は完了です。

インジケータの値を格納する配列の宣言

続いてはインジケータの値を格納する配列の宣言します。ここでは単純移動平均(SMA)の値を格納する配列となります。

      // 単純移動平均の値取得
//単純移動平均の値を格納する配列宣言
   double sma[];

配列名はsmaとしました。

単純移動平均(SMA)は価格データを平滑化したものなので、データ型double型です。

配列については以下の記事群をご参照ください。

組み込みインジケータ 関数によるハンドル(インジケータの値を取得する鍵のようなもの)の取得

単純移動平均(SMA)を格納する配列を用意出来たら、組み込みインジケータ 関数によるハンドルの取得します。

単純移動平均(SMA)の取得にはiMA関数を利用します。

//単純移動平均のハンドルを取得
   int smaHandle=iMA(_Symbol,0,MAMethod,MAShift,MAMethod,AppliedPrice);

iMA関数の第1引数には定義済み変数_Symbol」が記述されます(Symbol関数でもOKです)

定義済み変数については↓の記事をご参照ください。

MQL5 EA講座 第29回「定義済み変数について」

第2引数にはには時間軸を指定します。定数ENUM_TIMEFRAMESで定められた値を設定します。0、もしくはPERIOD_CURRENTと記述すると現在のチャートの時間軸が適用されます。

引数~第6引数については、この記事内の

「インジケータ関数の引数に記述するための値をinput変数で設定する」セクションで解説した内容に従い、

移動平均線の期間を設定する第3引数にはinput変数「MAPeriod」を、

計算した移動平均線の値をどれくらいずらして表示するか、を設定する第4引数にはinput変数「MAShift」を、

移動平均線の種類を設定する第5引数にはinput変数「MAMethod」を、

移動平均線に適用する価格種類を設定する第6引数にはinput変数「AppliedPrice」を、

それぞれ記述します。

配列を時系列にセットする

単純移動平均(SMA)を格納するのに用意した配列を時系列にセットします。

配列の時系列セットにはArraySetAsSeries関数を使います。

   //配列を時系列にセット
   ArraySetAsSeries(sma,true);

ArraySetAsSeries関数についてはコチラのリンクをご参照ください。

CopyBuffer関数による、インジケータの値情報を配列にコピー

//単純移動平均の値を配列にコピー
   CopyBuffer(smaHandle,0,0,10,sma);

最後にCopyBuffer関数を使って、単純移動平均(SMA)の値情報を配列sma[]にコピーします。

CopyBuffer関数の第1引数には指標ハンドルを指定します。iMA関数にて取得した値を変数「smaHandle」に格納しているので、変数「smaHandle」を記述します。

CopyBuffer関数の第2引数には第2引数にはバッファ番号を指定します。

バッファ番号というのはバッファ、すなわちチャートに表示する数値の数に応じて0から割り当てられている番号のことです。単純移動平均(SMA)シングルバッファインジケータなので、ここには0が記述されます。

CopyBuffer関数の第3引数にはコピー開始位置を指定します。インジケータバッファデータは、最新のデータが0番に格納され、時間軸が古い方に向かって、1.2.3・・・n番目と並んでいます。

今回は最新足のデータからコピーをしたいので0を記述します。

CopyBuffer関数の第4引数には複製データ数を指定します。

第3引数で指定したコピー開始位置から指定した数だけバッファデータをコピーします。例えば第4引数に「10」と記述し、第3引数に「0」と記述した場合、最新足から10期間分のバッファデータが配列にコピーされます。

CopyBuffer関数の第5引数には複製データ数をコピーする配列を指定します。

第1引数から第4引数まで記述していました内容を受けて出力されるデータを、この第5引数で受け取ります。

第1引数から第4引数までが注文伝票であり、注文した商品を第5引数で受け取るイメージです。

今回の記事における「インジケータの値を格納する配列の宣言」セクションで解説した、配列「sma」をここでは記述します。

CopyBuffer関数についてはコチラのリンクをご参照ください。

以上が、シングルバッファインジケータのデータ取得の流れでした。

今回は単純移動平均(SMA)を例に解説しましたが、基本的にどのシングルバッファインジケータでも流れは同じです。

続いてマルチバッファインジケータの値を取得する記述について、です。

マルチバッファインジケータの値を取得する記述

続いては、マルチバッファインジケータの値を取得する具体的な記述について、です。

といっても手順自体はシングルバッファインジケータと変わる事はありません。

というシングルバッファインジケータと同じ手順を辿って値を取得していきます。

今回はマルチバッファインジケータの代表例として、ストキャスティクスを使って値を取得する記述を見ていきたいと思います。

全体の記述は以下のようになります。

//+------------------------------------------------------------------+
//|                                         Lesson108samplecode2.mq5 |
//|                                                         MQL5ssei |
//|                                    https://mqlinvestmentlab.com/ |
//+------------------------------------------------------------------+
#property copyright "MQL5ssei"
#property link      "https://mqlinvestmentlab.com/"
#property version   "1.00"

//ストキャスティクスに必要なパラメータ
input int KPeriod=5;//K%の期間
input int DPeriod=3;//D%の期間
input int Slowing=3;//スローイングの期間
input ENUM_MA_METHOD StochaMethod=MODE_SMA;//ストキャス計算に使う移動平均の種類
input ENUM_STO_PRICE StochaPrice=STO_LOWHIGH;//ストキャスに適用する価格種類

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      //ストキャスティクスの値取得
//ストキャスティクスの値を格納する配列宣言
   double main[];//メインラインの値を格納
   double signal[];//シグナルラインの値を格納



//ストキャスティクスのハンドルを取得
   int StohcaHandle=iStochastic(_Symbol,0,KPeriod,DPeriod,Slowing,StochaMethod,StochaPrice);
   
   //配列を時系列にセット
   ArraySetAsSeries(main,true);
   ArraySetAsSeries(signal,true);
   
   
//メインラインの値を配列にコピー
   CopyBuffer(StohcaHandle,0,0,10,main);
//シグナルラインの値を配列にコピー
   CopyBuffer(StohcaHandle,0,0,10,main);
   
  }
//+------------------------------------------------------------------+

ストキャスティクスとは?

1つ1つの手順を見ていく前に、まずは簡単にですがストキャスティクス自体について説明したいと思います。

ストキャスティクスはというのはオシレーター系の指標の一つです。

オシレーターという単語には「振り子」という意味合いがあり、振り子が振り切った先には逆方向に戻る作用が働くように、オシレーター系の指標も特定の値に行き着くと、金融商品の価格が逆行する(とされる)サインを発するのが特徴です。

ストキャスティクスは相場の過熱感をはかるオシレーターに属します。

ストキャスティクスは0~100の間で、「%K」→メインライン「%D」→シグナルライン、という2本の線を表示するマルチバッファインジケータです。

「%K」は一定期間の値幅を100として現在どの水準にいるかという数値になります。

一定期間の最高値と最安値、現在の価格を用いて算出します。

「%D」は「%K」を移動平均化したものです。

MT5に内蔵されているストキャスティクス初期値パラメーターでは、

%Kを算出する期間=5

%Dを算出する期間=3

スローイング(=%Dを移動平均化する計算に用いる期間)=3

となっています。

一般的に「定石」と言われる買いサイン、売りサインは

買いサイン:ストキャスティクスが20%以下の状態で、%Kが%Dを下から上にクロスしたとき

売りサイン:ストキャスティクスが80%以上の状態で、%Kが%Dを上から下にクロスしたとき

というのがよく言われています。

以上がストキャスティクスの簡単な説明になります。

これを踏まえて次はストキャスティクスの値を取得する手順の説明に移りますが、

MQL4とは違い、MQL5ではストキャスティクスの値の取得が組み込みインジケータ 関数単体では完結しません。

ストキャスティクスの値を取得する為のハンドルを取得する必要があります。

ハンドルの取得にはiStochastic関数を使います。

iStochastic関数について

iStochastic関数戻り値引数構成は以下のようになっています。

int  iStochastic( 
   string          symbol,          // 銘柄名 
  ENUM_TIMEFRAMES  period,          // 期間 
  int              Kperiod,        // K期間(計算に使用されるバーの数) 
  int              Dperiod,        // D期間(初めの平滑化の期間) 
  int              slowing,        // 最終の平滑化 
  ENUM_MA_METHOD  ma_method,      // 平滑化の種類  
  ENUM_STO_PRICE  price_field      // 確率論的計算方法 
  );

戻り値は指標ハンドル
第1引数には銘柄を指定する

第1引数には銘柄を指定します。定義済み変数_Symbol」あるいはSymbol関数を記述すると、プログラムを挿入したチャートの銘柄を指定したことになります。

第2引数には時間軸を指定する

第2引数には時間軸を指定します。5分足なのか、1時間足なのか、日足なのか・・・そういう移動平均を計算するベースとなるタイムフレームの指定です。

定数ENUM_TIMEFRAMESで定められた値を設定します。0、もしくはPERIOD_CURRENTと記述すると現在のチャートの時間軸が適用されます。

定義済み変数については→コチラをご覧ください。

定数については→コチラをご覧ください。

enum列挙型については→コチラをご覧ください。

第3引数には%kを計算する期間を指定する

第3引数には%kを計算する期間を指定します

第4引数には%Dを計算する期間を指定する

第4引数には%Dを計算する期間を指定します

第5引数にはスローイングを計算する期間を指定する

第5引数にはスローイングを計算する期間を指定します

第6引数には計算に用いる移動平均種別を指定する

第6引数には計算に用いる移動平均線種別を指定します。

移動平均平滑化の種類を指定します。ストキャスティクスの計算には移動平均を用いるのですが、

移動平均にもいくつかの種類があるため、それを選択する必要があります。移動平均平滑化の種類は、定数ENUM_MA_METHODで定められたものを設定します。

第7引数には計算に用いる価格種別を指定する

第7引数には計算に用いる価格種別を指定します。

ストキャスティクスの計算にあたっては、チャートの各バーごとの価格を利用するのですが、その計算に用いる価格を

終値を使って計算するか、

高値/安値を使って計算するか、

を指定します。

MQL5が定める定義済みenum型定数リスト「NUM_STO_PRICE」に従って指定を行います。

定数STO_CLOSECLOSE」を指定した場合は終値を使った計算が行われます。

一方、定数STO_LOWHIGH」を指定した場合は高値/安値を使った計算が行われます。

ストキャスティクスおよびiStochastic関数の説明が終わった所で、改めてマルチバッファインジケータの値取得手順を1つ1つ見ていきましょう。

インジケータ関数の引数に記述するための値をinput変数で設定する

まずは、グローバル領域(関数の外の領域)に、iStochastic関数引数に記述するための値をinput変数で設定します。

//ストキャスティクスに必要なパラメータ
input int KPeriod=5;//K%の期間
input int DPeriod=3;//D%の期間
input int Slowing=3;//スローイングの期間
input ENUM_MA_METHOD StochaMethod=MODE_SMA;//ストキャス計算に使う移動平均の種類
input ENUM_STO_PRICE StochaPrice=STO_LOWHIGH;//ストキャス計算に使う価格種類

input変数「KPeriod」は%Kの期間を設定する。

input変数「KPeriod」は%Kの期間を設定するのに使います。

%Kの期間設定はiStochastic関数の第3引数で行うので、「KPeriod」は第3引数に記述される想定です。

初期値MT5組み込みインジケータストキャスティクスで最初に設定されている「5」にしておきます。

input変数「DPeriod」は%Dの期間を設定する。

input変数「DPeriod」は%Dの期間を設定するのに使います。

%Dの期間設定はiStochastic関数の第4引数で行うので、「KPeriod」は第4引数に記述される想定です。

初期値MT5組み込みインジケータストキャスティクスで最初に設定されている「3」にしておきます。

input変数「Slowing」はスローイングの期間を設定する。

input変数「Slowing」はスローイングの期間を設定するのに使います。

スローイングの期間設定は、iStochastic関数の第5引数で行うので、「Slowing」は第5引数に記述される想定です。

初期値MT5組み込みインジケータストキャスティクスで最初に設定されている「3」にしておきます。

input変数「StochaMethod」はストキャスティクス計算に使う移動平均の種類を設定する。

input変数「StochaMethod」はストキャスティクス計算に使う移動平均の種類を設定するのに使います。

今回の記事の、「iStochastic関数について」セクションでも書きましたが、

ストキャスティクスの計算には移動平均を用います。

移動平均にもいくつかの種類があるため、それを選択する必要があります。

データ型は、MQL5で定義済みのenum型である定数値「ENUM_MA_METHOD」となります。

移動平均の種類設定はiStochastic関数の第6引数で行うので、「StochaMethod」は第6引数で記述される想定です。

初期値MODE_SMAに設定しておきます。

input変数「StochaPrice」はストキャスティクス計算に使う価格種類を設定する。

input変数「StochaPrice」はストキャスティクス計算に使う価格種類を設定するのに使います。

これも「iStochastic関数について」セクションで書いたことですが、ストキャスティクスの計算にあたっては、チャートの各バーごとの価格を利用します。

計算に使う価格種類の設定はiStochastic関数の第7引数で行うので、「StochaPrice」は第7引数で記述される想定です。

データ型は、MQL5で定義済みのenum型である定数値「ENUM_STO_PRICE 」となります。

初期値は「STO_LOWHIGH」、すなわち高値/安値をベースに計算するモードに設定します。

インジケータの値を格納する配列の宣言

続いてはインジケータの値を格納する配列の宣言します。

      //ストキャスティクスの値取得
//ストキャスティクスの値を格納する配列宣言
   double main[];//メインラインの値を格納
   double signal[];//シグナルラインの値を格納

基本的に移動平均と同じなのですが、ストキャスティクスは%K=メインラインと%D=シグナルラインという2本の線で構成されるマルチバッファインジケータです。

従って配列もメインラインの値を格納する「main」と、

シグナルラインの値を格納する「signal」の2つを用意します。

組み込みインジケータ 関数によるハンドル(インジケータの値を取得する鍵のようなもの)の取得

ストキャスティクスを格納する配列を用意出来たら、組み込みインジケータ 関数によるハンドルの取得します。

ストキャスティクスハンドル取得にはiStochastic関数を利用します。

//ストキャスティクスのハンドルを取得
   int StohcaHandle=iStochastic(_Symbol,0,KPeriod,DPeriod,Slowing,StochaMethod,StochaPrice);

の第1引数には定義済み変数_Symbol」が記述されます(Symbol関数でもOK)

第2引数にはには時間軸を指定します。定数ENUM_TIMEFRAMESで定められた値を設定します。0、もしくはPERIOD_CURRENTと記述すると現在のチャートの時間軸が適用されます。

第3引数~第7引数については、この記事内の

インジケータ 関数引数に記述するための値をinput変数で設定する」セクションの内容に従い、

%Kの期間を設定する第3引数にはinput変数「KPeriod」を、

%Dの期間を設定する第4引数にはinput変数「DPeriod」を、

スローイングの期間を設定する第5引数にはinput変数「Slowing」を、

ストキャスティクス計算に使う移動平均の種類を設定する第6引数には、input変数「StochaMethod」を、

ストキャスティクス計算に使う価格種類を設定する第7引数には、input変数「StochaPrice」を

それぞれ記述します。

配列を時系列にセットする

続いては配列の時系列セットです。

 //配列を時系列にセット
   ArraySetAsSeries(main,true);
   ArraySetAsSeries(signal,true);

ArraySetAsSeries関数を使うのはシングルバッファインジケータの時と全く同じですが、

今回はメインラインとシグナルライン用に2つの配列を宣言しているので両方忘れずに時系列セットします。

CopyBuffer関数による、インジケータの値情報を配列にコピー

最後にCopyBuffer関数によってインジケータの値情報を配列にコピーします。

//メインラインの値を配列にコピー
   CopyBuffer(StohcaHandle,0,0,10,main);
//シグナルラインの値を配列にコピー
   CopyBuffer(StohcaHandle,1,0,10,signal);

今回はメインラインと、シグナルライン2つの値を取得するので、CopyBuffer関数を2回呼び出し、最初の呼び出しにおける第5引数には配列「main」を、後の方の呼び出しにおける第5引数には配列「signal」をそれぞれ記述します。

今回気をつけなければいけないのが、それぞれに呼び出したCopyBuffer関数における第2引数です。

ここにはバッファ番号を記述するのですが、マルチバッファインジケータなので、メインラインとシグナルラインでは取得するのに必要なバッファ番号が違います。

メインラインの値を取得する場合バッファ番号は「0」になります。

シグナルラインの値を取得する場合バッファ番号は「1」になります。

以上が、マルチバッファインジケータのデータ取得の流れでした。

まとめ

今回はインジケータを使ってトレードシグナルを生成する方法の前段階として、インジケータの値取得について解説をしました。

まず、そもそもインジケータとは何か?という部分を説明し、その上でインジケータにはシングルバッファインジケータマルチバッファインジケータがあることをお伝えしました。

※詳細はこの記事内の、

「シングルバッファインジケータとは?」セクション及び

「マルチバッファインジケータとは?」セクションをご覧ください。

シングルバッファインジケータの値取得の例として、単純移動平均(SMA)を取り上げ、そのコード記述例を順を追って解説を行いました。

※詳細はこの記事内の、

「シングルバッファインジケータの値を取得する記述」セクションをご覧ください。

マルチバッファインジケータの値取得例としては、ストキャスティクスを取り上げ、これもまたコード記述例を紹介しました。

※詳細はこの記事内の、

「マルチバッファインジケータの値を取得する記述」セクションをご覧ください。

MT5に内蔵されているインジケータには、iMA関数iStochastic関数と同じような組み込みインジケータ 関数があります。これらの組み込みインジケータ 関数については、MQL5リファレンスの「テクニカル指標」カテゴリーで確認することができます。

今回は以上とさせていただきます。

最後までお読みいただきありがとうございました。

MQL5 EA講座 第107回「価格情報からトレードシグナルを生成する」

MQL5 EA講座 第109回「インジケータの値を簡単に取得できるクラスを作る」

【インジケータに関連した講座記事】↓

タイトルとURLをコピーしました