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

 

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.