Olá, pessoal!
Hoje trago uma atualização sobre a Estratégia de Breakout Simples e Eficaz. Neste código, adicionei algumas funções de apoio para desafios de firmas de prop trading.
Para passar um desafio de uma firma de prop, você precisa atender a três critérios principais:
- Lucro alvo
- Não violar a perda máxima diária
- Não violar a perda máxima total
No código, incluí duas funções que verificam o "Lucro alvo" e se estamos "quase violando a perda máxima diária", para que o sistema saia automaticamente de todas as posições e delete todas as ordens pendentes. A questão da "perda máxima" depende muito da sua estratégia e gerenciamento de risco, por isso não será mencionada neste Script MQL5.
//+------------------------------------------------------------------+ //| Funções de Apoio para Firmas de Prop | //+------------------------------------------------------------------+ // Deletar todas as ordens pendentes e sair de todas as posições void ClearAll(string message) { Comment(message); for (int i = OrdersTotal() - 1; i >= 0; i--) { ulong orderTicket = OrderGetTicket(i); if (OrderSelect(orderTicket)) { trade.OrderDelete(orderTicket); } } for (int i = PositionsTotal() - 1; i >= 0; i--) { ulong posTicket = PositionGetTicket(i); trade.PositionClose(posTicket); } } // Verifica se atingimos o lucro alvo bool isPassed() { return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA; } // Verifica se estamos prestes a violar a perda máxima diária bool isDailyLimit() { MqlDateTime date_time; TimeToStruct(TimeCurrent(), date_time); int current_day = date_time.day, current_month = date_time.mon, current_year = date_time.year; // Saldo atual double current_balance = AccountInfoDouble(ACCOUNT_BALANCE); // Obter o PL das trades fechadas hoje HistorySelect(0, TimeCurrent()); int orders = HistoryDealsTotal(); double PL = 0.0; for (int i = orders - 1; i >= 0; i--) { ulong ticket=HistoryDealGetTicket(i); if(ticket==0) { Print("HistoryDealGetTicket falhou, nenhuma história de trade disponível"); break; } double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT); if (profit != 0) { // Obter a data e hora do deal MqlDateTime deal_time; TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time); // Verificar o horário do deal if (deal_time.day == current_day && deal_time.mon == current_month && deal_time.year == current_year) { PL += profit; } else break; } } double starting_balance = current_balance - PL; double current_equity = AccountInfoDouble(ACCOUNT_EQUITY); return current_equity < starting_balance - DAILY_LOSS_LIMIT; }
Os parâmetros que precisamos especificar são:
input string dd = "-------------DESAFIO DE FIRMA DE PROP-----------------"; input bool isChallenge = false; input double PASS_CRITERIA = 110100.; input double DAILY_LOSS_LIMIT = 4500.;
Espero que você encontre valor neste script.
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
- Como Integrar Eventos de Alto Impacto do ForexFactory no Seu EA para MetaTrader 4
- Trader Automático: RSI e MFI com Otimização Automática para MetaTrader 4
- Hedger: Ferramenta de Order-Placement para MetaTrader 4