【MT4】次のローソク足までの残り時間を表示するインジケーターを作ってみた

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

今、色んなスキャルピングの商材や書籍を読んで、EA作成や裁量トレードをやってるんですが、次の足まで何分あるのかが気になって仕方ない。

次のローソク足までの残り時間を算出して表示する自作インジケーターを作ってみました。

目次

インジケーター実行イメージ

右上に、Remining time(残り時間)を、大きく表示するようにしてみました。

 

ちなみに、10秒以内になると赤字にしてみた。

矢野テック
矢野テック

地味だけど、5分足とか15分足の裁量トレードではとても便利

文字表示の場所

デフォルトは右上設定ですが、移動可能にしました。単なるCommentではなく、ObjectCreate関数でオブジェクト扱いにしたので動かせます。

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

ソースをビルドすれば使えるけど、ほしい方いますかね。

コメント欄にご連絡頂ければ渡します。

MQL4のソース

ソースコードは、残り時間の計算が面倒だけど、それ意外は簡単。

//+------------------------------------------------------------------+
//|                                                 Reminig_Time.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 clrWhite; //Remining time

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ObjectCreate("Remining Time", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Remining Time", OBJPROP_XDISTANCE, 20);
   ObjectSet("Remining Time", OBJPROP_YDISTANCE, 20);
   ObjectSet("Remining Time", OBJPROP_CORNER, 1);
   ObjectSet("Remining Time",OBJPROP_COLOR,indicator_color1);
   EventSetTimer(1);   
//---
   return(INIT_SUCCEEDED);
  }


int OnDeinit(){
   ObjectDelete("Remining Time");
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   Display_Remining_time("Remining Time");   
  }

//+------------------------------------------------------------------+
//| Display Remining Time
//| input string my_name : name                                                  |
//+------------------------------------------------------------------+
void Display_Remining_time(string my_name){

  string my_object = "";

  //残り時間を秒で算出
  int reminig_sec = (Time[0] + Period()*60) - TimeCurrent();

  //残り時間の算出
  int my_Hour = reminig_sec / (60 * 60);
  int my_Min = (reminig_sec / 60) % 60;
  int my_Sec = reminig_sec - (my_Min * 60) - (my_Hour * 60 * 60);

  //マイナス表示対策 MT4の次足表示までの切り替えで2、3秒誤差あり
  if(my_Sec < 0){
      my_Sec = 0;
  }

  //文字列変換
  string str_h =(string)my_Hour;
  string str_m = (string)my_Min;
  string str_s = (string)my_Sec;

  //残り10秒で赤字表示
  if(my_Hour == 0 && my_Min == 0 && my_Sec <= 10){
      ObjectSet(my_name,OBJPROP_COLOR,clrRed);
  }else{
      ObjectSet(my_name,OBJPROP_COLOR,indicator_color1);
  }
  
  //表示
  my_object = "Remining time = " + (string)str_h +":"+ (string)str_m + ":" + (string)str_s;
  ObjectSetText(my_name, my_object, 14);

}

アルゴリズム

この計算部分が全て。

  //残り時間を秒で算出
  int reminig_sec = Time[0] + Period()*60 - TimeCurrent();

  //残り時間の算出
  int my_Hour = reminig_sec / (60 * 60);
  int my_Min = (reminig_sec / 60) % 60;
  int my_Sec = reminig_sec - (my_Min * 60) - (my_Hour * 60 * 60);

誤差がでてマイナス表示になる対策

ローカルタイムではなく、取引所の時刻を取得するTimeCurrent()を使っているためか、時々誤差が出ます。

マイナスカウントになっても足が変わらないみたいな事が結構発生します。回避するために、0カットしてます。

  //マイナス表示対策 MT4の次足表示までの切り替えで2、3秒誤差あり
  if(my_Sec < 0){
      my_Sec = 0;
  }

 

残り10秒で赤字表示

これは必須じゃなかったけど、次の足の最初が、陽線なのか陰線なのかを判断する上でも、残り10秒で赤字にすると、かなり分かりやすかったので採用。

  if(my_Hour == 0 && my_Min == 0 && my_Sec <= 10){
      ObjectSet(my_name,OBJPROP_COLOR,clrRed);
  }else{
      ObjectSet(my_name,OBJPROP_COLOR,indicator_color1);
  }

 

課題

日本語だと、環境によっては文字化けする事もあるので、英語にしました。

 

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

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

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

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

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

友だち追加

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

この記事を書いた人

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

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

コメント一覧 (2件)

    • コメントありがとうございます。先読みは、AI使わないと無理なんですが、MT5だとpythonというプログラムと組み合わせて使えるので理論上は出来るかもと思ってます。チャレンジしてみます

コメントする

目次