見出し画像

MagicNumberを指定し、ポジションの含み損益合計を出力する

■処理の概要
指定したMagicNumberのポジションについて、総利益を出力させる

(筆者コメント)
私の場合、いくら以上マイナスになったら、一旦全て決算する等に使っていたりします。
positions_profit(int trade_part)のcase 0 ~ case2の条件を変更することで、複数EAのMagicNumberを指定し、各EA毎の合計損益を表示させたり、必要に応じてポジションを決算したり応用がきくかと思います

int MagicNumber_bid = 1111; // bidマジックナンバー
int MagicNumber_ask = 1112; // askマジックナンバー

OnInit()

特になし

OnTick()

Print(positions_profit(0)); //MagicNumber_bid && MagicNumber_ask の含み損益
Print(positions_profit(1)); //MagicNumber_bid の含み損益
Print(positions_profit(2)); //MagicNumber_ask の含み損益

positions_profit(int trade_part)

//+------------------------------------------------------------------+
//|ポジション含み益取得                                                |
//+------------------------------------------------------------------+
double positions_profit(int trade_part) // 0が全部、1はlongのみ、2はshortのみ
  {
   double sum_profit = 0;

//保有ポジションを一つずつチェックしていく
   for(int i = PositionsTotal() - 1; i >= 0; i--)
     {
      //--- 注文のパラメータ
      ulong position_ticket=PositionGetTicket(i);   // ポジション番号
      ulong magic=PositionGetInteger(POSITION_MAGIC);  // ポジションのMagicNumber

      //選択したポジションの通貨が一致しているかをチェック
      if(PositionGetString(POSITION_SYMBOL) == _Symbol)
        {
         switch(trade_part)
           {
            case 0: //選択したポジションが、実行されているEAのマジックナンバーと同じかどうかチェック
               if(magic == MagicNumber_bid || magic == MagicNumber_ask)
                 {
                  sum_profit += PositionGetDouble(POSITION_PROFIT);
                 }
            case 1: //選択したポジションが、実行されているEAのマジックナンバーと同じかどうかチェック
               if(magic == MagicNumber_bid)
                 {
                  sum_profit += PositionGetDouble(POSITION_PROFIT);
                 }
            case 2: //選択したポジションが、実行されているEAのマジックナンバーと同じかどうかチェック
               if(magic == MagicNumber_ask)
                 {
                  sum_profit += PositionGetDouble(POSITION_PROFIT);
                 }
           }
        }
     }
   return(sum_profit);
  }



MQL5コード一覧はコチラ


この記事が気に入ったらサポートをしてみませんか?