MT4 休日のEA開発 OnTimer()の活用

爆益

EAの開発で困ることは、土日(市場がクローズしているとき)の動作テストだ。レートの動き、オーダー、ポジションクローズのテストは出来ないが、処理がある程度動いていることの確認は「OnTimer()」をつかって動作させればそれなりに確認ができる。

//+------------------------------------------------------------------+
//|                                                   onTimerEA.mq4 |
//|                                   Copyright 2024, bakueki-fx.com |
//|                                           https://bakueki-fx.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, bakueki-fx.com"
#property link      "https://bakueki-fx.com"
#property version   "1.04"
#property strict

//--- input parameters
input int TimerInterval = 10; // タイマー間隔(秒単位)。0以下の場合はタイマー無効、OnTickで処理を実行


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (TimerInterval > 0)
     {
      EventSetTimer(TimerInterval); // 外部入力のタイマー間隔を設定
      Print("Timer enabled with interval: ", TimerInterval, " seconds.");
     }
   else
     {
      Print("Timer disabled. Using OnTick() instead.");
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer(); // タイマーを解除
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if (TimerInterval <= 0) 
     {
      LogTimeInformation(); // TimerIntervalが0以下の場合、OnTick()で動作
     }
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if (TimerInterval > 0)
     {
      LogTimeInformation(); // TimerIntervalが有効の場合、OnTimerで動作
     }
  }
//+------------------------------------------------------------------+
//| Log time information                                             |
//+------------------------------------------------------------------+
void LogTimeInformation()
  {
   datetime serverTime = TimeCurrent();
   datetime gmtTime = TimeGMT();
   datetime localTime = TimeLocal();

       PrintFormat("サーバー時間: %s, GMT時間: %s, ローカル時間: %s", 
               TimeToString(serverTime, TIME_DATE | TIME_SECONDS), 
               TimeToString(gmtTime, TIME_DATE | TIME_SECONDS), 
               TimeToString(localTime, TIME_DATE | TIME_SECONDS));        
               
               
               
  }
タイトルとURLをコピーしました