Discussão do artigo "Assistente MQL5: Como ensinar um EA a abrir ordens pendentes a qualquer preço" - página 2

 

Olá vladimir,


Gostei do artigo. É possível criar um EA que use apenas ordens pendentes para abrir negociações com o uso de outro indicador? Por exemplo, se o preço se mover em uma direção por 5, ele aciona uma compra ou venda independentemente.

 
Tafadzwa Nyamwanza :

Olá vladimir,


Gostei desse artigo, mas é possível criar um EA que use apenas ordens pendentes para abrir negociações com o uso de outro indicador. Por exemplo, se o preço se mover em uma direção por 5, ele aciona uma compra ou venda independentemente.

Tem certeza de que sua pergunta se refere ao artigo MQL5 Wizard: How to Teach an EA to Open Pending Orders at Any Price?

 
Olá, Vladimir.

Sei que este artigo é sobre ordens pendentes, mas como você programa seu EA para abrir uma ordem de mercado?

 
Ayanda Mhlauli:
Olá, Vladimir.

Sei que este artigo é sobre ordens pendentes, mas como você programa seu EA para abrir uma ordem de mercado?

input double             Signal_PriceLevel         =0.0;         // Nível de preço para executar uma transação
 
Não seria suficiente chamar PriceLevel() diretamente dentro do gerador de sinal? Por que você precisa passar o ponteiro *signal para o gerador de sinal?
 

Olá, @Vladimir Karputov - esse artigo foi muito instrutivo, obrigado!

Pessoalmente, acho essa estrutura de OOP em MQL5 bastante interessante para criar bots compondo objetos que representam especialistas, sinais, filtros, indicadores, gerenciadores de risco e assim por diante - uma abordagem muito elegante, na minha opinião, pois favorece a reutilização e a extensibilidade do código sem sacrificar muito o poder... no entanto, devido à sua complexidade, a curva de aprendizado parece bastante íngreme.

De qualquer forma, como estou fazendo a transição exclusivamente para a MQL5 e tenho boa experiência em conceitos/linguagens OOP, estou realmente interessado em adaptá-la para meu próprio uso na prototipagem de novas ideias de negociação e no desenvolvimento de estudos de sistemas de negociação. Tenho estudado e brincado com o código da biblioteca e gostaria de saber qual é a abordagem recomendada como melhor prática para o seguinte:

PERGUNTA: Como você integraria um filtro de tendência para sinais recebidos no expert?

A biblioteca inclui a propriedade CExpertBase::m_trend_type, mas, infelizmente, ela não é realmente usada em nenhum lugar nos exemplos fornecidos com a plataforma. Estou dividido entre duas possibilidades de design... Adicionar um objeto de filtragem de tendências diretamente na minha subclasse de CExpert (veja o trecho de código abaixo), o que poderia oferecer mais controle na tomada de decisões de negociação no nível do especialista. Outra maneira de resolver isso poderia envolver a manipulação dos filtros do meu objeto de sinal principal e, de alguma forma, calcular a tendência e tomar uma decisão dentro da minha subclasse de CSignalExpert, por exemplo, dentro de CSignalWithTrendFilter::Direction(). Ainda não tenho certeza de quais são as vantagens e desvantagens de um método em relação ao outro, e qual deles me proporcionará mais flexibilidade para os requisitos de meus projetos futuros, ou seja, mais reutilização de código sem complicações e menos ajustes em minhas classes de base.

class CExpertWithTrendFilter : public CExpert
{
protected:
   CExpertSignal    *m_trend;   // trabalhar em paralelo com CExpert::m_signal para filtrar os sinais que ele gera
// ...
   virtual bool      Processing(void);
   virtual bool      CheckOpen(void);
// ...
};

bool CExpertWithTrendFilter::Processing(void)
{
   CExpertBase::m_trend_type = (ENUM_TYPE_TREND) m_trend.Direction();   // determinar a tendência atual com base em um objeto especializado derivado do CExpertSignal
   
   m_signal.TrendType(m_trend_type);             // passar o tipo/força da tendência como entrada para m_signal, também subclasse de CExpertSignal
   m_signal.SetDirection();                      // OPÇÃO #1 >>> calcular a direção do sinal, possivelmente levando em consideração a tendência estabelecida acima (ou não)

// ...

   if(CheckOpen())                               // OPÇÃO #2 >>> alternativamente, o tipo/força da tendência pode ser verificado por um especialista antes de abrir uma posição comprada ou vendida
      return(true);

   retun(false);                                 // retornar sem nenhuma operação
}

bool CExpertWithTrendFilter::CheckOpen(void)
{
   if(m_trend_type > TYPE_TREND_FLAT && CheckOpenLong())    // só permite a abertura longa se a direção do filtro de tendência estiver de acordo
      return(true);
   if(m_trend_type < TYPE_TREND_FLAT && CheckOpenShort())   // só permite a abertura de posições vendidas se a direção do filtro de tendência estiver de acordo
      return(true);

   return(false);                                // retornar sem nenhuma operação
}

Agradeço antecipadamente por sua ajuda e recomendações.

 
Mudei para meu mecanismo de negociação há muito tempo Uma tentativa de desenvolver um construtor de EA - é mais flexível.
An attempt at developing an EA constructor
An attempt at developing an EA constructor
  • www.mql5.com
In this article, I offer my set of trading functions in the form of a ready-made EA. This method allows getting multiple trading strategies by simply adding indicators and changing inputs.
 
Vladimir Karputov #:
Mudei para meu mecanismo de negociação há muito tempo Uma tentativa de desenvolver um construtor de EA - é mais flexível.

OK, entendi - estou lendo o artigo e darei uma olhada no código anexado... de qualquer forma, gostaria de receber seu comentário/opinião sobre a pergunta acima, se não se importar. Muito obrigado!

 
Dima Diall # :

OK, entendi - estou lendo o artigo e vou dar uma olhada no código anexado... de qualquer forma, gostaria de receber seu comentário/opinião sobre a pergunta acima, se não se importar. Muito obrigado!

CExpertSignal é o passado. Não há comentários.

 
Vladimir Karputov #:

CExpertSignal é o passado. Nenhum comentário.

:-)