Início Negociação Sistemática Postagem

Estratégia de Breakout com Funções de Apoio para Firmas de Prop Trading

Anexo
49713.zip (3.14 KB, Baixar 0 vezes)

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

Comentário (0)