Como identificar um encerramento de operação por STOP LOSS e tomar descisões com base nisso?

 

Olá,


Possuo uma estratégia que, quando encerra a posição em uma operação por STOP LOSS, só pode entrar em novas operações quando o preço toca em um ponto específico (no meu caso, uma média móvel exponencial). 

Entretanto, não consigo achar como fazer um expert advisor que leva isso em consideração.

Agraço muito quem puder me ajudar.


Grato!

 
luizgubarichello:


Contrate um programador para fazer isso é baratinho https://www.mql5.com/pt/job

Aplicativos de negociação para o MetaTrader 5 por encomenda
Aplicativos de negociação para o MetaTrader 5 por encomenda
  • www.mql5.com
preciso criar um robo, para mini indice e mini dolar (com a mesma estrategia), estrategia abaixo. estrategia de entradas em um padrão simples de candle na media com opção virada de mão se houver sinal contrário. que tenha opção de beakeven e stop móvel. tenho um vídeo explicativo da estrategia para facilitar a criação ps1* .: é preciso que...
 
luizgubarichello:

Olá,


Possuo uma estratégia que, quando encerra a posição em uma operação por STOP LOSS, só pode entrar em novas operações quando o preço toca em um ponto específico (no meu caso, uma média móvel exponencial). 

Entretanto, não consigo achar como fazer um expert advisor que leva isso em consideração.

Agraço muito quem puder me ajudar.


Grato!

Você está com dificuldade de como identificar que uma posição fechou no loss?  Ou todo o restante?

 
MrClock:

Você está com dificuldade de como identificar que uma posição fechou no loss?  Ou todo o restante?

Identificar e impedir de entrar em operações futuras até q a condição seja atendida.
 
luizgubarichello:
Identificar e impedir de entrar em operações futuras até q a condição seja atendida.

Um exemplo através do OnTradeTrasaction de como retornar o motivo da transação:

void OnTradeTransaction(const MqlTradeTransaction & trans,
                        const MqlTradeRequest & request,
                        const MqlTradeResult & result)
   {
      if (HistoryDealSelect(trans.deal))
      {
         ENUM_DEAL_ENTRY deal_entry = (ENUM_DEAL_ENTRY) HistoryDealGetInteger(trans.deal, DEAL_ENTRY);
         ENUM_DEAL_REASON deal_reason = (ENUM_DEAL_REASON) HistoryDealGetInteger(trans.deal, DEAL_REASON);
         if(EnumToString(deal_entry) == "DEAL_ENTRY_IN")
            {
               if(EnumToString(deal_reason) == "DEAL_REASON_EXPERT" && EnumToString(trans.deal_type) == "DEAL_TYPE_BUY")
                  {
                     Alert("Buy");
                  }
               else if(EnumToString(deal_reason) == "DEAL_REASON_EXPERT" && EnumToString(trans.deal_type) == "DEAL_TYPE_SELL")
                  {
                     Alert("Sell");
                  }
            }
         else if(EnumToString(deal_entry) == "DEAL_ENTRY_OUT")
            {
               if(EnumToString(deal_reason) == "DEAL_REASON_SL" && EnumToString(trans.deal_type) == "DEAL_TYPE_BUY")
                  {
                     Alert("Sell SL");
                  }
               else if(EnumToString(deal_reason) == "DEAL_REASON_SL" && EnumToString(trans.deal_type) == "DEAL_TYPE_SELL")
                  {
                     Alert("Buy SL");
                  }
               else if(EnumToString(deal_reason) == "DEAL_REASON_TP" && EnumToString(trans.deal_type) == "DEAL_TYPE_BUY")
                  {
                     Alert("Sell TP");
                  }
               else if(EnumToString(deal_reason) == "DEAL_REASON_TP" && EnumToString(trans.deal_type) == "DEAL_TYPE_SELL")
                  {
                     Alert("Buy TP");
                  }               
          } 
      }      
}
Razão: