Discussão do artigo "Expert Advisor Universal: Integração com os Módulos de Sinais Padrão do MetaTrader (parte 7)"

 

Novo artigo Expert Advisor Universal: Integração com os Módulos de Sinais Padrão do MetaTrader (parte 7) foi publicado:

Esta parte do artigo descreve as possibilidades de integração do motor CStrategy com os módulos de sinais incluídos na biblioteca padrão no MetaTrader. O artigo descreve como trabalhar com sinais, assim como demonstra uma forma de criar estratégias personalizadas com base nas mesmas.

Um conjunto de várias classes que estão incluídas no pacote MetaTrader 5 padrão são utilizados para a geração de estratégias automatizadas usando o Assistente MQL. As classes estão disponíveis como arquivos mqh, localizados em subpastas apropriadas do diretório MQL5\Include. Estas classes (ou módulos) podem ser convencionalmente divididas em várias categorias. Aqui estão elas.

  • Classes básicas para a organização de dados (CObject, CArrayDouble, CArrayObj e outros). Todos os outros módulos para negociação são construídos com base nessas classes.
  • Classes de acesso dos buffers do indicador (CDoubleBuffer, CIndicatorBuffer). Por conseguinte, eles são utilizados para trabalhar com indicadores.
  • Classes de indicadores e classes TimeSeries baseadas na classe comum CSeries .
  • A classe básica CBaseExpert e CExpert são derivadas dela. Todos os módulos auxiliares são baseados na CBaseExpert - por exemplo, o módulo de cálculo do capital e o módulo de controle do trailing stop. A CExpert é a base de todos os Expert Advisors customizados.
  • Módulos de sinal com base na CExpertSignal, que por sua vez se baseia na CErtBase. Os módulos de sinais geram negociações de sinais de Compra e Venda. Utilizam-se as classes dos indicadores, no qual se baseiam os sinais.
  • O módulo de negociação CExpertTrade. É baseado na classe CTrade e fornece acesso à execução de operações de negociação.

O diagrama abaixo mostra o esquema geral de herança vertical das classes usadas no processo de geração automática das estratégias:

 

Fig. 1. A herança de classes padrão do gerador de estratégias

Autor: Vasiliy Sokolov

 

Vasily, interessante como sempre. Em primeiro lugar, do ponto de vista da programação... embora o que mais se pode esperar de um fórum MQL....

Uma pequena observação :-)))

A herança geralmente é desenhada de baixo para cima. Mais ou menos assim:



 
Escrevi algo semelhante no mql4 em um único arquivo e sem usar bibliotecas de terceiros, de modo que, para gerar um sinal, o usuário pode construir uma árvore livre de relações entre 70 elementos para dez indicadores personalizados; coletar o resultado das condições construídas a partir desse jardim é muito divertido, mas acabou sendo algo realmente universal.
 
Dennis Kirichenko:

Vasily, interessante como sempre. Em primeiro lugar, do ponto de vista da programação... embora o que mais se pode esperar de um fórum MQL....

Uma pequena observação :-)))

A herança geralmente é desenhada de baixo para cima. É isso mesmo:

Eu não sabia. Acho que sou canhoto, então entendi ao contrário:)
 
Aleksey Semenov:
Escrevi algo semelhante no mql4 com um arquivo e sem usar bibliotecas de terceiros, de modo que, para gerar um sinal, o usuário pode construir uma árvore livre de relações entre 70 elementos para dez indicadores personalizados; coletar o resultado das condições construídas a partir desse jardim é muito divertido, mas acabou se tornando algo realmente universal
Você pode ver o protótipo?
 
Aleksey Semenov:
Escrevi algo semelhante no mql4 com um arquivo e sem usar bibliotecas de terceiros, de modo que para gerar um sinal o usuário pode construir uma árvore livre de relações entre 70 elementos para dez indicadores personalizados, para coletar o resultado das condições construídas a partir de tal jardim é muito divertido, mas acabou sendo algo realmente universal.
Sim, estou inclinado ao fato de que um gerador de estratégia universal deve ser escrito com base em uma árvore, mas a tarefa é bastante difícil.
 
Pergunta para o público: alguém usa o sistema de sinais do MetaTrader? E quem usa classes de sinal em sua programação de Expert Advisor?
 
Vasiliy Sokolov:
Pergunta para o público: alguém usa o sistema de sinais do MetaTrader? E quem usa classes de sinal em sua programação de Expert Advisors?

Я. Eu sempre faço isso:

  • escrevo um indicador
  • Eu faço um módulo de sinal com base no indicador
  • Ao criar um Expert Advisor, conecto o módulo de sinais necessário.
A princípio, pode parecer que o caminho não é fácil, mas, na verdade, é muito conveniente alterar, modificar os sinais do indicador ou inventar novos sinais.

 
Karputov Vladimir:

Я. Eu sempre faço isso:

  • escrevo um indicador
  • Faço um módulo de sinais com base no indicador
  • Ao criar um Expert Advisor, eu conecto o módulo de sinais necessário.
A princípio, pode parecer que o caminho não é fácil, mas, na verdade, é muito conveniente alterar, modificar os sinais do indicador ou inventar novos sinais.

Uma abordagem realmente completa. Sim, ela tem suas vantagens.

Em geral, muitos desenvolvedores já escreveram seus próprios módulos de sinal. Por que não criar uma base centralizada de tais módulos? Qualquer pessoa pode compartilhar seu módulo e publicá-lo no banco de dados. É claro que o Graal não é para ser regado, mas os benefícios serão óbvios para todos, pois não precisaremos reinventar a roda.

 

Ao inicializar os sinais indicadores:

//+------------------------------------------------------------------+
//| Inicialização do módulo de sinal CSignalMacd
//+------------------------------------------------------------------+
COnSignal_RSI_AC::COnSignal_RSI_AC(void)
{
   MqlSignalParams params;
   params.every_tick = false;
   params.magic = 32910;
   params.point = 10.0;
   params.symbol = Symbol();
   params.period = Period();
   params.usage_pattern = 2;
   params.signal_type = SIGNAL_AC;
   CSignalAC* ac = m_adapter_ac.CreateSignal(params);
   params.usage_pattern = 1;
   params.magic = 32911;
   params.signal_type = SIGNAL_RSI;
   CSignalRSI* rsi = m_adapter_rsi.CreateSignal(params);
   rsi.PeriodRSI(RSI_Period);
}
um módulo de sinal (adaptador) transmite um Magik (32910), o segundo transmite o segundo (32911). Ou seja, um Magik será usado para abrir posições e outro para fechá-las? Ou estou entendendo algo errado?
 
Гога:

Ao inicializar os sinais indicadores:

um módulo de sinal (adaptador) transmite um Magik (32910), o segundo transmite o segundo (32911). Ou seja, um Magik será usado para abrir posições e outro para fechá-las? Ou estou entendendo algo errado?
Nesse caso, os Magiks são membros rudimentares do CExpert, dos quais o próprio sinal é herdado. O sinal não precisa disso, pelo menos no CStrategy, porque ele não coloca ordens pendentes. No entanto, alguns majic são especificados por precaução.