Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 672

 
fxsaber:
Obrigado!!!
 

Estou a escrever uma EA que funciona numa base de martingale.

Como posso conseguir que feche todas as encomendas que abriu quando se atinge a perda máxima permitida em pips de um par de moedas?

 
RichLux:

Estou a escrever uma EA que funciona numa base de martingale.

Como posso conseguir que feche todas as encomendas que abriu quando se atinge a perda máxima permitida em pips de um par de moedas?


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);
  }


a função devolve lucros em posições abertas, pode ser filtrada por símbolo, tipo, magik

Depois fecha todas as posições

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:

...

função devolve lucros em poses de outubro, pode ser filtrado por símbolo, tipo, magik

Depois fechar todas as posições

Obrigado, mas estou interessado em fechar sobre a perda. Como é que isto pode ser implementado?
 

Dei-vos o acima exposto,

Portanto, o lucro é um termo genérico.

-20 é -20

if(GetProfitinCurrency(Símbolo(),-1,-1)<-20)CPD(Símbolo(),-1,-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);
  }

Obrigado, agora compreendo.

O que ainda não está claro no código é:(order_type<0||OrderType()==order_type) ESTE pode ser lido como "e encomendar para vender ou comprar"?

 
RichLux:

simtipo_de_ordem= OP_BUY OP_SELL -1

 

O compilador também se queixa doClosePosBySelect.

Esta função precisa de ser escrita separadamente?

 
Comentários não relevantes para este tópico foram movidos para "Colocar a hora actual no gráfico".
 

Vladislav Andruschenko

RichLux:

O compilador também se queixa doClosePosBySelect.

Esta função precisa de ser escrita separadamente?

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ão: