Discussão do artigo "Expert Advisor Universal: Ordens Pendentes e Suporte para Cobertura de Risco (Parte 5)"
Solicitação ao autor. Sua abordagem é extremamente conveniente ao escrever TC. Tudo o que é supérfluo fica escondido dos olhos, o que não pode deixar de agradar. Qual é a recompensa por isso?
Se eu escrever um TC de impulso usando o método clássico e o seu, quanto mais lento o seu método será no testador?
Não há dúvida de que seu código será mais bonito, conciso, conveniente e universal.
Você já oferece suporte a TCs com vários símbolos (onde está o OnTick com vários símbolos)?
//|Classe geradora para gerenciar estratégias do tipo CStrategyUm erro de digitação.
Pareceu-me pouco inteligente definir apenas CStrategyList::OnChartEvent e, em seguida, chamá-lo apenas no OnChartEvent nativo.
Eu teria criado uma classe base com um OnChartEvent virtual. E absolutamente todas as classes CStrategyList, CStrategy e outras (a propósito, você não herda indicadores de nada por algum motivo) seriam derivadas da classe base. E no OnChartEvent nativo, você deve chamar uma vez em um loop todos os OnChartEvent virtuais que foram criados.
Vejo que você está usando bibliotecas escritas por desenvolvedores. Por exemplo, Arrays. Elas são escritas normalmente?
Você tem isso em todo o seu código-fonte
#include <Strategy\Message.mqh>Isso pressupõe que eu não tenha uma pasta Strategy para outras necessidades. Por que você não usa vírgulas invertidas nos elementos de inclusão quando isso é permitido? E por que não fazer
#include <Sokolov\Strategy\Message.mqh>
Pareceu-me pouco inteligente definir apenas CStrategyList::OnChartEvent e, em seguida, chamá-lo apenas no OnChartEvent nativo.
Eu teria criado uma classe base com um OnChartEvent virtual. E absolutamente todas as classes CStrategyList, CStrategy e outras (a propósito, você não herda indicadores de nada por algum motivo) seriam derivadas da classe base. E no OnChartEvent nativo eu escreveria uma chamada em um loop de todos os OnChartEvent virtuais que foram criados.
Sim, isso provavelmente é mais correto. Agora, o evento OnChartEvent é meio que ignorado pelos especialistas. Farei as alterações apropriadas na próxima versão.
Vejo que você usa bibliotecas criadas por desenvolvedores. Por exemplo, Arrays. Elas são bem escritas?
Excelente e são extremamente otimizadas. Ao longo dos anos de uso, todos os algoritmos nelas contidos foram desenvolvidos e ajustados. É por isso que eu os recomendo.
Você tem isso em todo o código-fonte.
Isso pressupõe que eu não tenha a pasta Strategy para outras necessidades. Por que você não usa vírgulas invertidas em inclusões quando isso é permitido? E por que não fazer com que
Os códigos-fonte localizados dentro da pasta Strategy apenas se referem localmente uns aos outros, talvez eu tenha examinado algo, não sei, mas deveria haver referências locais. Os arquivos do Expert Advisor e o próprio módulo Expert Advisor mq5 se referem ao mecanismo globalmente, e isso também está correto, pois é um módulo externo à biblioteca.
Dei uma olhada no EventChartPBarChanged.mqh. Por que o const é ignorado onde é necessário?
Solicitação ao autor. Sua abordagem é extremamente conveniente ao escrever TC. Tudo o que é supérfluo fica escondido dos olhos, o que não pode deixar de agradar. Qual é a recompensa por isso?
Se eu escrever um TC de impulso usando o método clássico e o seu, quanto mais lento o seu método será no testador?
Não há dúvida de que seu código será mais bonito, conciso, conveniente e universal.
Você já oferece suporte a TCs com vários símbolos (onde está o OnTick com vários símbolos)?
O tempo principal no testador de estratégia é gasto no trabalho de sua infraestrutura (rolagem de barra, emulação do ambiente de negociação etc.).
Por outro lado, a análise de perfil mostrou que os principais métodos que consomem muitos recursos do CSTartegy são os métodos BuyInit, SellInit, BuySupport e SellSupport, ou seja, a própria lógica do Expert Advisor. Todos os outros métodos são compilados com sucesso em um código plano de forma otimizada ou simplesmente cortados se não forem usados. É por isso que a programação OOP de alto nível é justificada.
Observe que, em Expert Advisors mais ou menos complexos com muitas regras e infraestrutura pesada, a programação em uma forma inicialmente plana (sem funções e OOP) levará a erros inevitáveis do programador e, como consequência, o desempenho desse Expert Advisor será ainda menor do que com OOP. Os tempos do assembler acabaram. O compilador há muito tempo derrotou o ser humano em determinadas áreas de otimização. Cabe ao ser humano definir uma arquitetura inicialmente competente e escalável com um número mínimo de interfaces e boa capacidade de gerenciamento.
.
Não seria melhor adicionar apenas um MqlTick?
O vídeo do artigo não é visível em nenhum navegador.
A propósito, uma ideia interessante. Por algum motivo, não pensei nisso.
Há problemas com o vídeo. Na nova versão do site, o flash foi recusado. Agora, somente no yuteb é possível assistir a vídeos. Levará algum tempo para publicarmos vídeos, mas vamos resolver isso em breve.
Os códigos-fonte localizados dentro da pasta Strategy se referem uns aos outros localmente, talvez eu tenha examinado algo, não sei, mas deveria haver referências locais. Os arquivos do Expert Advisor e o próprio módulo Expert Advisor mq5 se referem ao mecanismo globalmente, e isso também está correto, pois é um módulo externo à biblioteca.
Verificado. Dê uma olhada no MoneyManagment.mqh.
Referência global do mq5 - entendo perfeitamente a necessidade. Mas você reservou a pasta Include/Stategy com suas soluções. E eu uso essa pasta para minhas próprias necessidades. E não quero ver o mqh de outras pessoas nela. Seria lógico se você movesse toda a sua infraestrutura para Include\Sokolov/Strategy, Include\Sokolov/Strategy, Include\Sokolov/Panel, etc.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Expert Advisor Universal: Ordens Pendentes e Suporte para Cobertura de Risco (Parte 5) foi publicado:
Este artigo fornece uma descrição mais detalhada do mecanismo de negociação CStrategy. Por demanda popular dos usuários, nós adicionamos funções de apoio as ordem pendente no mecanismo de negociação. Além disso, a versão mais recente do MetaTrader 5 agora oferece suporte a contas com a opção de cobertura (hedge). O mesmo suporte foi adicionado ao CStrategy. O artigo fornece uma descrição detalhada de algoritmos para o uso de ordens pendentes, bem como dos princípios de funcionamento da classe CStrategy nas contas com a opção de cobertura (hedge) habilitada.
Analisamos o uso de ordens pendentes e agora podemos criar um Expert Advisor completo que utiliza as possibilidades do motor de negociação. Nossa estratégia será baseada em entradas durante fortes movimentos do mercado na direção do movimento, por isso vai ser chamado de CImpulse. Na abertura de cada nova barra, o EA vai medir uma distância predefinida a partir da barra atual, expresso em porcentagem. O EA vai colocar ordens pendentes BuyStop e SellStop a uma distância igual a partir do preço atual. A distância é definida por uma porcentagem. Se uma das ordens for acionada dentro da barra, isso significa que o preço se moveu uma distância bastante longa, indicando o impulso do mercado. A ordem será executada e a posição estará aberta.
Posições abertas serão geridas por uma média móvel simples. Se o preço retorna para a Média Móvel, a posição será fechada. A imagem abaixo mostra uma entrada típica de posição comprada em cima do desencadeamento de uma ordem pendente BuyStop:
Fig. 1. Uma posição comprada da estratégia CImpulse.
Autor: Vasiliy Sokolov