Suma de lotes abiertos

 

Buenos días compañeros, estoy tratando de obtener la suma de lotes abiertos por un EA, pero no sé qué estoy haciendo mal.

Adjunto el fragmento de código, estoy obteniendo el valor del último lote abierto.

Alguien me echa una mano?

//+------------------------------------------------------------------+
//|                                                Suma de lotes.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict


int total=0;
int Magic= 1234;
double Cantidad_lotes_Buy=0.0;
double Cantidad_lotes_Sell=0.0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  
  
  for(total = OrdersTotal()-1; total >= 0; total--)
        {
         if(OrderSelect(total, SELECT_BY_POS, MODE_TRADES) == false)
            break;
         if(OrderSymbol() != Symbol() || OrderMagicNumber() != Magic)
            continue;
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               Cantidad_lotes_Buy = OrderLots();
               break;
              }
           }
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_SELL)
              {
               Cantidad_lotes_Sell = OrderLots();
               break;
              }
           }
        }
        
         Comment ("Buy:  ", Cantidad_lotes_Buy, "   Sell:   ",Cantidad_lotes_Sell);
   
  }
//+------------------------------------------------------------------+
 
Enrique Enguix Vino:

Buenos días compañeros, estoy tratando de obtener la suma de lotes abiertos por un EA, pero no sé qué estoy haciendo mal.

Adjunto el fragmento de código, estoy obteniendo el valor del último lote abierto.

Alguien me echa una mano?

Hola Enrique, 

El problema está en el segundo y tercer break, ya que te sacan del ciclo for, y tampoco estás acumulando la cantidad de lotes.

Te comparto una solución. No la compilé, por tanto no le hice pruebas pero creo que funciona o te servirá de guía. 

Saludos...

//+------------------------------------------------------------------+
//|                                                Suma de lotes.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

int Magic = 1234;

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

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Cantidad_lotes_Buy = 0.0;
   double Cantidad_lotes_Sell = 0.0;
   SumLotes(Cantidad_lotes_Buy, Cantidad_lotes_Sell);
   Comment("Buy:  ", Cantidad_lotes_Buy, "   Sell:   ", Cantidad_lotes_Sell);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SumLotes(double &Cantidad_lotes_Buy, double &Cantidad_lotes_Sell)
  {
   for(int total = OrdersTotal() - 1; total >= 0; total--)
     {
      if(OrderSelect(total, SELECT_BY_POS, MODE_TRADES) == false)
         break;
      if(OrderMagicNumber() == Magic)
        {
         if(OrderType() == OP_BUY)
            Cantidad_lotes_Buy = Cantidad_lotes_Buy + OrderLots();
         else if(OrderType() == OP_SELL)
            Cantidad_lotes_Sell = Cantidad_lotes_Sell + OrderLots();
        }
     }
  }
//+------------------------------------------------------------------+
 
Antonio Simon Del Vecchio:

Hola Enrique, 

El problema está en el segundo y tercer break, ya que te sacan del ciclo for, y tampoco estás acumulando la cantidad de lotes.

Te comparto una solución. No la compilé, por tanto no le hice pruebas pero creo que funciona o te servirá de guía. 

Saludos...

Hola Antonio! Tienes razón. En fin...no sé en qué estaba pensando, no estaba entendiendo bien la lógica de lo que estaba haciendo

Muchas gracias, me has sido de muchísima ayuda. Espero en otra ocasión poder ayudarte yo a ti. Un abrazo, que termines de pasar un buen fin de semana, muchas gracias de nuevo!