MQL5で取引の損益を返す関数

MQL5で取引の直近の損益を返す関数を作った。

取引の直近の損益がプラスかマイナスか、つまり前回のトレードが勝ちか負けかでトレード間隔を決めたいときなどに使える。

環境

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

取引の損益を返す関数

//+------------------------------------------------------------------+
//| 取引の損益(2023/11/06動作確認)                                       |
//+------------------------------------------------------------------+
double DealProfit(int magic // マジックナンバー
                 )
 {
  datetime start=0; // 開始時間
  datetime end=TimeCurrent(); // 終了時間
  ulong deal_ticket=0; // 取引のチケット
  string deal_symbol=""; // 取引の銘柄
  long deal_magic=0; // 取引のマジックナンバー
  double deal_profit=0; // 取引の損益
  double res=0; // 戻り値
  HistorySelect(start,end);
  //--- 新しい順に検索している点に注意。ここでは最新の取引のみ検索対称としている
  for(int i=HistoryDealsTotal()-1;i>=0;i--)
    {
    deal_ticket=HistoryDealGetTicket(i);
    deal_symbol=HistoryDealGetString(deal_ticket,DEAL_SYMBOL);
    deal_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
    deal_profit=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT);
    //--- 取引の中には損益を含まないものもあるので、損益が0ではないという条件を加える
    if(deal_symbol==Symbol() && deal_magic==magic && deal_profit!=0)
      {
      res=deal_profit;
      break;
      }
    //---
    }
  //---
  return(res);
 }

使用例

マジックナンバーが1であるとして、直近の取引が勝ちの場合は日足で1本後にエントリー、負けの場合は日足で5本後にエントリーするという条件を加えたい場合、以下のようにする。

if((DealProfit(1)>0 && 日足でエグジットしてからのバー数>=1) || (DealProfit(1)<0 && 日足でエグジットしてからのバー数>=5 || DealProfit(1)==0) && 他のエントリー条件)
  新規注文;