前日の高値・安値を表示するインジケーター
前日の高値・安値を表示するインジケーターを作成していきたいと思います。
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。
【MQL】カスタムインジケーターを作成の流れについてわかりやすく説明してみた
今回は名前を「HL-line」で作成します。
グローバル変数を記述する
グローバル変数を記述しましょう。
- 前日の高値を格納する変数:Yhigh
- 前日の安値を格納する変数:Ylow
の2つ用意しましょう。
double Yhigh;//前日高値の変数 double Ylow;//前日安値の変数
これでグローバル変数の記述は完了です。
double Yhigh;//前日高値の変数 double Ylow;//前日安値の変数
Copy
OnDeinit()関数の記述する
OnDeinit()関数の記述しましょう。
OnDeinit()関数を記述することでインジケーターを削除すると表示が消えます。
今回は高値のYhighlineと安値のYlowlineの2本のラインを削除するように記述します。
ObjectDelete("Yhighline");//Yhighlineを削除 ObjectDelete("Ylowline");//Ylowlineを削除
これでOnDeinit()関数の記述は完了です。
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では過去の必要ではなくなった水平ラインを削除して初期化しています。
ObjectDelete("Yhighline"); //前日高値ラインの初期化
ObjectCreateではラインの情報を記載します。オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格という順番です。
ObjectCreate("Yhighline",OBJ_HLINE, 0, Time[0], Yhigh); //ObjectCreate(オブジェクト名,オブジェクトタイプ, ウィンドウ, 時間, 価格);
ObjectSetで色や線の種類を記載します。
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(オブジェクト名,オブジェクトプロパティインデックス, プロパティ値);
これでOnCalculate()関数の記述は完了です。
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本表示されていたら完成です。
ソースコード全体
HL-lineのソースコード全体は以下に記載してあります。
//+------------------------------------------------------------------+ //| 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
まとめ
今回は、前日の高値・安値を表示するインジケーターを紹介しました。
コメント