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

Comentário 0