MT4/MT5対応の“再現しやすい”EA雛形:ロジック分離とログ設計

目次

目的

後から改善しやすいEAは、ロジックの分離パラメータ化ログの可観測性が鍵です。ここでは雛形の考え方とサンプルを示します。

設計方針

  1. 構造:OnInit / OnTick / OnDeinit と、Signals.mqh(仕掛け)、Filters.mqh(フィルター)、Risk.mqh(ロット計算/SLTP)、Utils.mqh(時間/夏時間/ログ)に分割
  2. パラメータ:全て extern/inputs 化(時間足、指標期間、ATR係数、RR、日次±% など)
  3. ログ:シグナル判定、約定、SL/TP移動、日次停止イベントをCSV出力

サンプル(疑似MQL4)

//+------------------------------------------------------------------+
// EA_Starter.mq4 (骨子)
//+------------------------------------------------------------------+
#property strict
#include <Signals.mqh>;
#include <Filters.mqh>;
#include <Risk.mqh>;
#include <Utils.mqh>;
input double RiskPerTrade = 1.0; // % of balance
input double DailyMaxLoss = 3.0; // % day
input double DailyMaxProfit = 3.0; // % day
input double ATRmultSL = 1.8; // SL = ATR * mult
input double RR = 1.7; // TP = SL * RR
input bool UseBreakEven = true; // TP*0.5 でBE

datetime dayStart;
double dayPnL=0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   dayStart = Utils::DayStartTime();
   Utils::InitLog();
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(Utils::IsNewDay(dayStart))
     {
      dayStart=Utils::DayStartTime();
      dayPnL=0;
     }

   if(Utils::DailyGuard(dayPnL, DailyMaxLoss, DailyMaxProfit))
      return;

   int signal = Signals::Entry(); // 1=BUY, -1=SELL, 0=NONE
   if(signal!=0 && Filters::Pass())
     {
      double slPips = Risk::CalcSLPips(ATRmultSL);
      double lot = Risk::CalcLot(AccountBalance(), RiskPerTrade, slPips);
      Risk::PlaceOrder(signal, lot, slPips, RR, UseBreakEven);
     }

   dayPnL = Utils::UpdateDailyPnL(dayStart);
  }
//+------------------------------------------------------------------+

テストと移行

  1. バックテスト:開発/検証/フォワードのデータ分割
  2. 最適化:指標期間・ATR係数・BEトリガ等は上限/下限を絞る
  3. デモ→少額リアル:同一条件(スプ/手数料/サーバ時刻)の整合

次のアクション


免責

本記事は情報提供のみを目的としています。投資判断はご自身の責任でお願いいたします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次