Discussão do artigo "Como adicionar Trailing Stop com o indicador Parabolic SAR"

 

Novo artigo Como adicionar Trailing Stop com o indicador Parabolic SAR foi publicado:

Ao criar uma estratégia de negociação, precisamos testar diversas opções de stops de proteção. Aqui, surge a ideia de ajustar dinamicamente o nível do Stop Loss acompanhando o movimento do preço. O melhor candidato para isso é o indicador Parabolic SAR, porque é difícil pensar em algo mais simples e claro.

O trailing stop é o ajuste automático do StopLoss da posição seguindo o preço, permitindo manter o stop de proteção a uma distância constante do preço. Essa abordagem permite ao trader proteger parte do lucro acumulado, sem sair da posição precocemente. Toda vez que o preço de mercado se afasta do preço de abertura da posição, o trailing stop ajusta automaticamente o StopLoss, mantendo a distância definida entre ele e o preço atual. No entanto, se o preço se aproximar do preço de abertura, o StopLoss permanece no nível anterior. Isso oferece proteção contra perdas em possíveis oscilações do mercado.

Entretanto, se você precisar de uma versão mais específica do trailing stop, sempre pode desenvolver essa função na linguagem MQL5 para aumentar as capacidades da ferramenta padrão.

Há uma função que recebe o preço necessário para definir o nível do StopLoss. O programa verifica alguns fatores impeditivos, como o nível StopLevel — a distância mínima em que os stops podem ser colocados, e o nível FreezeLevel — a distância de congelamento, dentro da qual não é possível modificar uma posição ou ordem pendente. Ou seja, se o preço se aproximar do nível de stop da posição a uma distância menor do que o nível FreezeLevel, espera-se que o stop seja acionado, e a modificação é proibida. Os trailing stops também possuem algumas configurações individuais de parâmetros, que são verificadas antes de mover o nível do stop loss para o preço indicado, como o símbolo e o magic number da posição. Todos esses critérios são verificados diretamente antes de ajustar o StopLoss da posição ao nível especificado.

E um dos melhores "indicadores" dos níveis necessários para o StopLoss é o indicador Parabolic SAR.


Autor: Artyom Trishkin

 
Obrigado pelo artigo interessante. Foi uma leitura rápida. Consegui entender o básico. No meu celular. Em casa, no meu computador, vou me familiarizar com ele com mais detalhes e usar os arquivos incluídos em meus projetos por analogia - mais tarde.
 
Roman Shiredchenko projetos por analogia - mais tarde.

De nada. Em breve, haverá um artigo sobre classes de rastreamento, como uma conclusão lógica deste tópico.

Elas serão usadas, digamos, de forma mais correta e, para mim, mais conveniente.

 

Obrigado pelo artigo,

Mas gostaria que você modificasse isso para evitar erros de truncamento com números fp:

        pos_profit_pt= int ((tick.bid - pos_open) / Point ());              // calcular o lucro da posição em pontos 

Para:

        pos_profit_pt= (int) MathRound((tick.bid - pos_open) / Point ());              // calcular o lucro da posição em pontos 
 
O artigo é completo, mas é muito volumoso para um tópico relativamente pequeno. Nem todo mundo será capaz de lidar com ele.
 
Mas tudo é explicado do início ao fim... É possível conectar outros indicadores para a rede de arrasto, como o MA, por exemplo.
 
Artyom Trishkin #:

De nada. Em breve, será publicado um artigo sobre classes de rastreamento, como uma conclusão lógica deste tópico.

Elas serão usadas, digamos, de forma mais correta e, em minha opinião, mais conveniente.

Obrigado - levei os exemplos para meus robôs:

//--- se não for uma nova barra - sair do manipulador
   if(!IsNewBar())
      return;
и 
//--- definir o número mágico no objeto da classe de negociação
   ExtTrade.SetExpertMagicNumber(InpMagic);

 

Eu mesmo estou analisando esse tópico....

//+------------------------------------------------------------------+
//| Gerenciar posições abertas: Trailing Stop
//+------------------------------------------------------------------+
void ManageOpenPositions(string Sym, int mn)
  {
   if(TrailingStop > 0)
    for(int i = 0; i < PositionsTotal(); i++)
     {
      if(PositionGetSymbol(i)==Sym) // Selecionar e verificar se a posição está no símbolo atual
      if(PositionGetString(POSITION_SYMBOL) == Sym)
      if(PositionGetInteger(POSITION_MAGIC)==mn || mn == -1)
        {
         ulong  ticket = (ulong)PositionGetInteger(POSITION_TICKET);      // Obter o tíquete de posição
...

Também examinarei sua variante proposta no trabalho:

//+------------------------------------------------------------------+
//| Função trailing do StopLoss pelo valor do preço do StopLoss
//+------------------------------------------------------------------+
void TrailingStopByValue(const double value_sl, const long magic=-1, const int trailing_step_pt=0, const int trailing_start_pt=0)
  {
//--- estrutura de preços
   MqlTick tick={};
//--- no ciclo pelo número total de posições em aberto
   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      //--- obter o tíquete da próxima posição
      ulong  pos_ticket=PositionGetTicket(i);
      if(pos_ticket==0)
         continue;
         
      //--- obter símbolo e posição mágica
      string pos_symbol = PositionGetString(POSITION_SYMBOL);
      long   pos_magic  = PositionGetInteger(POSITION_MAGIC);
      
      //--- pular posições que não correspondem aos filtros de símbolo e magia
      if((magic!=-1 && pos_magic!=magic) || pos_symbol!=Symbol())
         continue;
         
      //--- se os preços não foram obtidos - vá além
      if(!SymbolInfoTick(Symbol(), tick))
         continue;
...
 

Alguém pode explicar em detalhes ou postar um código (ou arquivo) pronto de um EA desse tipo?


que faz esse tral.

SEM ROBÔ!

constantemente movendo sl em TODAS as posições abertas MANUALMENTE.