Discussão do artigo "Como Criar o Seu Próprio Limite Móvel"

 

Novo artigo Como Criar o Seu Próprio Limite Móvel foi publicado:

A regra básica do negociante - aumente o lucro, corte as despesas! Este artigo considera uma das técnicas básicas, permitindo seguir esta regra - mover o nível de parada de proteção (Nível Stop loss) após aumentar o lucro da posição, ou seja - nível do Limite móvel. Você encontrará o procedimento passo-a-passo para criar uma classe para o limite móvel nos indicadores SAR e NRTR. Todos poderão inserir este limite móvel em seus experts ou usá-los independentemente para controlar posições em suas contas.

Figura 11. Botões e Indicadores na Planilha Após Iniciar o Sample_TrailingStop.

Autor: Dmitry Fedoseev

 

Muito útil. Muito obrigado.


Steven

 

O exemplo final falha com um erro.

 
Especifique qual deles.
 

Programadores, ajudem com o mql5, por favor!!!

É possível usar apenas uma função trailing comum, como no mql4, sem nenhuma classe? Assim como, por exemplo, a função TradeSizeOptimised é implementada em Moving Averages.mq5.

Já pesquisei tudo, em exemplos, artigos, fórum - não encontrei nada. Já estou completamente perdido.... Talvez alguém tenha uma variante pronta, ficarei muito grato!!! - Gostaria de participar do campeonato.

 
Setslav:

Programadores, ajudem com o mql5, por favor!!!

É possível usar apenas uma função trailing comum, como no mql4, sem nenhuma classe? Assim como, por exemplo, a função TradeSizeOptimised é implementada em Moving Averages.mq5.

Já pesquisei tudo, em exemplos, artigos, fórum - não encontrei nada. Já estou completamente perdido.... Talvez alguém tenha uma variante pronta, ficarei muito grato!!! - Gostaria de participar do campeonato.


aqui está

int TrailingStop()
  {
   if(PositionSelect(Symbol())) // selecionar posição
     {
      //MqlTradeRequest m_request;// declarar a estrutura da solicitação para o servidor
      //MqlTradeResult m_result;// declarar a estrutura de resposta do servidor
      double Bid = SymbolInfoDouble(Symbol(), SYMBOL_BID);                         // gravar o preço do lance na variável
      double Ask = SymbolInfoDouble(Symbol(), SYMBOL_ASK);                         // gravar na variável ask price
      double OpenPrice=PositionGetDouble(POSITION_PRICE_OPEN);                     // escrever o preço de abertura da posição na variável
      double PositionSL=PositionGetDouble(POSITION_SL);                            // gravar o nível de stop loss na variável
      double PositionTP=PositionGetDouble(POSITION_TP);                            // gravar o nível de lucro na variável

      if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) // definir o tipo de posição
        {
         if(TrailWhileMinus==true || Bid-OpenPrice>_Point*Trail) // não arrastamos até atingirmos o ponto de equilíbrio com a primeira transferência de parada
           {
            if(Bid-PositionSL>Trail*_Point) //condição básica para a necessidade de mover o stop loss
              {
               //--- gravar dados na estrutura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Bid-Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                              // enviar a solicitação ao servidor
              }
           }
        }
      else
        {
         if(TrailWhileMinus==true || OpenPrice-Ask>_Point*Trail) // não arrastamos até atingirmos o ponto de equilíbrio com a primeira transferência de parada
           {
            if(PositionSL-Ask>Trail*_Point) //condição básica para a necessidade de mover o stop loss
              {
               //--- gravar dados na estrutura
               request.action = TRADE_ACTION_SLTP;
               request.symbol = Symbol();
               request.sl     = NormalizeDouble(Ask+Trail*_Point,_Digits);
               request.tp     = NormalizeDouble(PositionTP,_Digits);
               //---
               return(OrderSend(request,result));                            // enviar a solicitação ao servidor
              }
           }
        }
     }
   return(0);
  }
[Excluído]  
sergey1294:

Aqui está

Presumo (provavelmente não sem razão) que é melhor passar o resultado como um parâmetro :)

Caso contrário, não há como analisá-lo. De alguma forma, isso não é bom...

PS

Eu também criaria duas funções - TrailingStopBuy e TrailingStopSell

 
Interesting:

Presumo (provavelmente não sem razão) que é melhor passar o resultado como um parâmetro :)

Caso contrário, não há como analisá-lo. De alguma forma, isso não é bom...

PS

Eu também criaria duas funções - TrailingStopBuy e TrailingStopSell.

Bem, eu dei um exemplo à pessoa, porque ela já fez seu cérebro escrever um trailing comum, e então a deixei pensar um pouco, que funcionaria sem erros, no testador, em princípio, e essa construção funciona normalmente. na vida real não verificou
[Excluído]  
sergey1294:
Bem, eu dei um exemplo ao homem, porque ele já fez seu cérebro escrever um trailing comum, e então o deixei pensar um pouco, que funcionaria sem erros, no testador, em princípio, e esse design funciona bem. na vida real não verificou
Como exemplo, é claro que funciona, mas se não analisar o resultado, haverá muitos erros (mais cedo ou mais tarde)...
 
sergey1294:

Aqui está.

Obrigado!
 

sergey1294,

Mais uma vez obrigado, tudo funciona!!!

Há mais uma pequena dúvida: como adicionar uma verificação por número mágico à função? Estou tentando inserir essa verificação:

if (OrderGetInteger(ORDER_MAGIC)==EA_Magic)
{
.....
}
....., mas isso interrompe toda a negociação.....