システムトレード 게시글

新しいバーやキャンドルの開始を検出する方法 - MetaTrader 4用の実用的なコード

첨부파일
39104.zip (884 bytes, 다운로드 0회)

トレーダーの皆さん、こんにちは!今日は、MetaTrader 4で新しいバーやキャンドルの開始を検出する方法についてお話ししましょう。特に、エキスパートアドバイザー(EA)を使用している方には役立つ内容です。

通常、MetaTraderのターミナルでは、新しいティックの価格が到着すると、デフォルトのイベント処理関数であるOnTick()が呼び出されます。しかし、残念ながら、新しいバーが開始またはオープンした時のデフォルトのイベント処理関数は存在しません。

そこで、新しいバーの開始を検出するためには、現在の最も最近のバーのオープン時間を監視する必要があります。オープン時間が変わった時、それが新しいバーの開始を示します。以下に、MQL4MQL5の両方に対応したサンプルコードを示します。

// デフォルトのティックイベントハンドラ
   void OnTick()
   {
      // 新しいバーのチェック(MQL4とMQL5両方に対応)
         static datetime dtBarCurrent  = WRONG_VALUE;
                datetime dtBarPrevious = dtBarCurrent;
                         dtBarCurrent  = iTime( _Symbol, _Period, 0 );
                bool     bNewBarEvent  = ( dtBarCurrent != dtBarPrevious );

      // 新しいバーのイベントに反応して処理を行う
         if( bNewBarEvent )
         {
            // 最初のティックを受信したかどうかを検出し、処理を行う
               /* 例えば、チャートに最初に添付されたとき、バーが進行中で、実際には新しいバーの開始ではない場合。 */
               if( dtBarPrevious == WRONG_VALUE )
               {
                  // 最初のティックまたはバーの途中で何かをする ...
               }
               else
               {
                  // 通常のバーの開始時に何かをする ...
               };

            // 上記の条件に関わらず、何かをする ...
         }
         else
         {
            // 他の処理を行う ...
         };

      // その他の処理 ...
   };

このコードでは、static変数を使用して、バーのオープン時間を記録します。関数を抜ける際にもデータを保持し、現在のバーのオープン時間の変化を検出するための重要な要素です。

また、EAが初めてチャートに配置されたとき、このコードは新しいバーが開いたかのように反応します。この場合は、特別な処理が必要になりますので注意が必要です。

最後に、私のCodeBaseの出版物のソースコードは、現在MetaEditorの「Public Projects」タブでも入手可能です。ぜひ、探してみてください!

연관 포스트

댓글 (0)