MT4 iMAOnArray e iBandsOnArray effetto del numero di elementi sui calcoli - pagina 7

 
Alexey Viktorov:

Stai dicendo che dopo if(rates_total-i >= rates_total-100);, quando rimangono solo 100 barre da calcolare, la funzione iMAOnArray() ricalcola prima l'array ALL?

No, solo la metà.
 
Alexey Viktorov:

Stai dicendo che dopo if(rates_total-i >= rates_total-100);, quando ci sono solo 100 barre rimaste da calcolare, la funzione iMAOnArray() ricalcola prima TUTTO l'array?

iMAOnArray

Restituisceil valoredell'indicatore tecnico Moving Average calcolato sui dati memorizzati nell'array.

doppioiMAOnArray(
doppioarray[],// array
inttotale,// numero di elementi
intma_periodo,//periodo
intma_shift,// spostamento della media
intma_method,// metodo di mediazione
int shift//shift
);

Parametri

array[]

[in] Array con dati.

totale

[in]Numero di elementi da calcolare. 0 significa tutti gli elementi dell'array.

Esatto, la prima chiamata di iMAOnArray con 0 nel valore di dimensione calcola incondizionatamente l'intero array, e poi sembra che solo l'ultimo o al massimo gli ultimi 2 valori siano calcolati, anche se chissà, potrebbe ricalcolare tutto... Ecco perché sta rallentando. Ecco perché non importa quante barre vuoi ottenere per offset, l'intera matrice viene contata comunque.

 
Sergey Efimenko:

iMAOnArray

Restituisceil valoredell'indicatore tecnico Moving Average calcolato sui dati memorizzati nell'array.

doppioiMAOnArray(
doppioarray[],// array
inttotale,// numero di elementi
intma_periodo,//periodo
intma_shift,// spostamento della media
intma_method,// metodo di mediazione
int shift//shift
);

Parametri

array[]

[Array con dati.

totale

[in]Numero di elementi da calcolare. 0 significa tutti gli elementi dell'array.

Esatto, la prima chiamata di iMAOnArray con 0 nel valore di dimensione calcolerà certamente l'intero array, e poi sembra che solo l'ultimo o al massimo gli ultimi 2 valori siano calcolati, anche se chissà, potrebbe ricalcolare tutto... Ecco perché sta rallentando. Ecco perché non importa quante barre vuoi ottenere per offset, l'intera matrice viene contata comunque.

Quindi, ho sbagliato. E perché non ci sono freni senza i vostri complessi calcoli?
 
Alexey Viktorov:
Allora ho sbagliato. Allora perché non c'è ritardo senza i vostri complicati calcoli?
Questa è la domanda, perché rallenta quando lo si chiama dal codice, ma non quando lo si sovrappone semplicemente al grafico. Beh, solo gli sviluppatori sapranno dove trovare la risposta. Ho un sacco di indicatori complicati nei miei grafici e alcuni di loro usano anche cicli ricorsivi e si suppone che "pensino a lungo", mentre questo è un compito semplice che richiede tanto tempo per il calcolo.
 
Sergey Efimenko:
Questa è la domanda, perché ritarda quando si chiama dal codice, ma non quando si sovrappone semplicemente al grafico. Beh, solo gli sviluppatori sanno dove cercare la risposta. Ho un sacco di indicatori complicati nei miei grafici e alcuni di loro usano anche cicli ricorsivi e si suppone che "pensino a lungo", ma questo è un compito semplice che richiede così tanto tempo per essere calcolato.

Non sto parlando di una semplice sovrapposizione del grafico. Sto parlando del codice di prova. Si chiama lì, non sovrapposto.

Tuttavia, penso di aver battuto la merda copiando parte dell'array. E anche MODE_LWMA ricalcola allo stesso modo in cui conta l'intera matrice.


Il rosso è calcolato su tutta la storia. Il verde sono le ultime 50 barre.

 
Alexey Viktorov:

...

Tuttavia, penso di aver battuto la merda copiando parte dell'array. E anche MODE_LWMA ricalcola allo stesso modo di contare l'intera matrice.

...

Anche lui l'ha battuto.

 
Alexey Viktorov:

Non sto parlando di una semplice sovrapposizione del grafico. Sto parlando del codice di prova. Si chiama lì, non sovrapposto.

Tuttavia, penso di aver battuto la merda copiando parte dell'array. E anche MODE_LWMA ricalcola allo stesso modo di contare l'intera matrice.


Il rosso conta tutta la storia. Il verde sono le ultime 50 barre.

Ho l'impressione che lei legga i miei post parola per parola, o addirittura frase per frase. Vincere cosa? Ho scritto che ho avuto un'idea simile (codice simile con limitazione del calcolo delle barre) immediatamente e l'ho provata e non ho ottenuto alcun aumento di prestazioni perché l'array è ancora calcolato interamente (totale=0), il fatto che si copiano (riempiono il buffer) solo gli ultimi 100 elementi, non cambia il rallentamento dei calcoli, si frena non ottenendo elementi nel buffer, e il calcolo della media dell'array, che o è calcolato interamente (totale=0) o dà come risultato solo i primi N elementi (totale=N), e che ha bisogno degli ultimi, mentre il cambio di direzione di indicizzazione non dà l'effetto desiderato.
 
Sergey Efimenko:
Ho l'impressione che lei legga i miei post parola per parola o addirittura frase per frase. Vincere cosa? Ho scritto che ho avuto un'idea simile (codice simile con limitazione del calcolo delle barre) immediatamente, e l'ho subito provato e non ho ottenuto alcun aumento di prestazioni, perché L'array è ancora calcolato interamente (totale=0), il fatto di copiare (riempire il buffer) solo gli ultimi 100 elementi non rende i calcoli lenti, non è l'immissione di elementi nel buffer, è il calcolo di un array medio, che è o completamente calcolato (totale=0) o mostra risultati solo per i primi N elementi (totale=N), e gli ultimi sono necessari, cambiare la direzione di indicizzazione non dà l'effetto desiderato.

A quanto pare anche i miei messaggi vengono letti... Il codice precedente non va bene, ho capito dove è stato fatto l'errore. L'ultima schermata mostra un approccio diverso, anche se vengono contate solo le ultime 50 barre.

Non ho postato subito il codice aspettandomi reazioni del tipo "non funzionerà comunque" perché... Il codice non è segreto, se vuoi controllare come funzionerà con il tuo indicatore, fammi sapere.

Dmitry Fedoseev:

Anche lui ha vinto.

E si può solo sollevare un polverone. Contate con quanti membri del forum comunicate con questo tono di voce, come ora con me. Vai via, Satana.
 
Alexey Viktorov:

...

Tutto quello che si può fare è fare un po' di confusione. Contate con quanti utenti del forum parlate con quel tono di voce come ora parlate con me. Vattene, Satana.

È così che ho parlato con persone come te. C'è una coalizione di voi qui, lo so.

Anche ieri hai scritto qui sul fallimento dell'approccio della copia dell'array. È stato puntato sulla LWMA - ha funzionato. Non hai abbastanza pigrizia per controllarlo con EMA, e la schiera del santo potere? Hai messo una candela in chiesa?

Continui a lamentarti e a piagnucolare, e ogni volta continui a dire: "Oh, ho sbagliato.

Una lotta. Se tu avessi un po' di buon senso, molto tempo fa avresti visto che la questione di questo argomento è risolta.

Volevi metterti in mostra ancora una volta, ma ti sono saltate le corna e ti sei subito lamentato con Satana. Amico!

 
Alexey Viktorov:

A quanto pare anche i miei messaggi vengono letti... Il codice precedente non va bene, ho capito dove è stato fatto l'errore. L'ultima schermata mostra un approccio diverso, anche se vengono contate solo le ultime 50 barre.

Non ho postato subito il codice aspettandomi reazioni del tipo "non funzionerà comunque" perché... Il codice non è segreto, se vuoi controllare come funzionerà con il tuo indicatore, dimmelo.

Dovevo indovinare che c'è un codice diverso? Sopra c'è anche uno screenshot, dove vengono contate le ultime 100 barre, ma in realtà tutte le barre vengono contate, ma solo 100 vengono copiate nel buffer. Sì e perché non postare subito il codice? Non ci sarebbe stata una tale risposta. Avrei risposto in modo sostanziale: non capisco qual è il punto? Si può vedere immediatamente dal codice cosa sta succedendo, cosa conta e se ci sono i difetti di cui sopra. E cosa ti dà lo schermo? Nient'altro che il risultato, e a proposito del risultato già detto, può essere raggiunto in diversi modi, ma non tutti sono accettabili per il compito in questione - ridurre il tempo di calcolo.
Motivazione: