OLP - página 2

 
Interesting:

De facto, com uma abordagem normal, o OOP implementado em MQL5 (juntamente com os recursos do próprio terminal) dará um aumento significativo da velocidade.

A que velocidade de operação se refere, à velocidade do programa ou à velocidade da sua escrita?

 
Integer:

O OOP não aumenta o desempenho. Tem algum benefício - por exemplo, se houver alguma função chamada com alguns parâmetros (digamos, cálculo EMA), uma variável estática é utilizada na função para armazenar o valor EMA anterior. Como a função armazena o último valor com base no qual serão efectuados os cálculos, não pode ser chamada com outros parâmetros (símbolo, prazo, período de alisamento) da próxima vez que a função for chamada, portanto, se a função precisar de ser chamada com parâmetros diferentes, deve ser copiada com um nome diferente ou deve ser utilizada uma variável global passada por referência em vez de uma variável estática. Este é o único caso em que é mais conveniente utilizar um objecto - carrega-se uma instância de objecto, definem-se os seus parâmetros e depois chama-se o método sem parâmetros. Se o objecto incluir métodos, cuja execução não depende de execuções anteriores ou, em geral, de quaisquer parâmetros com os quais o objecto é carregado, não dá mais nada a não ser o consumo de recursos.

Faz, faz, faz mesmo. Mas tudo depende da experiência, imaginação e tortuosidade das mãos do programador (nessa ordem)... :)

E de facto, mesmo que se assuma que o OOP (com a abordagem mais terrível) não aumenta o tempo de execução, ou aumenta-o de forma insignificante (embora eu pessoalmente duvide que esse aumento em 10 vezes possa ser considerado insignificante), continuará a ser mais útil para os criadores SUBSTANDING do que todas as possíveis desvantagens do OOP.

A questão é que a MQL5, se contiver OOP, contribuirá de alguma forma para o desenvolvimento de uma abordagem modular (unidade) da programação, o que não é visto na MQL4 (excepto para bibliotecas). Isto deve-se ao facto de ser conveniente colocar estruturas, classes ou grupos delas em ficheiros separados (módulos) e utilizá-los quando necessário.

Também, devido à abstracção, encapsulamento, herança e polimorfismo, o uso de classes permitirá depurar os blocos prontos (módulos) e não pensar nos seus conteúdos para os utilizar no seu próprio trabalho.

Além disso, a utilização de OOP deve aumentar o nível e a conveniência de utilizar DLLs externas e outros softwares de sintonia em sistemas de comércio.

Combinado com o uso de bibliotecas, isto tornará a vida dos criadores uma dúzia de vezes mais fácil e também acelerará grandemente o desenvolvimento de EAs bastante complexos.

 
Integer:

A que velocidade de funcionamento se refere, à velocidade a que o programa corre ou à velocidade a que é escrito?

Ambos. Os detalhes sobre a velocidade de desenvolvimento estão escritos acima (claro, tudo faz sentido se tiver alguma experiência no desenvolvimento e utilização de aulas)...
 
Interesting:

Faz, faz, faz....

Quem lhe disse isso? Não é verdade. Tudo o resto está correcto.

 
Integer:

Quem lhe disse isso? Não é verdade. Tudo o resto está correcto.

Repito - Aumenta, aumenta, quanto é que aumenta. Mas tudo depende da experiência, imaginação e tortuosidade das mãos do programador (nesta mesma ordem)...

Era uma vez uma comparação da velocidade de inicialização da minha EA, excepto para alguns pequenos detalhes, o código do programa era o mesmo (em MQL5 foi utilizada a biblioteca de migração). E verificou-se que a inicialização da MQL5 foi 2,5 vezes mais rápida em média.

Claro que sei que não é um indicador, mas ainda estou confiante de que a velocidade da MQL5 é 10 vezes mais rápida mesmo agora, usando a abordagem certa.

Pode discutir para sempre, mas tente implementar OnTrade() ouOnChartEvent e tudo se tornará claro. Mas para além destas coisas há muitas outras "guloseimas"...

PS

Evidentemente, existem erros de velocidade no testador de estratégia e indicadores. Mas a seu tempo estas deficiências serão eliminadas pelos criadores do terminal, ou autores de Expert Advisors comerciais.

Além disso, MQ declarou mais de uma vez que a velocidade máxima de execução do código do programa ainda não está disponível (tanto quanto sei ainda)...

 
Aumenta... Aumenta... Tudo o que resta é cantá-la ao som de um mantra com os sinos na mão e vestida de batina. A MQL5 é mais rápida do que a MQL4, não porque suporta objectos.
 
Integer:
Aumenta... aumenta... ...é melhor cantá-la num mantra com os sinos na mão e vesti-la com uma bata.

Inteiro:
MQL5 é mais rápido do que MQL4, não porque suporta objectos.
Mas ainda assim, na maioria dos casos, é mais rápido. Na minha opinião, não é apropriado comparar MQL5 com MQL4 (ou qualquer outra linguagem de programação) em termos de velocidade de trabalho com objectos.
 

Usando a função GetTickCount(), testei Conselheiros Peritos similares com e sem OOP:

Teste my_oop_ea ( com OOP )

RJ 0 Núcleo 1 15:12:15 Tempo de teste = 115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 barras) gerados dentro de 115203 ms (total de barras na história 9199)

RP 0 Core 1 15:12:15 Desconectado


Meu_Primeiro_Teste_EA ( sem OOP )

RH 0 Núcleo 1 15:18:54 Tempo de teste = 90578

CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 ticks (3052 barras) gerados dentro de 90578 ms (total de barras na história 9199)

OU 0 Core 1 15:18:54 Desconectado


A diferença é pequena, mas não a favor do OOP. E em caso de optimização, esta diferença é multiplicada pelo número de execuções, se bem entendi.

Tirei conclusões para mim próprio.

Também comparei a amostra padrão MACD EA para MT5 (com OOP) e para MT4:

Amostra Macd MT5

FO 0 Núcleo 1 18:03:21 Tempo de teste = 126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 barras) gerados dentro de 126016 ms (total de barras na história 545615)


Amostra Macd MT4

18:12:52 2010.06.30 23:59 MACD Amostra EURUSD,M1: Testes de tempo = 64406

Os resultados são surpreendentes - MT5 e MQL com OOP não são apenas comedores de recursos, mas também comedores de tempo.

 

Ao testar diferentes plataformas MT4 e MT5, não se pode tirar conclusões especificamente sobre o OOP. A diferença nos resultados é de 90% devido a diferentes arquitecturas de sistema.

Este artigo foi completado utilizando o método acima descrito. Além disso, o optimizador de código em MQL5 foi desactivado por enquanto - estamos a afiná-lo bem. Quando for activado, os resultados melhorarão imediatamente muitas vezes.

Ontem foi publicado um artigo comparando a velocidade da MQL4 e da MQL5 - recomendo a sua leitura:

A análise MQL5 do desempenho das médias móveis foi publicada:

Desde que o primeiro indicador simples de média móvel foi criado, surgiram muitos indicadores diferentes. Muitos deles baseiam-se num princípio semelhante ou utilizam certas formas de processamento de séries de preços nos seus cálculos. No entanto, a questão da velocidade de cálculo de tais indicadores e da optimização dos algoritmos neles utilizados permanece muitas vezes sem resposta. Este artigo descreve todas as opções possíveis para a utilização de médias móveis, e faz uma análise comparativa de cada uma delas.

Autor: Sergey

 


Uma função com outro parâmetro é claramente mais lenta. É realmente só por causa do parâmetro?

Arquivos anexados:
test.mq5  2 kb