無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
インディケータ

Buffers for each hour (binary) and an hour buffer from 0-23 - for data collection purposes - MetaTrader 5のためのインディケータ

ビュー:
34
評価:
(4)
パブリッシュ済み:
MQL5フリーランス このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

目的

モデル化のためにデータを収集する。時間ダミーは経済モデリングで頻繁に使用される。以下のシンプルなインジケータは、簡単に拡張することができ、各時間をバイナリのバッファ配列ベクトルとして提供します。最終的なバッファ配列ベクトルには、時間そのものが格納されます。

他のインジケータからデータをCSVに収集する場合、例えばCopyBuffer関数を使用すると、このインジケータは追加データとして収集された時間のダミー列を持つことができます。

  • これは、例えばML目的でデータを収集する人のためのシンプルなコードで、モデリングで使用するためのダミー変数(バッファ0から23)、または時間変数(バッファ24)を用意することができます。

コードの説明

  • バッファ番号とプロット番号を25として宣言することから始める:

#property indicator_chart_window
#property indicator_buffers 25
#property indicator_plots 25

バッファのラベル付け

  • データウィンドウのバッファラベルを定義:

#property indicator_label1  "Hour 00"
#property indicator_label2  "Hour 01"
#property indicator_label3  "Hour 02"
#property indicator_label4  "Hour 03"
#property indicator_label5  "Hour 04"
#property indicator_label6  "Hour 05"
#property indicator_label7  "Hour 06"
#property indicator_label8  "Hour 07"
#property indicator_label9  "Hour 08"
#property indicator_label10 "Hour 09"
#property indicator_label11 "Hour 10"
#property indicator_label12 "Hour 11"
#property indicator_label13 "Hour 12"
#property indicator_label14 "Hour 13"
#property indicator_label15 "Hour 14"
#property indicator_label16 "Hour 15"
#property  indicator_label17 "Hour 16"
#property  indicator_label18 "Hour 17"
#property  indicator_label19 "Hour 18"
#property  indicator_label20 "Hour 19"
#property  indicator_label21 "Hour 20"
#property  indicator_label22 "Hour 21"
#property  indicator_label23 "Hour 22"
#property  indicator_label24 "Hour 23"
#property  indicator_label25 "Hour"

バッファの宣言

  • バッファの宣言と、後で計算される時刻の整数変数の宣言。

double hourBuffer0[];
double hourBuffer1[];
double hourBuffer2[];
double hourBuffer3[];
double hourBuffer4[];
double hourBuffer5[];
double hourBuffer6[];
double hourBuffer7[];
double hourBuffer8[];
double hourBuffer9[];
double hourBuffer10[];
double hourBuffer11[];
double hourBuffer12[];
double hourBuffer13[];
double hourBuffer14[];
double hourBuffer15[];
double hourBuffer16[];
double hourBuffer17[];
double hourBuffer18[];
double hourBuffer19[];
double hourBuffer20[];
double hourBuffer21[];
double hourBuffer22[];
double hourBuffer23[];
double hourBuffer[];

int bar_hour;

インデックス作成とプロット描画

すべてのバッファのインデックスをデータとして設定し、ループを使用してプロットをオフにした(ループでインデックスを設定しようとすると、SetIndexBufferにhourBuffer[q]などは渡せないというエラーが表示されたので、1つずつ設定した。)

   // バッファをインデックスに割り当て、チャートから非表示にし、データウィンドウに表示する。
   SetIndexBuffer(0,  hourBuffer0,  INDICATOR_DATA); 
   SetIndexBuffer(1,  hourBuffer1,  INDICATOR_DATA); 
   SetIndexBuffer(2,  hourBuffer2,  INDICATOR_DATA); 
   SetIndexBuffer(3,  hourBuffer3,  INDICATOR_DATA); 
   SetIndexBuffer(4,  hourBuffer4,  INDICATOR_DATA); 
   SetIndexBuffer(5,  hourBuffer5,  INDICATOR_DATA); 
   SetIndexBuffer(6,  hourBuffer6,  INDICATOR_DATA); 
   SetIndexBuffer(7,  hourBuffer7,  INDICATOR_DATA); 
   SetIndexBuffer(8,  hourBuffer8,  INDICATOR_DATA); 
   SetIndexBuffer(9,  hourBuffer9,  INDICATOR_DATA); 
   SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); 
   SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); 
   SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); 
   SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); 
   SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); 
   SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); 
   SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); 
   SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); 
   SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); 
   SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); 
   SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); 
   SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); 
   SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); 
   SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA);
   SetIndexBuffer(24, hourBuffer, INDICATOR_DATA);

   for(int i = 0; i < 24; i++)
   {
      PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE);
      PlotIndexSetInteger(i, PLOT_SHOW_DATA, true);
   }

   return(INIT_SUCCEEDED);
}

OnCalculate関数のループとプログラム

  • 次にOnCalculate関数に移ります:
  • ここではすべてのバッファをゼロに戻し、現在の時間に対応するバッファだけを1に変更する。ここで効率を上げることができるかもしれないが、後の祭りだ。

    if(rates_total <= 0)
        return(0);

    // 最初の未処理のバーから再計算する
    int start = (prev_calculated > 0 ? prev_calculated - 1 : 0);

    for(int i = start; i < rates_total; i++)
    {
       // バーiの時間(0~23)を計算する。
       bar_hour = (int)((time[i] % 86400) / 3600);
      

       // 1) バーiの24個のバッファすべてを0に設定する
       hourBuffer0[i]  = 0.0;
       hourBuffer1[i]  = 0.0;
       hourBuffer2[i]  = 0.0;
       hourBuffer3[i]  = 0.0;
       hourBuffer4[i]  = 0.0;
       hourBuffer5[i]  = 0.0;
       hourBuffer6[i]  = 0.0;
       hourBuffer7[i]  = 0.0;
       hourBuffer8[i]  = 0.0;
       hourBuffer9[i]  = 0.0;
       hourBuffer10[i] = 0.0;
       hourBuffer11[i] = 0.0;
       hourBuffer12[i] = 0.0;
       hourBuffer13[i] = 0.0;
       hourBuffer14[i] = 0.0;
       hourBuffer15[i] = 0.0;
       hourBuffer16[i] = 0.0;
       hourBuffer17[i] = 0.0;
       hourBuffer18[i] = 0.0;
       hourBuffer19[i] = 0.0;
       hourBuffer20[i] = 0.0;
       hourBuffer21[i] = 0.0;
       hourBuffer22[i] = 0.0;
       hourBuffer23[i] = 0.0;
       hourBuffer[i] = EMPTY_VALUE;

       // 2) 次に、マッチするバッファだけを1にセットする。
       switch (bar_hour)
       {
         case 0:  hourBuffer0[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 1:  hourBuffer1[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 2:  hourBuffer2[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 3:  hourBuffer3[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 4:  hourBuffer4[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 5:  hourBuffer5[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 6:  hourBuffer6[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 7:  hourBuffer7[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 8:  hourBuffer8[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 9:  hourBuffer9[i]  = 1.0; hourBuffer[i] = bar_hour; break;
         case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break;
         case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break;
       }
       
      string localHourText = HourToText(bar_hour);
      Comment("The hour is: ", localHourText);
    }

    // 処理したバーの数を返す
    return(rates_total);

コメントに風味を加える関数

  • 最後に、コメント用のプログラムである:
  • これは事実上のデバッグ・チェックだが、コメントは残してある。

string HourToText(int bh) {
string TextHour;

switch(bh)
{
   case 0:
      TextHour = "12 am"; // 午前0時の12時間表示
      break;

   case 1:
      TextHour = "1 am";
      break;

   case 2:
      TextHour = "2 am";
      break;

   case 3:
      TextHour = "3 am";
      break;

   case 4:
      TextHour = "4 am";
      break;

   case 5:
      TextHour = "5 am";
      break;

   case 6:
      TextHour = "6 am";
      break;

   case 7:
      TextHour = "7 am";
      break;

   case 8:
      TextHour = "8 am";
      break;

   case 9:
      TextHour = "9 am";
      break;

   case 10:
      TextHour = "10 am";
      break;

   case 11:
      TextHour = "11 am";
      break;

   case 12:
      TextHour = "12 pm"; // 正午の12時間表示
      break;

   case 13:
      TextHour = "1 pm";
      break;

   case 14:
      TextHour = "2 pm";
      break;

   case 15:
      TextHour = "3 pm";
      break;

   case 16:
      TextHour = "4 pm";
      break;

   case 17:
      TextHour = "5 pm";
      break;

   case 18:
      TextHour = "6 pm";
      break;

   case 19:
      TextHour = "7 pm";
      break;

   case 20:
      TextHour = "8 pm";
      break;

   case 21:
      TextHour = "9 pm";
      break;

   case 22:
      TextHour = "10 pm";
      break;

   case 23:
      TextHour = "11 pm";
      break;

   default:
      // 'bh' が範囲外 (0..23) の場合に備える。
      TextHour = "Unknown";
      break;
}

return TextHour;

現在のところ、これはデータ・ウィンドウを通してしか表示されないことに注意してほしい。


メリー・クリスマス、そして2025年の良いお年を。

MetaQuotes Ltdによって英語から翻訳されました。
元のコード: https://www.mql5.com/en/code/54446

2 Moving Averages with Bollinger Bands 2 Moving Averages with Bollinger Bands

「ボリンジャーバンド付き2本移動平均」は、設定可能な2本の移動平均とオプションのボリンジャーバンドを組み合わせたカスタムMT5インディケータです。クロスオーバーが発生するとリアルタイムで売買矢印を生成し、オプションでアラート、サウンド、Eメール通知も可能です。すべてのタイムフレームとシンボルに適しています。

Perfect Trailing StopLoss Perfect Trailing StopLoss

これをコーディングに忙しいEAにコピーすれば、末尾にスラッシュが付きます。変更する必要があるのは、マジック・ナンバー用のInpMagicだけでしょう;

プロフィット・マキシマイザー プロフィット・マキシマイザー

プロフィットマキシマイザー(PMax)インディケータは、スーパートレンドインディケータの移動平均を統合して作成されたインディケータです。

約束 約束

アルゴリズムの非同期実行を実装するためのインターフェース