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
- MACD Sample: Um Guia Prático para o Expert Advisor no MetaTrader 5
- MQL5 Wizard: Sinais de Negócios com 3 Corvos Negros/3 Soldados Brancos + Estocástico para MetaTrader 5
- Baixe Todo o Histórico de Ticks de um Símbolo no MetaTrader 5
- Análise do The MasterMind 3 (Edição Campeonato) para MetaTrader 4
- Como Integrar Eventos de Alto Impacto do ForexFactory no Seu EA para MetaTrader 4