MQL5でEAの損益を返す関数

MQL5でEAの直近一定期間の損益を返す関数を作った。

EAの直近一定期間の損益が一定額以上マイナスだった場合はエントリーを避けたいときなどに使える。

環境

  • OANDA MetaTrader 5: 5.00 build 4040
  • MetaEditor: 5.00 build 4040

EAの損益を返す関数

//+------------------------------------------------------------------+
//| EAの損益(2023/11/05動作確認)                                         |
//+------------------------------------------------------------------+
double EAProfit(ENUM_TIMEFRAMES timeframe, // 時間軸
                int bars, // 足の数
                int magic // マジックナンバー
               )
 {
  datetime start=iTime(Symbol(),timeframe,bars); // 開始時間
  datetime end=TimeCurrent(); // 終了時間
  ulong deal_ticket=0; // 取引のチケット
  long deal_magic=0; // 取引のマジックナンバー
  double res=0; // 戻り値
  HistorySelect(start,end);
  for(int i=0;i<HistoryDealsTotal();i++)
    {
    deal_ticket=HistoryDealGetTicket(i);
    deal_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
    if(deal_magic==magic)
      res+=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
    }
  return(res);
 }

使用例

1つのEAに1つのマジックナンバーを割り当てている場合、マジックナンバーごとに損益を集計すればEAの損益を集計できることになる。1つのEAに複数の戦略を組み込み、戦略ごとに1つのマジックナンバーを割り当てている場合、ここではその戦略をEAと見なすことにする。

さて、マジックナンバーが1であるとして、EAの直近で日足20本分(4週間、約1か月)の損益がマイナス10万円以下であればエントリーしないという条件を加えたい場合、以下のようにする。

if(EAProfit(PERIOD_D1,20,1)>-100000 && 他のエントリー条件)
  新規注文;