Início Negociação Sistemática Postagem

Como Fechar Todas as Ordens ao Atingir um Percentual de Drawdown no MetaTrader 4

Anexo
14582.zip (2.27 KB, Baixar 0 vezes)

Se você é um trader que busca controlar suas perdas, este código pode ser uma mão na roda. Ele possui funções que permitem fechar todas as ordens abertas assim que o drawdown atingir um percentual específico do saldo da conta.

É simples! Basta inserir o número mágico das ordens (use 0 para controlar todas as ordens) e o percentual máximo de drawdown que você está disposto a aceitar. Assim que esse limite for atingido, o código vai fechar as ordens automaticamente.

Para utilizar esse código, é só chamar a função DD_close.

Confere em anexo o arquivo de cabeçalho deste código junto com o EA que foi desenvolvido com base nele.

// Para usar esta opção, basta chamar a função: ( DD_close )
//+------------------------------------------------------------------+
//|                          Escopo Global                            |
//+------------------------------------------------------------------+
bool Fechar_Todas_V;
//+------------------------------------------------------------------+
//|                         Função Principal                            |
//+------------------------------------------------------------------+
// DD:               Aqui está o percentual de DD, 100 significa nunca fechar ordens.
// Magic_Number:     Seu número mágico de EA, insira 0 para controlar todas as ordens.
void DD_fechar(int DD,int Magic_Number)
  {
   if(DD(Magic_Number)>=DD)
      Fechar_Todas_V=true;
   if(Fechar_Todas_V)
      Fechar_Todas(Magic_Number);
  }
//+------------------------------------------------------------------+
//|                          Verificar Fechamento                             |
//+------------------------------------------------------------------+
void Verificar_Fechar(int Numero_Verific) // verificar fechamento de ordem
  {
   if(Numero_Verific<0) Print("Fechamento da ordem falhou com erro: ",ErrorDescription(GetLastError()));
   else Fechar_Todas_V=false;
  }
//+------------------------------------------------------------------+
//|                          Fechar todas                               |
//+------------------------------------------------------------------+
void Fechar_Todas(int M_N)
  {
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
       Loop++;
       if(OrderSymbol()==Symbol())
        if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
          {
           if(OrderType()==OP_BUY)
              Verificar_Fechar(OrderClose(OrderTicket(),OrderLots(),Bid,100,clrNONE));
           if(OrderType()==OP_SELL)
              Verificar_Fechar(OrderClose(OrderTicket(),OrderLots(),Ask,100,clrNONE));
          }
      }
  }
//+------------------------------------------------------------------+
//|                          Calcular perda                          |
//+------------------------------------------------------------------+
double Perda(int M_N)
  {
   double re=0;
   int Loop=0;
   for(int i=0; Loop<OrdersTotal(); i++)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         Loop++;
         if(OrderSymbol()==Symbol())
            if(OrderMagicNumber()==M_N || OrderMagicNumber()==0)
               re=re+OrderProfit();
        }
   return re * -1;
  }
//+------------------------------------------------------------------+
//| Calcular percentual de drawdown |
//+------------------------------------------------------------------+
double DD(int M_N)   {    return ( 100 / AccountBalance ( ) ) * Perda ( M_N );   } //+------------------------------------------------------------------+

Publicações relacionadas

Comentário (0)