Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 672

 
fxsaber:
¡¡¡Gracias!!!
 

Estoy escribiendo un EA que funciona en base a la martingala.

¿Cómo puedo conseguir que cierre todas las órdenes que ha abierto cuando se alcanza la pérdida máxima permitida en pips en un par de divisas?

 
RichLux:

Estoy escribiendo un EA que funciona en base a la martingala.

¿Cómo puedo conseguir que cierre todas las órdenes que ha abierto cuando se alcanza la pérdida máxima permitida en pips en un par de divisas?


double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }


la función devuelve los beneficios en posiciones abiertas, se puede filtrar por símbolo, tipo, magik

Luego se cierran todas las posiciones

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
 
Vladislav Andruschenko:

...

la función devuelve los beneficios en poses de octubre, se puede filtrar por símbolo, tipo, magik

A continuación, cierre todas las posiciones

Gracias, pero estoy interesado en cerrar la pérdida. ¿Cómo se puede poner en práctica?
 

Quiero decir, te he dado lo anterior,

Así que el beneficio es un término genérico.

-20 es -20

if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)

 
Vladislav Andruschenko:

double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   double profit=0;
   int    i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic)
                 {
                  profit+=OrderProfit()+OrderCommission()+OrderSwap();
                 }
              }
           }
        }
     }
   return(profit);
  }

Gracias, ahora lo entiendo.

Lo que todavía no está claro en el código es:(order_type<0||OrderType()==order_type) ¿Esto puede leerse como "y orden de venta o compra"?

 
RichLux:

order_type= OP_BUY OP_SELL -1

 

El compilador también se queja deClosePosBySelect.

¿Es necesario escribir esta función por separado?

 
Los comentarios que no son relevantes para este tema se han trasladado a "Poner la hora actual en el gráfico".
 

Vladislav Andruschenko

RichLux:

El compilador también se queja deClosePosBySelect.

¿Es necesario escribir esta función por separado?

void CPD(string order_symbol="",int order_type=-1,int order_magic=-1)
  {
   int i,k=OrdersTotal();

   if(order_symbol=="0") order_symbol=Symbol();
   for(i=k-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
              }
           }
        }
     }
  }
Razón de la queja: