How to select trade, when Magic ID it not part of an Array

 

Hello Team,


I have around 20 different EAs running.
All working well, but some of them are very goos without any loss after yreas of working.

I have created a "master EA" which trails all my open positions.

But now I want to trail those EAs different, which are very productiv.

I know them by the magic ID which is in use.

Actual I use "If magic ID != 123", but whnat to make it easier/better to control with an external file where the "good magic IDs" are stored.

My actual Code is like this:

//+------------------------------------------------------------------+
//|  Benutzereingaben
//+------------------------------------------------------------------+
input string   Info100                    = "+========== Open Order Management ==========+";       // +========== 1 ==========+
input string   Info110                    = "+---------- Trailing Management";                     // -
input double   TrailingStopDistanceBuy    = 18.00;                                                 // Trailing Points Buy, when in Profit
input double   TrailingStopDistanceSell   = 18.00;                                                 // Trailing Points Sell, when in Profit

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {
   return(INIT_SUCCEEDED);   
   }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
   {
   ObjectsDeleteAll(0);
   }
   
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
   {      
   if (CheckOpenPositions() == true)
      {
      ProceedOpenPositionTrailing();
      }
   }
   
//+------------------------------------------------------------------+
//|  EA Functions
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Position Trailing
//+------------------------------------------------------------------+
void ProceedOpenPositionTrailing()
   {
   for(int i=PositionsTotal()-1; i>=0; i--)
      {
      MqlTradeRequest request;
      MqlTradeResult  result;
      ZeroMemory(request);

      ulong    Ticket=PositionGetTicket(i);

      bool     resultModifyPosition    = false;
      double   PositionProfit          = PositionGetDouble(POSITION_PROFIT);
      double   PositionPriceActual     = PositionGetDouble(POSITION_PRICE_CURRENT);
      double   PositionPriceOpen       = PositionGetDouble(POSITION_PRICE_OPEN);
      double   PositionStopLossActual  = PositionGetDouble(POSITION_SL);
      
      if (PositionGetInteger(POSITION_MAGIC) != 10101240)
         {
         if (PositionGetInteger(POSITION_MAGIC) != 230001060)
            {
             if (PositionGetInteger(POSITION_MAGIC) != 240001240)
               {
                if (PositionGetInteger(POSITION_MAGIC) != 40001240)
                  {
                   if (PositionGetInteger(POSITION_MAGIC) != 90001030)
                     {
                     if (PositionProfit > 0)
                        {
                        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
                           {
                           if (((PositionPriceActual-PositionStopLossActual) > TrailingStopDistanceBuy) && ((PositionPriceActual-PositionPriceOpen) > TrailingStopDistanceBuy))
                              {
                              double PositionStopLossNew = PositionPriceActual-TrailingStopDistanceBuy;
                              request.action=TRADE_ACTION_SLTP;
                              request.position=Ticket;
                              request.symbol=_Symbol;
                              request.sl  = PositionStopLossNew;
                              request.tp  = PositionGetDouble(POSITION_TP);
                              resultModifyPosition=OrderSend(request,result);
                              
                              if(resultModifyPosition == true)
                                 {
                                 Print("BUY-Order:", Ticket, " successfully modified. New SL: " , PositionStopLossNew);
                                 }
                              if(resultModifyPosition == false)
                                 {
                                 Print("BUY-Order: ", Ticket, " failed to modify. New SL: " , PositionStopLossNew , "NewError: ", GetLastError());
                                 }
                              }
                           }
               
                        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
                           {
                           if (((PositionStopLossActual-PositionPriceActual) > TrailingStopDistanceSell) && ((PositionPriceOpen-PositionPriceActual) > TrailingStopDistanceSell))
                              {
                              double PositionStopLossNew = PositionPriceActual+TrailingStopDistanceSell;
                              request.action=TRADE_ACTION_SLTP;
                              request.position=Ticket;
                              request.symbol=_Symbol;
                              request.sl  = PositionStopLossNew;
                              request.tp  = PositionGetDouble(POSITION_TP);
                              resultModifyPosition=OrderSend(request,result);
                              
                              if(resultModifyPosition == true)
                                 {
                                 Print("SELL-Order:", Ticket, " successfully modified. New SL: " , PositionStopLossNew);
                                 }
                              if(resultModifyPosition == false)
                                 {
                                 Print("SELL-Order: ", Ticket, " failed to modify. New SL: " , PositionStopLossNew , " Error: ", GetLastError());
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
//+------------------------------------------------------------------+
//|  Check if Position exists
//+------------------------------------------------------------------+
bool CheckOpenPositions()
   {
   bool return_OpenPositionStatus = false;
   int CountPosition=PositionsTotal();

   if (CountPosition > 0)
      {
      return_OpenPositionStatus = true;
      }
   return return_OpenPositionStatus; 
   }

This chapter I want to use in an external file and, if possible, as an array check:

      if (PositionGetInteger(POSITION_MAGIC) != 10101240)
         {
         if (PositionGetInteger(POSITION_MAGIC) != 230001060)
            {
             if (PositionGetInteger(POSITION_MAGIC) != 240001240)
               {
                if (PositionGetInteger(POSITION_MAGIC) != 40001240)
                  {
                   if (PositionGetInteger(POSITION_MAGIC) != 90001030)

Do anyone see a chance to do so and what I have to do?

Thank you all and a good day,

Oliver

 

Hello again,

ChatGPT helps :-).

If some is interested here the shorter/array "way" to select open position:

//+------------------------------------------------------------------+
//|  Benutzereingaben
//+------------------------------------------------------------------+
input string   Info100                    = "+========== Open Order Management ==========+";       // +========== 1 ==========+
input string   Info110                    = "+---------- Trailing Management";                     // -
input double   TrailingStopDistanceBuy    = 18.00;                                                 // Trailing Points Buy, when in Profit
input double   TrailingStopDistanceSell   = 18.00;                                                 // Trailing Points Sell, when in Profit
// Define an array of magic numbers to filter
int            magicFilter[]              = {10101240, 230001060, 240001240, 40001240, 90001030};

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {
   return(INIT_SUCCEEDED);   
   }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
   {
   ObjectsDeleteAll(0);
   }
   
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
   {      
   if (CheckOpenPositions() == true)
      {
      ProceedOpenPositionTrailing();
      }
   }
   
//+------------------------------------------------------------------+
//|  EA Functions
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  Position Trailing
//+------------------------------------------------------------------+
void ProceedOpenPositionTrailing()
   {
   for(int i=PositionsTotal()-1; i>=0; i--)
      {
      MqlTradeRequest request;
      MqlTradeResult  result;
      ZeroMemory(request);

      ulong    Ticket=PositionGetTicket(i);

      bool     resultModifyPosition    = false;
      double   PositionProfit          = PositionGetDouble(POSITION_PROFIT);
      double   PositionPriceActual     = PositionGetDouble(POSITION_PRICE_CURRENT);
      double   PositionPriceOpen       = PositionGetDouble(POSITION_PRICE_OPEN);
      double   PositionStopLossActual  = PositionGetDouble(POSITION_SL);
      
      if (ArrayContains(magicFilter, int(PositionGetInteger(POSITION_MAGIC))))
         {
         return;                
         if (PositionProfit > 0)
            {
            if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
               {
               if (((PositionPriceActual-PositionStopLossActual) > TrailingStopDistanceBuy) && ((PositionPriceActual-PositionPriceOpen) > TrailingStopDistanceBuy))
                  {
                  double PositionStopLossNew = PositionPriceActual-TrailingStopDistanceBuy;
                  request.action=TRADE_ACTION_SLTP;
                  request.position=Ticket;
                  request.symbol=_Symbol;
                  request.sl  = PositionStopLossNew;
                  request.tp  = PositionGetDouble(POSITION_TP);
                  resultModifyPosition=OrderSend(request,result);
                  
                  if(resultModifyPosition == true)
                     {
                     Print("BUY-Order:", Ticket, " successfully modified. New SL: " , PositionStopLossNew);
                     }
                  if(resultModifyPosition == false)
                     {
                     Print("BUY-Order: ", Ticket, " failed to modify. New SL: " , PositionStopLossNew , "NewError: ", GetLastError());
                     }
                  }
               }
   
            if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
               {
               if (((PositionStopLossActual-PositionPriceActual) > TrailingStopDistanceSell) && ((PositionPriceOpen-PositionPriceActual) > TrailingStopDistanceSell))
                  {
                  double PositionStopLossNew = PositionPriceActual+TrailingStopDistanceSell;
                  request.action=TRADE_ACTION_SLTP;
                  request.position=Ticket;
                  request.symbol=_Symbol;
                  request.sl  = PositionStopLossNew;
                  request.tp  = PositionGetDouble(POSITION_TP);
                  resultModifyPosition=OrderSend(request,result);
                  
                  if(resultModifyPosition == true)
                     {
                     Print("SELL-Order:", Ticket, " successfully modified. New SL: " , PositionStopLossNew);
                     }
                  if(resultModifyPosition == false)
                     {
                     Print("SELL-Order: ", Ticket, " failed to modify. New SL: " , PositionStopLossNew , " Error: ", GetLastError());
                     }
                  }
               }
            }
         }
      }
   }

//+------------------------------------------------------------------+
//|  Check if Position exists
//+------------------------------------------------------------------+
bool CheckOpenPositions()
   {
   bool return_OpenPositionStatus = false;
   int CountPosition=PositionsTotal();

   if (CountPosition > 0)
      {
      return_OpenPositionStatus = true;
      }
   return return_OpenPositionStatus; 
   }


//+------------------------------------------------------------------+
//|  Function to check if the array contains a specific value
//+------------------------------------------------------------------+
bool ArrayContains(int &array[], int value)
   {
    for (int i = 0; i < ArraySize(array); i++)
       {
        if (array[i] == value)
            return true;
       }
    return false;
   }


Br, Oliver

[Deleted]  

Please, don't request help for ChatGPT (or other A.I.) generated code. It generates horrible code, mixing MQL4 and MQL5.

Please learn to code manually. Reference the documentation and the programmer's book.