Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non so cosa sia mt4, non funziona nemmeno su win10, penso che sia una buona cosa
Ho modificato l'array.
Ho dovuto usare ArrayCopy , perchéMQL5 giurava che l'array fosse statico.
Se è una gara di velocità, offrirò la mia variante...
La tua variante è effettivamente la più veloce, ma contiene un bug: se tutti gli elementi di un array sono uguali a un filtro, la tua funzione uscirà dall'array.
Offrirò la mia variante, è un po' più lenta della tua:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Sono diversi anni che fai questo tipo di domande. Hai imparato molto? Scusate, ma è evidente che siete ancora al livello dei byte e degli array elementari.
La domanda stessa è formulata in modo scorretto. Il compito non è quello di rimuovere i valori ripetuti (compito del livello GCE) ma in qualcosa di molto più grande, è necessario aggiornare la lista degli elementi validi. Se è così, la domanda dovrebbe suonare completamente diversa. Confondete e ingannate i partecipanti e, prima di tutto, voi stessi: imponete ai partecipanti una soluzione sbagliata in linea di principio e chiedete di renderla efficace.
Non faccio programmazione per il gusto di programmare, non ho l'obiettivo di diventare un mega-programmatore e di essere intelligente sui forum.
Cosa non capite nella domanda: cancellare un array di elementi definiti?
La tua variante è effettivamente la più veloce, ma contiene un bug: se tutti gli elementi di un array sono uguali a un filtro, la tua funzione uscirà dall'array.
Ti suggerisco la mia variante, è un po' più lenta della tua:
2018.11.13 17:16:38.618 massiv v1 (EURUSD,M1) test my=1512090
2018.11.13 17:16:40.083 massiv v1 (EURUSD,M1) test alien=1464941
Sì, grazie. Corretto.
Solo che anche voi avete un errore da qualche parte, perché il checksum non coincide perché manca un elemento da qualche parte. Non ha funzionato dove.
Modificato rimuovendo i passaggi non necessari
In entrambi i casi, ogni elemento viene trascinato al massimo una volta.
Speravo che qualcuno fosse interessato all'approccio DBMS e lo controllasse, non ho aspettato. Ho dovuto farlo io stesso.
Inserito ArrayDeleteValue.mq5 nel tuo checker, è due volte peggio del tuo. Ho pensato al motivo e ho sistemato due righe in modo che un terzo degli elementi venga rimosso invece dello 0,1%.
Ecco come è andata a finire:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementi - 667421; tempo di esecuzione = 108521 microsecondi
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementi - 667421; tempo di esecuzione = 5525 microsecondi
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementi - 667421; tempo di esecuzione = 4879 microsecondi
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementi - 667421; tempo di esecuzione = 14479 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementi - 667421; tempo di esecuzione = 0 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementi - 667421; tempo di esecuzione = 5759 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementi - 667421; tempo di esecuzione = 1542 microsecondi
La variante di Pavlov aveva un errore, ho dovuto commentarlo.
Conclusione: calcolare gli indirizzi in una matrice con una distanza arbitraria tra i loro numeri è ancora peggio che elaborare elementi in una riga, in un dato passo, molto meno il passo 1, il compilatore può ottimizzarlo.
P.S. I compilatori Pascal e Delphi di Borland fanno in modo che a runtime la variabile del ciclo non abbia importanza (in memoria), è messa da qualche parte nei registri della CPU.
Speravo che qualcuno fosse interessato all'approccio DBMS e lo controllasse, non ho aspettato. Ho dovuto farlo io stesso.
Inserito ArrayDeleteValue.mq5 nel tuo checker, è due volte peggio del tuo. Ho pensato al motivo e ho sistemato due righe in modo che un terzo degli elementi venga cancellato invece dello 0,1%.
Ecco come è andata a finire:
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Pastushak: Checksum = 333586; elementi - 667421; tempo di esecuzione = 108521 microsecondi
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Korotky: Checksum = 333586; elementi - 667421; tempo di esecuzione = 5525 microsecondi
2018.11.13 19:45:22.148 Del (GBPUSD.m,H1) variante Fedoseev: Checksum = 333586; elementi - 667421; tempo di esecuzione = 4879 microsecondi
2018.11.13 19:45:22.164 Del (GBPUSD.m,H1) variante Semko: Checksum = 333586; elementi - 667421; tempo di esecuzione = 14479 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Pavlov: Checksum = 998744; elementi - 667421; tempo di esecuzione = 0 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Nikitin: Checksum = 333586; elementi - 667421; tempo di esecuzione = 5759 microsecondi
2018.11.13 19:45:22.179 Del (GBPUSD.m,H1) variante Vladimir: Checksum = 333586; elementi - 667421; tempo di esecuzione = 1542 microsecondi
La variante di Pavlov aveva un errore, ho dovuto commentarlo.
Conclusione: calcolare gli indirizzi in un array con una distanza arbitraria tra i loro numeri è ancora peggio che processare gli elementi in una riga in un determinato passo, tanto più che al passo 1 il compilatore può ottimizzarlo.
P.S. I compilatori Pascal e Delphi di Borland fanno in modo che a runtime la variabile del ciclo non abbia importanza (in memoria), è messa da qualche parte nei registri della CPU.
La versione di Pavlov è stata corretta.
I vostri valori sono strani. Forse hai eseguito lo script dopo il profiling o il debugger senza ricompilare il codice?
È così che funziona per me:
E nella vostra versione genera un checksum errato. E creare un array aggiuntivo non è di alcun beneficio, al contrario, rallenta il processo e consuma risorse aggiuntive.
Solo che nel mio caso è fatto in blocchi usando ArrayCopy, quindi c'è un vantaggio di velocità.