
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
In sostanza, tutti gli algoritmi sono uguali. Tutti modificano l'array elemento per elemento, e tutti si sforzano di ottenere la variante Fedoseev, perché non ha nulla di inutile.
Solo che nel mio caso, è fatto in blocchi usando ArrayCopy, quindi c'è un vantaggio di velocità.
E Pyotr? Si sono tutti "stracciati"? Nessuno ha messo il suo codice nel checker. Mi chiedo come, e fino a che punto, abbia fatto saltare tutti sul tabellone.
Ho pensato alle ragioni e ho corretto due righe in esso per rimuovere un terzo degli elementi, non lo 0,1%.
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.
Oh, capisco cosa vuoi dire. In qualche modo mi sono perso questa frase
Sì, certo che è chiaro, ma ancora, anche quando devo buttare fuori ogni terzo elemento (poi ArrayCopy smette di funzionare per me e le vincite scompaiono) il quadro è diverso:
La variante di Pavlov non funziona davvero, ma avete anche un checksum corretto e uno scorretto.
E che dire di Peter? Li hai fatti a pezzi tutti? Nessuno ha inserito il suo codice nel checker. È interessante come e fino a che punto ha fatto saltare tutti sul tabellone.
Continuo a non capire il suo volo di fantasia. Non ha ancora fornito una funzione pronta. E se lo completo per lui, mi accuserà di nuovo di rifare tutto. ))
Continuo a non capire il suo volo di fantasia. Non ha ancora fornito una funzione pronta. E se lo completo per lui, mi accuserà di nuovo di rifare tutto. ))
Beh, guardando il suo codice da un telefono cellulare ho avuto l'impressione che scrive in modo "diretto". Ecco perché non ha fornito la funzione - fa tutto in fila. E il suo script non è una funzione ma un codice semplice. Naturalmente, un tale script può non implicare una funzione, ma... Penso che gli manchi il goto per i suoi voli :)
Ma questa è solo la mia sensazione.
Corretta la variante di Pavlov.
I vostri valori sono strani. Forse avete eseguito lo script dopo la profilazione o il debug senza ricompilare il codice?
È così che funziona per me:
E nella tua variante dà un checksum sbagliato. La creazione di un array aggiuntivo non è affatto redditizia, al contrario, rallenta il processo e consuma risorse aggiuntive.
Corretto.
L'ho eseguito un paio di volte, i risultati sono penzolanti - il computer è molto occupato, non sarà libero fino a sabato. Meglio controllare con qualcun altro. Ma il checksum ora corrisponde. Per valori superflui molto radi (0,1%)
2018.11.13 21:35:16.888 del_2 (GBPUSD.m,H1) opzione Pastushak: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 418662 microsecondi
2018.11.13 21:35:16.898 del_2 (GBPUSD.m,H1) variante Korotky: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 10683 microsecondi
2018.11.13 21:35:16.918 del_2 (GBPUSD.m,H1) variante Fedoseev: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 9740 microsecondi
2018.11.13 21:35:16.928 del_2 (GBPUSD.m,H1) variante Semko: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 4691 microsecondi
2018.11.13 21:35:16.944 del_2 (GBPUSD.m,H1) variante Pavlov: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 12512 microsecondi
2018.11.13 21:35:16.957 del_2 (GBPUSD.m,H1) variante Nikitin: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 10720 microsecondi
2018.11.13 21:35:16.978 del_2 (GBPUSD.m,H1) variante Vladimir: Checksum = 497057781; elementi - 998984; tempo di esecuzione = 17197 microsecondi
per un terzo
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) variante Pastushak: Checksum = 668222; elementi - 667065; tempo di esecuzione = 65732 microsecondi
2018.11.13 21:57:17.838 del_2 (GBPUSD.m,H1) variante Korotky: Checksum = 668222; elementi - 667065; tempo di esecuzione = 4757 microsecondi
2018.11.13 21:57:17.848 del_2 (GBPUSD.m,H1) variante Fedoseev: Checksum = 668222; elementi - 667065; tempo di esecuzione = 4815 microsecondi
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) variante Semko: Checksum = 668222; elementi - 667065; tempo di esecuzione = 5812 microsecondi
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) variante Pavlov: Checksum = 1001157; elementi - 667065; tempo di esecuzione = 0 microsecondi
2018.11.13 21:57:17.858 del_2 (GBPUSD.m,H1) variante Nikitin: Checksum = 668222; elementi - 667065; tempo di esecuzione = 4749 microsecondi
2018.11.13 21:57:17.868 del_2 (GBPUSD.m,H1) variante Vladimir: Checksum = 668222; elementi - 667065; tempo di esecuzione = 9814 microsecondi
Pavlov si è schiantato di nuovo.
La mia conclusione sulla velocizzazione dei cicli for loop è probabilmente errata per i linguaggi MQL.
E la creazione di un array aggiuntivo dovrebbe ridurre la durata della transazione stessa rimuovendo quelli superflui, mantenendo l'array invariato fino al momento necessario del suo inizio. Finora non si è parlato di conservazione dei dati.
E Peter? Ha "stracciato" tutti? Nessuno ha messo il suo codice nel checker. Mi chiedo come, e fino a che punto, abbia fatto saltare tutti sul tabellone.
Ma sono riuscito a procurarmi la versione di Peter.
È abbastanza compatto e funziona anche correttamente. Complimenti a Pyotr.
Ma in termini di velocità è al secondo posto dalla fine. O il primo posto dalla fine, se non si conta l'originale versione completamente inadatta alla velocità del proprietario di questo thread.
:-) se non si cerca di mantenere l'ordine, il tempo è O(1), il numero totale di passi di tutti i cicli = dimensione dell'array
troppo pigro per codificare :-)
1. Cerca i primi 3 da sinistra a destra.
2. se trovato, allora cercate un non-tre da destra a sinistra, copiatelo al posto del 3.
continuare fino a quando 1,2 si sono intersecati, tagliare l'array per il numero di copie.
idealmente, è esattamente 1/2 di"bubble sorting" :-) se, invece di copiare, fate uno scambio, l'output sarà un array parzialmente ordinato (tutti i 3 terzi spostati a destra)
Più raffinatezza:
Scusa, dicono che sei un buon commerciante, ma un programmatore... anche peggio di me.
1. La variabile interna intera cancellata non è inizializzata, quindi sarà zero, ma non garantito. Nel ciclo, lo spostamento all'indietro non avverrà (la prima volta) per due motivi contemporaneamente - indovinate quale.
2. (soprattutto) prima si spostano gli elementi dell'array, poi si aumenta il valore della variabile cancellata, e poi ci sarà un ciclo e il prossimo spostamento avverrà uno più del necessario. In altre parole, il vostro codice valangherà l'array originale.
Non ci sono elementi extra nell'array:
L'array ha tutti gli elementi non necessari:
Scusa, dicono che sei un buon commerciante, ma un programmatore... anche peggio di me.
Alexei, stai uccidendo un giovane talento...
questo marketer non è stato in grado di iniziare a vendere per 5 anni...e tu dici che è ancora peggio come programmatore :-)