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));
}