A multimodularidade de um sistema de negociação é determinada principalmente pela natureza do processo (no caso dos mercados financeiros, o movimento de preços é um processo não estacionário).
E a modelagem de um processo tão complexo (já que o desenvolvimento de EA é sempre uma modelagem de processo) é impossível com a ajuda de um único algoritmo de entrada, mesmo que muito complexo. Para nos aproximarmos do processo em termos de precisão, precisamos de um conjunto de algoritmos (módulos), cada um dos quais é um modelo independente.
A multimodularidade do sistema de negociação é determinada principalmente pela natureza do processo (para os mercados financeiros, o movimento de preços é um processo não estacionário).
E a modelagem de um processo tão complexo (já que o desenvolvimento de EA é sempre uma modelagem de processo) é impossível com a ajuda de um único algoritmo de entrada, mesmo que muito complexo. Para nos aproximarmos do processo em termos de precisão, precisamos de um conjunto de algoritmos (módulos), cada um dos quais é um modelo independente.
Sim, sim, acho que essa abordagem é usada pela maioria das pessoas - elas as implementam por meio de funções e classes e, em casos extremos, simplesmente inserem um trecho de código de outro arquivo. Só estou me perguntando qual é a vantagem do processamento de dados em indicadores em comparação com as abordagens descritas acima.
colocar trall e lossless em dois módulos separados diferentes? Sério?
o autor provavelmente nunca esteve envolvido em otimização, especialmente no Mt4.
A maioria dos autores escreve usando esses métodos, as funções mais simples são colocadas em um módulo separado chamado dezenas de vezes por tick.
Essas soluções aumentam o tempo de otimização de dezenas para milhares de vezes.
Que tese incomum: "O módulo auxiliar (externo) é um indicador", e o autor testou o desempenho e, principalmente, o consumo de recursos de tal projeto?
O artigo nasceu depois que enfrentei um problema com o desempenho de um indicador. Ele consumia recursos e tempo de teste. E como ele era usado para gerar sinais de negociação, em vez dele, criei um módulo externo (um indicador de sinal), que não desenhava nada. Como resultado, o Expert Advisor com o módulo externo "voou", embora todos os cálculos tenham permanecido completos.
Concordo com você que qualquer tecnologia tem suas despesas gerais. Aqui você precisa fazer concessões e escolher o que é mais importante. Às vezes, é mais importante ocultar o algoritmo do que o desempenho. Embora o desempenho diminua com a programação modular, isso não é fundamental. Na figura, eu "pendurei" todos os módulos externos em um gráfico:

Em seguida, verifiquei a carga do próprio Expert Advisor: no modo de operação sem e com módulos externos. O resultado foi satisfatório:

Em seguida, executei-o no testador de estratégias.
Sem módulos externos:
2018.03.26 06:32:23.684 Core 1 EURUSD,M1: 2378530 ticks, 24349 bars generated. Environment synchronized in 0:00:00.140. Test passed in 0:00:07.769 (including ticks preprocessing 0:00:00.171).
E com módulos externos:
2018.03.26 06:33:49.859 Core 1 EURUSD,M1: 2378530 ticks, 24349 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:00:06.349.
Como você pode ver, com módulos externos o teste foi concluído mais rapidamente.
O objetivo do artigo é mostrar como você pode ocultar seus algoritmos usando-os nos códigos de outras pessoas.
O artigo nasceu depois que enfrentei um problema com o desempenho de um indicador. Ele estava consumindo recursos e tempo de teste. E como ele era usado para gerar sinais de negociação, em vez dele, criei um módulo externo (indicador de sinal), que não desenhava nada. Como resultado, o Expert Advisor com o módulo externo "voou", embora todos os cálculos tenham permanecido completos.
Concordo com você que qualquer tecnologia tem suas despesas gerais. Aqui é preciso fazer concessões e escolher o que é mais importante. Às vezes, é mais importante ocultar o algoritmo do que o desempenho. Embora o desempenho diminua com a programação modular, isso não é fundamental. Na figura, eu "pendurei" todos os módulos externos em um gráfico:
Em seguida, verifiquei a carga do próprio Expert Advisor: no modo de operação sem e com módulos externos. O resultado é satisfatório:
Em seguida, executei-o no testador de estratégia.
Sem módulos externos:
E com módulos externos:
Como você pode ver, o teste terminou mais rápido com módulos externos.
O objetivo do artigo é mostrar como você pode ocultar seus algoritmos usando-os nos códigos de outras pessoas.
Obrigado por sua resposta detalhada. Como uma possibilidade de ocultar uma parte do código, talvez seja uma opção. No entanto, quem precisa desse módulo, ou seja, você não pode vendê-lo no mercado, pois os freelancers exigirão o código-fonte. Só resta uma opção - para uso público na Internet, e aqui é proibido publicar arquivos compilados.
A capacidade de acelerar os cálculos devido ao indicador usado - um tópico familiar, que às vezes é realmente conveniente e permite que você se livre dos ciclos no Expert Advisor. Estou começando agora a trabalhar em um indicador desse tipo.
Sim, sim, acho que essa abordagem é usada pela maioria das pessoas - elas a implementam por meio de funções e classes e, em casos extremos, simplesmente conectam um trecho de código de outro arquivo. Só estou me perguntando qual é a vantagem do processamento de dados em indicadores em comparação com as abordagens descritas acima.
É importante distinguir entre:
- modularidade de um programa (quando um modelo simples é dividido em módulos)
- e modularidade de um modelo complexo (em que cada módulo é um modelo independente).
Qualquer indicador tradicional é um modelo simples, e é necessário um modelo complexo,
porque um modelo simples não é suficiente para obter uma representação suficientemente
representação suficientemente precisa do processo.
É importante fazer a distinção entre os dois:
- modularidade do programa (quando um modelo simples é dividido em módulos)
- e a modularidade de um modelo complexo (em que cada módulo é um modelo independente).
Qualquer indicador tradicional é um modelo simples, mas precisamos de um modelo complexo,
porque um modelo simples não é suficiente para obter precisão suficiente
do processo.
Digamos que eu não saiba o que é modularidade de um modelo complexo, então, pelo seu comentário, meu conhecimento não aumentou.
Dê um exemplo de um modelo complexo incorporado ao indicador.
Como não sou profissional, achei o artigo informativo e bom para iniciantes.
Mas, com relação à modularidade, acho que o exemplo não está completo. Parece-me que se, no mesmo exemplo, cada função do módulo principal for escrita em um arquivo separado e, em seguida, com a ajuda da compilação condicional e dos inludes combinados em um único arquivo, isso é escrita modular. Nesse caso, cada parte separada pode ser reescrita sem afetar o código principal.
Por exemplo, em vez do código:
if(on_lot) { // Se houver um módulo adicional double buffer_m1[]; ArraySetAsSeries(buffer_m1,true); if(CopyBuffer(handle_m1,0,0,1,buffer_m1)<0) return; lot=buffer_m1[0]; }
código:
if(on_lot) { LotCulcFuntion(lot);/Esta função é implementada em um arquivo separado. }
P.S. Os nomes dos indicadores modulares no arquivo principal não coincidem com os nomes dos arquivos. No módulo principal, você precisa adicionar "_ind". Por exemplo, deve ser: "Module_training_module_Filter_ind". e não " Module_training_module_Filter".
- 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 Criando EAs multimódulo foi publicado:
A linguagem de programação MQL permite concretizar o conceito de design modular de estratégias de negociação. O artigo mostra um exemplo de criação de um Expert Advisor multimodular que consiste em módulos de arquivo compilados separadamente.
Depois disso, compilamos todos os arquivos e passamos a testar o projeto multimódulo.
Vídeo 2. Compilação dos arquivos gerados do projeto "test"
Criar manualmente um projeto semelhante leva mais de uma hora e, obviamente, é necessário começar pelo módulo principal. Após determinar os módulos externos que mais tarde podem ser conectados ao projeto, prosseguimos com o design e programação. A principal coisa a monitorar são os dados de saída dos módulos auxiliares, dados esses aguardados pelo módulo principal. Como os módulos são indicadores e os buffers de indicador contêm valores de tipo exclusivamente real, no módulo principal é necessário fornecer a conversão de variáveis do tipo real no tipo correspondente ao algoritmo.
Autor: Sergey Pavlov