MT4 iMAOnArray e iBandsOnArray efeito do número de elementos nos cálculos - página 7

 
Alexey Viktorov:

Você está dizendo que depois de if(rates_total-i >= rates_total-100); quando restam apenas 100 barras para calcular, a função iMAOnArray() recalcula primeiro a matriz ALL?

Não, apenas a metade.
 
Alexey Viktorov:

Você está dizendo que depois de if(rates_total-i >= rates_total-100); quando restam apenas 100 barras para calcular, a função iMAOnArray() recalcula primeiro a matriz INTEGRAL?

iMAOnArray

Retornao valordoindicador técnico Moving Average calculado sobre os dados armazenados na matriz.

duploiMAOnArray(
duplamatriz[],// matriz
inttotal,// número de elementos
intma_period,//período
intma_shift,// turno de média
método da média,// método da média
int shift//shift
);

Parâmetros

matriz[]

[em] Array com dados.

total

[em]Número de elementos a calcular. 0 significa todos os elementos da matriz.

Isso mesmo, a primeira chamada do iMAOnArray com 0 no valor do tamanho calcula incondicionalmente toda a matriz, e então parece que apenas o último ou no máximo os 2 últimos valores são calculados, embora quem sabe, ele pode recalcular tudo... É por isso que ele está desacelerando. É por isso que não importa quantas barras você queira obter por compensação, todo o conjunto é contado de qualquer forma.

 
Sergey Efimenko:

iMAOnArray

Retornao valordoindicador técnico Moving Average calculado sobre os dados armazenados na matriz.

duploiMAOnArray(
duplamatriz[],// matriz
inttotal,// número de elementos
intma_period,//período
intma_shift,// turno de média
método da média,// método da média
int shift//shift
);

Parâmetros

matriz[]

[em] Array com dados.

total

[em]Número de elementos a calcular. 0 significa todos os elementos da matriz.

Isso mesmo, a primeira chamada do iMAOnArray com 0 no valor do tamanho certamente calculará toda a matriz, e então parece que apenas os últimos ou no máximo os últimos 2 valores são calculados, embora quem sabe, ele possa recalcular tudo... É por isso que ele está desacelerando. É por isso que não importa quantas barras você queira obter por compensação, todo o conjunto é contado de qualquer forma.

Então, eu entendi errado. E por que não há freios sem seus complexos cálculos?
 
Alexey Viktorov:
Então eu entendi errado. Então por que não há atraso sem seus complicados cálculos?
Essa é a questão, por que ele abranda quando você o chama de código, mas não quando você simplesmente o sobrepõe no gráfico. Bem, somente os desenvolvedores saberão onde encontrar a resposta. Tenho muitos indicadores complicados em meus gráficos e alguns deles até usam loops recursivos e eles devem "pensar muito", enquanto esta é uma tarefa simples que leva tanto tempo para ser calculada.
 
Sergey Efimenko:
Essa é a questão, por que ela se atrasa ao chamá-la de código, mas não quando apenas se sobrepõe na tabela. Bem, somente os desenvolvedores sabem onde procurar a resposta. Tenho muitos indicadores complicados em meus gráficos e alguns deles até usam loops recursivos e eles devem "pensar muito", mas esta é uma tarefa simples que leva tanto tempo para ser calculada.

Não estou falando de uma simples sobreposição de gráficos. Estou falando desse código de teste. É chamado lá, não sobreposto.

Ainda assim, acho que já superei essa porcaria ao copiar parte da matriz. E mesmo MODE_LWMA recalcula da mesma forma que a contagem de toda a matriz.


O vermelho é calculado em toda a história. O verde são as últimas 50 barras.

 
Alexey Viktorov:

...

Ainda assim, acho que já superei essa porcaria ao copiar parte da matriz. E mesmo MODE_LWMA recalcula da mesma forma que a contagem de toda a matriz.

...

Ele também já venceu.

 
Alexey Viktorov:

Não estou falando de uma simples sobreposição de gráficos. Estou falando desse código de teste. É chamado lá, não sobreposto.

Ainda assim, acho que já superei essa porcaria ao copiar parte da matriz. E mesmo MODE_LWMA recalcula da mesma forma que a contagem de toda a matriz.


O vermelho conta toda a história. O verde são as últimas 50 barras.

Tenho a impressão de que você está lendo minhas mensagens palavra por palavra, se não sentença por sentença. Vencendo o quê? Escrevi que tive essa idéia (código similar com limitação de cálculo de barras) imediatamente e experimentei e não tive nenhum aumento de desempenho porque a matriz ainda é calculada inteiramente (total=0), o fato de copiar (preencher o buffer) apenas os últimos 100 elementos, não altera os cálculos de desaceleração, freia não obter elementos no buffer, e o cálculo da média da matriz, que ou é calculada inteiramente (total=0) ou dá resultados apenas os primeiros N elementos (total=N), e que precisam do último, enquanto a mudança de direção indexada não dá o efeito desejado.
 
Sergey Efimenko:
Tenho a impressão de que você leu minhas mensagens palavra por palavra ou mesmo sentença por sentença. Vencendo o quê? Escrevi que tive tal idéia (código similar com limitação de cálculo de barras) imediatamente, e imediatamente a experimentei e não obtive aumento de desempenho, porque A matriz ainda é calculada inteiramente (total=0), o fato de copiar (preencher o buffer) apenas os últimos 100 elementos não torna os cálculos lentos, não está colocando elementos no buffer, é o cálculo de uma matriz média, que é calculada inteiramente (total=0) ou apenas dá resultados para os primeiros N elementos (total=N), e os últimos são necessários, mudar a direção da indexação não dá o efeito desejado.

Aparentemente, minhas mensagens também são lidas... O código anterior não se encaixa, eu descobri onde o erro foi cometido. A última captura de tela mostra uma abordagem diferente, embora apenas as últimas 50 barras sejam contadas.

Eu não postei o código imediatamente esperando tais reações como "não vai funcionar de qualquer maneira" porque... O código não é secreto, se você quiser verificar como ele funcionará com seu indicador, me avise.

Dmitry Fedoseev:

Ele também ganhou.

E você só pode agitar uma confusão. Conte com quantos membros do fórum você se comunica com este tom de voz, como agora comigo. Vá embora, Satanás.
 
Alexey Viktorov:

...

Tudo o que você pode fazer é fazer uma confusão. Conte quantos usuários do fórum você já falou com esse tom de voz como se estivesse falando comigo agora. Vá-se embora, Satanás.

É assim que eu tenho falado com pessoas como você. Há uma coalizão de vocês aqui, eu sei.

Ainda ontem você escreveu aqui sobre o fracasso da abordagem de cópia de matriz. Foi apontado para a LWMA - funcionou. Você não tem preguiça suficiente para verificá-lo com a EMA, e o anfitrião do poder sagrado? Você colocou uma vela na igreja?

Você continua soprando e soprando, e toda vez que você continua dizendo: "Oh, eu devo ter cometido um erro".

Uma luta. Se você tivesse um pouco de bom senso, há muito tempo teria visto que a questão deste tópico está resolvida.

Você queria se exibir mais uma vez, mas teve seus chifres arrancados e imediatamente lamentou a Satanás. Caramba!

 
Alexey Viktorov:

Aparentemente, minhas mensagens também são lidas... O código anterior não se encaixa, eu descobri onde o erro foi cometido. A última captura de tela mostra uma abordagem diferente, embora apenas as últimas 50 barras sejam contadas.

Eu não postei o código imediatamente esperando tais reações como "não vai funcionar de qualquer maneira" porque... O código não é secreto, se você quiser verificar como ele funcionará com seu indicador, me diga.

Era para eu adivinhar que existe um código diferente? Acima também há uma captura de tela, onde as últimas 100 barras são contadas, mas na verdade todas as barras são contadas, mas apenas 100 são copiadas para o buffer. Sim e por que não afixar o código imediatamente? Não teria havido tal resposta. Eu teria respondido substantivamente, não entendo qual é o objetivo? Você pode ver imediatamente pelo código o que está acontecendo, o que conta e se existem as falhas acima. E o que a tela lhe dá? Nada além do resultado, e sobre o resultado já dito, ele pode ser alcançado de maneiras diferentes, mas nem todos são aceitáveis para a tarefa em questão - para reduzir o tempo de cálculo.