Discussão do artigo "Expert Advisor Universal: Um Trailing Stop Customizado (Parte 6)"

 

Novo artigo Expert Advisor Universal: Um Trailing Stop Customizado (Parte 6) foi publicado:

A sexta parte do artigo sobre o Expert Advisor universal descreve o uso do recurso "Trailing Stop". O artigo irá guiá-lo através de como criar um módulo "Trailing Stop" personalizado com regras unificadas, bem como adicioná-lo ao motor de negociação para gerir automaticamente as posições.

New functions have been added to the trading engine in the sixth part of the article. Now the trading engine supports trailing stops. Each trailing stop is a special class that contains the standardized Modify method that modifies the stop-loss level. It also contains specific data and parameters that configure the trailing moving algorithm. Trailing stop can be used in two ways.

  • The trailing stop operation can be implemented in a trading engine of a strategy or the Autopilot mode can be enabled. In the latter case, a default trailing stop will be automatically applied to a position. No control from the custom strategy side is required in this case. 
  • Trailing stop management on the custom strategy side. In this case the custom strategy manages its own positions using the trailing stop function. This mode allows implementing complex control logic — e.g. use different trailing algorithms for different position types.

Autor: Vasiliy Sokolov

 
Agora tudo funciona - muito bem... tudo de uma vez.... Muito obrigado... eu sabia que, até que a nova versão se tornasse estável, haveria erros... )))))
 
Olá. Excelente trabalho, muito obrigado! Diga-me, você está planejando implementar no mecanismo as abordagens para negociação no MOEX, descritas por você no artigo https://www.mql5.com/pt/articles/1683? Especificamente, estou interessado em analisar a liquidez do mercado e, com base nela, entrar com um desvio especificado (derrapagem máxima).
Как обезопасить себя и своего эксперта при торговле на Московской бирже
Как обезопасить себя и своего эксперта при торговле на Московской бирже
  • 2015.06.18
  • Vasiliy Sokolov
  • www.mql5.com
В статье подробно описываются методы работы, призванные обеспечить безопасность совершения торговых операций на биржевых и малоликвидных рынках, на примере срочной секции Московской биржи. Статья является логическим продолжением статьи "Основы биржевого ценообразования на примере срочной секции Московской биржи", в которой даны теоретические основы биржевой торговли, но носит более практический характер.
 
igorbel:
Olá. Excelente trabalho, muito obrigado! Diga-me, você está planejando implementar no mecanismo as abordagens para negociação no MOEX, descritas por você no artigo https://www.mql5.com/pt/articles/1683? Estou especificamente interessado em analisar a liquidez do mercado e, com base nela, entrar com um desvio especificado (slippage máximo).
A proposta é interessante. Vejamos.
 
//+------------------------------------------------------------------+
//| Fecha a posição atual do mercado, definindo o fechamento.
//| comentário igual a comentário|
//+------------------------------------------------------------------+
bool CPosition::CloseAtMarket(string comment="")
  {
   if(!IsActive())
      return false;
   m_trade.PositionModify(m_id, 0.0, 0.0);
   ENUM_ACCOUNT_MARGIN_MODE mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
   if(mode != ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
      return m_trade.PositionClose(m_symbol);
   return m_trade.PositionClose(m_id);
  }

Você pode me dizer por que m_trade.PositionModify(m_id, 0.0, 0.0) nessa função? Tenho erros de Invalid Stops no registro por causa dessa operação.

 
igorbel:

Você pode me dizer por que m_trade.PositionModify(m_id, 0.0, 0.0) nessa função? Tenho erros de Invalid Stops no registro por causa dessa operação.

Esses são os rudimentos da versão antiga. Obrigado por apontar o problema, ele será corrigido.
 

Não alterei nada, mas ao compilar qualquer um dos módulos de rastreamento, inclusive a classe base, recebo erros:

'CTrailing' - declaration without type  PositionMT5.mqh 48      4
'Trailing' - undeclared identifier      PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 73      20
'Trailing' - object pointer expected    PositionMT5.mqh 74      14
 
bool CTrailingClassic::Modify(void)
  {

   if(CheckPointer(m_position)==POINTER_INVALID)
     {
      string text="Invalid position for current trailing-stop. Set position with 'SetPosition' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   if(m_diff_extremum<=0.0)
     {
      string text="Set points trailing-stop with 'SetDiffExtremum' method";
      CMessage *msg=new CMessage(MESSAGE_WARNING,__FUNCTION__,text);
      Log.AddMessage(msg);
      return false;
     }
   double extremum=FindExtremum(m_position);
   if(extremum == 0.0)return false;
   double n_sl = 0.0;
   if(m_position.Direction()==POSITION_TYPE_BUY)
      n_sl=extremum-m_diff_extremum;
   else
      n_sl=extremum+m_diff_extremum;
   if(n_sl!=m_position.StopLossValue())
      return m_position.StopLossValue(n_sl);
   return false;
  }

Não faria mal verificar se o novo sl está abaixo do preço atual para uma posição comprada e acima do preço atual para uma posição vendida.

 

Olá. Obrigado pelo artigo.

Como posso ajustar o tamanho do lote para cada negociação? Vejo que ele compra apenas um lote


Desde já, obrigado

 

Prezado Sr. Sokolov,

Artigo muito interessante, mas, infelizmente, não consegui instalar um único de seus códigos sem muitos erros de compilação. Tentei todas as 9 partes, mas em vão.

Por isso, minha pergunta: existe uma abordagem específica para instalar seu código?

Muito obrigado

 
A brevidade é a alma da inteligência.
Aceitação, compreensão, interpretação correta, quase não existem mais. Infelizmente