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
Bravo! Dopo aver corretto un paio di errori, mi hai fatto scendere dal piedistallo anche senza usare ArrayCopy. Scacco matto. :))
for(;;)
a
Ancora uscita via break
P.S. Solo per divertimento, ho eseguito una copia diretta su tutto l'array.Probabilmente vale la pena di cambiare
a
Ancora uscita via break
Funziona più lentamente di:
Se si partecipa a questo concorso senza regole, si dovrebbe copiare il codice del "leader" (attualmente Kuznetsov) e modificarlo in conformità con il comportamento del sistema sopra descritto.
Questo porta ad un guadagno stabile di circa 20 msec dal tempo di esecuzione iniziale di 740 msec:
A proposito, sono curioso di sapere come cambiano i risultati se l'array originale è una serie. ArraySetAsSeries(arr,true)
Se prendiamo questa gara senza regole, copiamo il codice del "leader" (attualmente Kuznetsov) e lo modifichiamo secondo il comportamento del sistema di cui sopra.
Otteniamo un guadagno stabile di circa 20 ms dal tempo di esecuzione originale di 740 ms:
Vale la pena di aggiungere. Se non vi interessa la sequenza degli elementi dell'array. Allora sì, è una variante eccellente. Se è importante mantenere la coerenza, allora è necessario qualcos'altro.
Già che ci siamo, ecco la mia versione:
risultati:
S.S. In linea di principio, il limite di velocità è stato raggiunto. Il prossimo passo è solo la micro-ottimizzazione e l'armeggiare con il ciclo for:
Penso che il risultato di Nikolai sia un uso abile di queste micro-ottimizzazioni.
C'è un array che contiene un insieme di dati di tipo 1,2,3,6,9,5,6,3,25,6,8,7,4 è necessario rimuovere ad esempio i valori 3 e ottenere lo stesso array senza 3 e spazi vuoti nell'output...
Sto cercando il modo più veloce per cancellare un array di valori non necessari...
Mi viene in mente il seguente esempio
Forse c'è un modo più economico e veloce?
Vladimir, perché è necessario?
Da quanto ho capito, deve essere fatto con il buffer dell'indicatore. Ma non sarebbe più logico sostituire i valori vuoti e/o "inutili" con il valore precedente o, per esempio, la media aritmetica dei valori estremi? Allora sarà molto più veloce e la dimensione dell'array rimarrà la stessa.
Vladimir, perché è necessario?
Da quanto ho capito, deve essere fatto con il buffer dell'indicatore. Ma non sarebbe più logico sostituire i valori vuoti e/o "inutili" con il valore precedente o, per esempio, la media aritmetica dei valori estremi? Allora sarà molto più veloce e la dimensione dell'array rimarrà la stessa.
Vladimir, perché è necessario?
Da quanto ho capito, bisogna farlo con il buffer dell'indicatore. Ma non sarebbe più logico sostituire i valori vuoti e/o "inutili" con il valore precedente o la media aritmetica dei valori estremi, per esempio? Allora sarà molto più veloce e la dimensione dell'array rimarrà la stessa.
Quando ci sono più EA con un gran numero di posizioni/ordini aperti in mql4, secondo me, è più facile mantenere l'array con i ticket e controllare se l'ordine è chiuso passando attraverso l'array invece di provare tutte le posizioni aperte con controllo per simbolo e mago. Quindi, se l'ordine è chiuso, dovrebbe essere "cancellato" dall'array. In questi casi, ero solito copiare l'array "in se stesso" e ridurre la dimensione dell'array di uno. Questo è stato suggerito da Vasiliy Sokolov, grazie mille, saprò che non è l'opzione più difficile, perché non ho mai pensato alla velocità. Perché il compito era quello di rimuovere diversi elementi uguali è un'altra domanda...
ps Mentre scrivevo questo, la risposta è già lì. Quindi anche la domanda è già sbagliata... ))))))Quando ci sono più EA con un gran numero di posizioni/ordini aperti in mql4, secondo me, è più facile mantenere l'array con i ticket e controllare se l'ordine è chiuso passando attraverso l'array invece di provare tutte le posizioni aperte con controllo per simbolo e mago. Quindi, se l'ordine è chiuso, dovrebbe essere "cancellato" dall'array. In questi casi, ero solito copiare l'array "in se stesso" e ridurre la dimensione dell'array di uno. Questo è stato suggerito da Vasiliy Sokolov, grazie mille, saprò che non è l'opzione più difficile, perché non ho mai pensato alla velocità. Perché il compito era quello di rimuovere diversi elementi uguali è un'altra domanda...
ps Mentre scrivevo, la risposta è già lì. Si scopre che anche la domanda è già sbagliata... ))))))Allora l'ho capito più o meno.
Se abbiamo un array di ordini, l'ordine non è importante, quindi è più ragionevole usare la variante di Kuznetsov con il riempimento dei "buchi" con valori dalla parte superiore dell'array, in modo da non spostare il resto degli elementi dell'array. Questo è ovviamente più veloce.