Discussão do artigo "Receitas MQL5 - Criamos um buffer circular para calcular rapidamente indicadores numa janela deslizante" - página 2

 
Vasiliy Sokolov:

Entendi perfeitamente seu ponto de vista na primeira vez.

O que é uma "assinatura de alteração de valor"? É um valor que muda na dinâmica. Portanto, é um indicador. Não é necessário desenvolver um buffer de anel para essa finalidade, mas é suficiente criar um algoritmo para calcular o próprio "caráter de mudança" de que você está falando com base em vários desses indicadores de anel.

A assinatura não é um valor. A assinatura é o caráter de mudança de um valor.

Não é importante exibi-la em um gráfico ou criar um indicador a partir dela. É importante que o programa possa ver o caráter da mudança de valor no período atual. É importante criar um mecanismo para extrair essa assinatura da matriz de dados, que é o buffer em anel.

Esse mecanismo é o mais complicado. Você o entenderá se tentar criá-lo.

Se simplesmente traçarmos uma curva em um gráfico, nosso cérebro verá a assinatura da alteração do valor em si. Ele está adaptado para fazer isso.

Mas tente fazer com que um programa veja isso.

 

Para acrescentar:

No momento, os algoritmos de negociação funcionam apenas com valores específicos dos parâmetros do ambiente de mercado. Eles não veem o "comportamento" dos parâmetros observados em diferentes escalas de tempo.

Os Expert Advisors não podem extrair um concentrado significativo do histórico de alterações nos valores registrados em matrizes de dados (buffers em anel, por exemplo).

Os buffers em anel permitem "observar" as alterações nos valores no período atual, mas sem extrair os caracteres das alterações, seu uso é ineficaz.

A presença de um mecanismo para sintetizar assinaturas levará os Expert Advisors de negociação a um novo patamar. O usuário poderá definir a natureza das alterações nos parâmetros do mercado dentro das condições de negociação de seu programa.

O nível e a qualidade desse programa estarão muito acima do que estamos fazendo agora.

 

Artigo interessante.

Quando eu calculo um indicador no MT4 pelas últimas 50 barras, por exemplo, no testador, esse indicador funciona muito mais rápido do que quando é calculado por todas as barras.

Tenho a impressão de que no MT5 essa abordagem(cálculo do indicador pelas últimas n barras) não é muito mais rápida. Quem sabe sobre esse assunto, se é assim ou se estou fazendo algo errado?

 
forexman77:

Artigo interessante.

Quando eu calculo um indicador no MT4 pelas últimas 50 barras, por exemplo, no testador, esse indicador funciona muito mais rápido do que quando é calculado por todas as barras.

Tenho a impressão de que no MT5 essa abordagem(cálculo do indicador pelas últimas n barras) não é muito mais rápida. Quem sabe se isso é verdade ou se estou fazendo algo errado?

Não estou entendendo muito bem o cálculo. Qualquer indicador requer n períodos para seu cálculo. Se n=50, então você o calcula nas últimas 50 barras. E qual é o cálculo em todas as barras?
 
Vasiliy Sokolov:
Não estou entendendo muito bem o cálculo. Qualquer indicador requer n períodos para seu cálculo. Se n=50, então você o calcula nas últimas 50 barras. E qual é o cálculo em todas as barras?


O cálculo nas últimas n barras é o cálculo em 50 barras, e o cálculo em todas as barras é o cálculo em todo o histórico disponível no terminal(Bars-Period_). No MT4, eu uso essa construção:

P=Period_+10;
  
limit=Bars-counted_bars-1;
if (limit > P)limit=P;//ou seja, se o limite for maior que P, então calculamos a partir da barra com o número P
for(int i=limit;i>=0;i--)

O indicador é chamado no Expert Advisor, não em cada barra, mas quando várias condições são acionadas(a chamada do indicador está no corpo de vários operadores condicionais).

No MT5, a velocidade de otimização com essa abordagem não diminui muito.

 
forexman77:

Artigo interessante.

Quando eu calculo um indicador no MT4 pelas últimas 50 barras, por exemplo, no testador, esse indicador funciona muito mais rápido do que quando é calculado por todas as barras.

Tenho a impressão de que no MT5 essa abordagem(cálculo do indicador pelas últimas n barras) não é muito mais rápida. Quem sabe se isso é verdade ou se estou fazendo algo errado?

A única diferença é a velocidade do cálculo inicial para 1000 barras, que é preparado pelo testador. Então, qualquer indicador escrito de forma econômica funcionará com a mesma rapidez, tanto no MT4 quanto no MT5.

 
Andrey Khatimlianskii:

Apenas a velocidade do cálculo inicial para 1.000 barras preparado pelo testador é diferente. Então, qualquer indicador escrito de forma econômica funcionará com a mesma rapidez, tanto no MT4 quanto no MT5.

Por falar em velocidade, o MQL não é feito com um dedo e seus cálculos são muito rápidos. Tão rápidos que não é fácil superar uma solução padrão. Veja o exemplo do ArrayMaximum/ArayMinimum. Ambas as funções encontram o máximo e o mínimo pesquisando completamente a matriz passada. É impossível reduzir esse cálculo porque os elementos da matriz passada são sempre desconhecidos. O artigo apresenta uma variante otimizada da pesquisa de extremos. Devido ao fato de que os valores nela chegam sequencialmente, é possível reduzir a pesquisa escrevendo um algoritmo otimizado. Entretanto, as vantagens dessa opção aparecerão somente em séries suficientemente grandes. Se a série não for grande, com 5-10-20 elementos, os dois algoritmos funcionarão igualmente bem. Quero dizer que, por padrão, os desenvolvedores fornecem soluções muito rápidas e, via de regra, é impossível melhorá-las. Por isso, aconselho enfaticamente os iniciantes a não usarem truques com construções de programação que, segundo eles, podem acelerar o código.
 
Vasiliy Sokolov:
para usar distorções com construções de programação que, segundo eles, podem acelerar o código.

No MT4, com a ajuda dessa torção, a otimização é muitas vezes mais rápida e não me parece que eu possa ver isso. É bem possível que eu esteja fazendo algo errado no MT5.

Talvez não seja o indicador, mas o EA.

 
forexman77:

No MT4, com a ajuda dessa torção, a otimização é muitas vezes mais rápida, e eu não acho que seja assim, eu posso ver isso. É bem possível que eu esteja fazendo algo errado no MT5.

Talvez não seja o indicador, mas o EA.

Vasily estava se dirigindo aos iniciantes. 90% dos usuários do testador e otimizador MT não precisarão dele.
 
forexman77:


O cálculo nas últimas n barras é o cálculo em 50 barras, e o cálculo em todas as barras é o cálculo em todo o histórico disponível no terminal(Bars-Period_). No MT4, eu uso essa construção:

O indicador é chamado no Expert Advisor, não em cada barra, mas quando várias condições são acionadas(a chamada do indicador está no corpo de vários operadores condicionais).

No MT5, a velocidade de otimização com essa abordagem não diminui muito.

Calcular apenas o último valor do indicador, e não recalculá-lo completamente com a chegada de um novo tick, é uma história tão padrão que é estranho que você tenha começado a discuti-la. É duplamente estranho que você fale sobre isso como se fosse um truque que você descobriu. Na realidade, é um padrão para escrever todos os indicadores. Ele também é mencionado na documentação. É por isso que absolutamente todo mundo usa o recálculo na última barra/ tick.