【MT4】今日の高値と安値に水平線を自動表示するインジケーターを自作してみた

※本ページはプロモーションが含まれています

水平線を引く事は、FXやる上ではとても基本で重要なのですが、慣れてくると面倒。

そこで、当時の高値と安値に自動的に水平線を引くインジケーターを作ってみました。

目次

実行イメージ

当時(D1)の高値、および、短い足で見るとサポートライン、レジスタンスラインになりやすい、H1、H4の高値、安値にもラインを引くようにしてみました。

水平線 MQL4 自動

矢野テック
矢野テック

スキャルピングする上では、なかなか便利

インジケーターダウンロード

以下よりダウンロードして、MT4のデータフォルダ内のIndicatorフォルダに入れてください。

MQL4のソースコード

簡単なコードなので、一応、ソースコードも公開。

//+------------------------------------------------------------------+
//|                                                     reg_sapo.mq4 |
//|                                         Copyright 2020, Yanoteck |
//|                                   https://investment-vmoney.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Yanoteck"
#property link      "https://investment-vmoney.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window


#property indicator_color1 Yellow;  //D1 Low and High
#property indicator_color2 clrPeru; //H4 Low and High
#property indicator_color3 clrIndianRed; //H1 Low and High


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ObjectDelete("D1 Low");   
   ObjectDelete("D1 High");      
   ObjectDelete("H4 Low");   
   ObjectDelete("H4 High");      
   ObjectDelete("H1 Low");   
   ObjectDelete("H1 High");   

//---
   return(INIT_SUCCEEDED);
  }

int OnDeinit()
{

   ObjectDelete("D1 Low");   
   ObjectDelete("D1 High");      
   ObjectDelete("H4 Low");   
   ObjectDelete("H4 High");      
   ObjectDelete("H1 Low");   
   ObjectDelete("H1 High");      

   return 0;
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   int i=0;

   //Torday
   double d1_high=iHigh(NULL, PERIOD_D1,0); 
   double d1_low=iLow(NULL, PERIOD_D1,0);     
   
   if (Period() < PERIOD_D1) {  
      ObjectDelete("D1 Low");
      ObjectCreate("D1 Low",OBJ_HLINE, 0, Time[0], d1_low);
      ObjectSet("D1 Low", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("D1 Low", OBJPROP_COLOR, indicator_color1);
      ObjectSet("D1 Low", OBJPROP_WIDTH, 2);
      
      
      ObjectDelete("D1 High");
      ObjectCreate("D1 High",OBJ_HLINE, 0, Time[0], d1_high);
      ObjectSet("D1 High", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("D1 High", OBJPROP_COLOR, indicator_color1);      
      ObjectSet("D1 High", OBJPROP_WIDTH, 2);

   }

   //h4
   double h4_high = iHigh(NULL, PERIOD_H4,0);
   double h4_low  = iLow(NULL,PERIOD_H4,0);

   if (Period() < PERIOD_H4) {  
      ObjectDelete("H4 Low");
      ObjectCreate("H4 Low",OBJ_HLINE, 0, Time[0], h4_low);
      ObjectSet("H4 Low", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("H4 Low", OBJPROP_COLOR, indicator_color2);
      ObjectSet("H4 Low", OBJPROP_WIDTH, 2);
      
      ObjectDelete("H4 High");
      ObjectCreate("H4 High",OBJ_HLINE, 0, Time[0], h4_high);
      ObjectSet("H4 High", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("H4 High", OBJPROP_COLOR, indicator_color2);      
      ObjectSet("H4 High", OBJPROP_WIDTH, 2);
   }


   //h1
   double h1_high = iHigh(NULL, PERIOD_H1,0);
   double h1_low  = iLow(NULL,PERIOD_H1,0);

   if (Period() < PERIOD_H1) {  
      ObjectDelete("H1 Low");
      ObjectCreate("H1 Low",OBJ_HLINE, 0, Time[0], h1_low);
      ObjectSet("H1 Low", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("H1 Low", OBJPROP_COLOR, indicator_color3);
      ObjectSet("H1 Low", OBJPROP_WIDTH, 2);
      
      ObjectDelete("H1 High");
      ObjectCreate("H1 High",OBJ_HLINE, 0, Time[0], h1_high);
      ObjectSet("H1 High", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet("H1 High", OBJPROP_COLOR, indicator_color3);      
      ObjectSet("H1 High", OBJPROP_WIDTH, 2);
   }



//--- return value of prev_calculated for next call
   return(rates_total);
  }

 

課題点

 

矢野テック
矢野テック

水平線の上に、文字列を表示させたいね。「D1高値」とかね、分かりやすく。

ObjectCreateを使えば良いんだけど、どの時間に表示するかを調べないといけない。

 

 

 

ブログランキングに参加してます。この記事が少しでもお役に立ちましたら、応援ポチっとお願いします。

にほんブログ村 為替ブログ システムトレード 自作EA派へ
にほんブログ村

お友達にMT4インジケータープレゼント中

機械学習使った日々の予測結果や、細かい試行錯誤の結果はLINEで公開しています。パスワード付き記事もこちらから。

また、今ならお友達には矢野テック自作のMT4用のインジケーターをプレゼント中です。

友だち追加

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

プログラマー。FXのMT4を使った自動売買EA作成やBOT作成などが趣味。2016年から元本10万円をどこまで増やせるか挑戦中。一旦は10万⇒700万⇒2017暴落 20万。ガチホからFXトレードに変更。 現在1000万円。その過程やノウハウは無料メール講座にまとめました。1か月で学べます。→無料メール講座

ご質問はコメント欄からお願いします

コメント一覧 (3件)

  • はじめまして。大変貴重な情報をありがとうございます。
    一点、質問させて下さい。

    >水平線の上に、文字列を表示させたいね。「D1高値」とかね、分かりやすく。
    >ObjectCreateを使えば良いんだけど、どの時間に表示するかを調べないといけない。

    この具体的な記述方法をご教授頂けないでしょうか。

    私が実現したい事は、水平線を描写した際に水平線の上に「高値」といった文字を表示させた上で、水平線を移動しても、その文字情報は水平線から離れずに同時に移動できるようにしたいです。

    お手数ですが、何卒宜しくお願い致します。

    • 水平線の上に文字列を表示する機能はMQL4には無いです。これを大前提で考えます。水平線に文字列を表示するには、文字列だけObjectCreateを使って別のオブジェクトを作って表示させます。「MQL4 チャート テキスト表示」などでGoogleで検索すると、たくさんサンプルが出てくるので、やり方は分かると思います。

      単に文字を表示するだけでも8〜9行書かないといけません。そして、文字列を表示する際は、座標も指定しないといけないので、水平線のちょい下あたりの座標を指定すれば、水平線の位置が変わったら追随してくれます。

      • ご丁寧にありがとうございます!

        頂いた回答踏まえて、やり方調べてみますね。

        この度はありがとうございました!!

コメントする

目次