FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】前日の高値・安値を表示するインジケーター【初級編】

MQL インジケーター作成 前日の高値・安値を表示するMT4インジケーター作成

前日の高値・安値を表示するインジケーター

前日の高値・安値を表示するインジケーターを作成していきたいと思います。

メタエディタ(MetaEditor)を立ち上げる

メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。

【MQL】カスタムインジケーターを作成の流れについてわかりやすく説明してみた

今回は名前を「HL-line」で作成します。

グローバル変数を記述

グローバル変数を記述しましょう。

  • 前日の高値を格納する変数:Yhigh
  • 前日の安値を格納する変数:Ylow

の2つ用意しましょう。

double Yhigh;//前日高値の変数
double Ylow;//前日安値の変数
Copy

OnDeinit()関数の記述

OnDeinit()関数の記述しましょう。

OnDeinit()関数を記述することでインジケーターを削除すると表示が消えます。

今回は高値のYhighlineと安値のYlowlineの2本のラインを削除するように記述します。

ObjectDelete("Yhighline");//Yhighlineを削除
ObjectDelete("Ylowline");//Ylowlineを削除
Copy

OnCalculate()関数を記述

OnCalculate()関数を記述します。

Yhighには前日の高値の関数を格納します。Ylowには前日の安値の関数を格納します。

Yhigh = iHigh(NULL, PERIOD_D1,1);
Ylow = iLow(NULL, PERIOD_D1,1);

Period()とは時間足のことで、W1は週足という意味で、週足以上の足を表示しないようにします。

if (Period() < PERIOD_W1)

ObjectDeleteでは過去の必要ではなくなった水平ラインを削除して初期化しています。

ObjectCreateではラインの情報を記載します。

オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格という順番です。

ObjectSetで色や線の種類を記載します。

    Yhigh = iHigh(NULL, PERIOD_D1,1);//前日高値
    Ylow = iLow(NULL, PERIOD_D1,1);//前日安値
    
    if (Period() < PERIOD_W1)//週足か月足の場合は描写しない
    {  
       //前日高値ラインの描写
       ObjectDelete("Yhighline"); //前日高値ラインの初期化
       ObjectCreate("Yhighline",OBJ_HLINE, 0, Time[0], Yhigh); //ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
       ObjectSet("Yhighline", OBJPROP_STYLE, STYLE_SOLID); //ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       ObjectSet("Yhighline", OBJPROP_COLOR, clrWhite);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       
       //前日安値ラインの描写
       ObjectDelete("Ylowline");//前日安値ラインの初期化
       ObjectCreate("Ylowline",OBJ_HLINE, 0, Time[0], Ylow);//ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
       ObjectSet("Ylowline", OBJPROP_STYLE, STYLE_SOLID);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       ObjectSet("Ylowline", OBJPROP_COLOR, clrWhite);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
    }   
Copy

コンパイル

コンパイルしましょう。以下の画像のように白いラインが2本表示されていたら完成です。

MQL 前日の高値・安値インジケーター 作成

ソースコード

全体のソースコードは以下に記載しておきます。

//+------------------------------------------------------------------+
//|                                                      HL-line.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

double Yhigh;//前日高値の変数
double Ylow;//前日安値の変数
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason)
{
  ObjectDelete("Yhighline");//Yhighlineを削除
  ObjectDelete("Ylowline");//Ylowlineを削除
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
// ---
    Yhigh = iHigh(NULL, PERIOD_D1,1);//前日高値
    Ylow = iLow(NULL, PERIOD_D1,1);//前日安値
    
    if (Period() < PERIOD_W1)//週足か月足の場合は描写しない
    {  
       //前日高値ラインの描写
       ObjectDelete("Yhighline"); //前日高値ラインの初期化
       ObjectCreate("Yhighline",OBJ_HLINE, 0, Time[0], Yhigh); //ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
       ObjectSet("Yhighline", OBJPROP_STYLE, STYLE_SOLID); //ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       ObjectSet("Yhighline", OBJPROP_COLOR, clrWhite);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       
       //前日安値ラインの描写
       ObjectDelete("Ylowline");//前日安値ラインの初期化
       ObjectCreate("Ylowline",OBJ_HLINE, 0, Time[0], Ylow);//ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
       ObjectSet("Ylowline", OBJPROP_STYLE, STYLE_SOLID);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
       ObjectSet("Ylowline", OBJPROP_COLOR, clrWhite);//ObjectSet(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
    }   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Copy

まとめ

今回は、前日の高値・安値を表示するインジケーターを紹介しました。

コメント

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