今、色んなスキャルピングの商材や書籍を読んで、EA作成や裁量トレードをやってるんですが、次の足まで何分あるのかが気になって仕方ない。
次のローソク足までの残り時間を算出して表示する自作インジケーターを作ってみました。
インジケーター実行イメージ
右上に、Remining time(残り時間)を、大きく表示するようにしてみました。
ちなみに、10秒以内になると赤字にしてみた。

矢野テック
地味だけど、5分足とか15分足の裁量トレードではとても便利
文字表示の場所
デフォルトは右上設定ですが、移動可能にしました。単なるCommentではなく、ObjectCreate関数でオブジェクト扱いにしたので動かせます。
インジケーターのダウンロード
ソースをビルドすれば使えるけど、ほしい方いますかね。
コメント欄にご連絡頂ければ渡します。
MQL4のソース
ソースコードは、残り時間の計算が面倒だけど、それ意外は簡単。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | //+------------------------------------------------------------------+ //| 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 | //+------------------------------------------------------------------+ intOnInit() { //--- 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); } intOnDeinit(){ ObjectDelete("Remining Time"); return0; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ intOnCalculate(constintrates_total, constintprev_calculated, constdatetime&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 | //+------------------------------------------------------------------+ voidOnTimer() { //--- Display_Remining_time("Remining Time"); } //+------------------------------------------------------------------+ //| Display Remining Time //| input string my_name : name | //+------------------------------------------------------------------+ voidDisplay_Remining_time(stringmy_name){ stringmy_object=""; //残り時間を秒で算出 intreminig_sec=(Time[0]+Period()*60)-TimeCurrent(); //残り時間の算出 intmy_Hour=reminig_sec/(60*60); intmy_Min=(reminig_sec/60)%60; intmy_Sec=reminig_sec-(my_Min *60)-(my_Hour *60*60); //マイナス表示対策 MT4の次足表示までの切り替えで2、3秒誤差あり if(my_Sec<0){ my_Sec=0; } //文字列変換 stringstr_h=(string)my_Hour; stringstr_m=(string)my_Min; stringstr_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); } |
アルゴリズム
この計算部分が全て。
1 2 3 4 5 6 7 | //残り時間を秒で算出 intreminig_sec=Time[0]+Period()*60-TimeCurrent(); //残り時間の算出 intmy_Hour=reminig_sec/(60*60); intmy_Min=(reminig_sec/60)%60; intmy_Sec=reminig_sec-(my_Min *60)-(my_Hour *60*60); |
誤差がでてマイナス表示になる対策
ローカルタイムではなく、取引所の時刻を取得するTimeCurrent()を使っているためか、時々誤差が出ます。
マイナスカウントになっても足が変わらないみたいな事が結構発生します。回避するために、0カットしてます。
1 2 3 4 | //マイナス表示対策 MT4の次足表示までの切り替えで2、3秒誤差あり if(my_Sec<0){ my_Sec=0; } |
残り10秒で赤字表示
これは必須じゃなかったけど、次の足の最初が、陽線なのか陰線なのかを判断する上でも、残り10秒で赤字にすると、かなり分かりやすかったので採用。
1 2 3 4 5 | if(my_Hour==0&& my_Min == 0 && my_Sec <= 10){ ObjectSet(my_name,OBJPROP_COLOR,clrRed); }else{ ObjectSet(my_name,OBJPROP_COLOR,indicator_color1); } |
課題
日本語だと、環境によっては文字化けする事もあるので、英語にしました。
コメント
やれ すばらしや
頑張って先読みアルゴちゅくっち21-*+
コメントありがとうございます。先読みは、AI使わないと無理なんですが、MT5だとpythonというプログラムと組み合わせて使えるので理論上は出来るかもと思ってます。チャレンジしてみます