Errori, bug, domande - pagina 2276

 

Quando ho bisogno di riempire una parte di un grande array con un singolo valore Z, uso il costrutto

ArrayInitialize(ar,Z);     // промежуточный массив размер массива ar = 1000 
ArrayCopy(arr,ar,5000);    // основной массив заполняется значением Z c 5000 по 5999 элемент


Molti commercianti diranno perché è così complicato, può essere più semplice:

ArrayFill(arr,5000,1000,Z);

Ma per qualche ragione sconosciuta, la prima variante che usa un array intermedio è notevolmente più veloce della seconda

2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 338
2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 111
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 301
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 122
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 334
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 142
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 364
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 156

Ho già scritto su questo tema a CA un paio di anni fa. Ho ricevuto una risposta che diceva che avevo trovato e risolto il problema e che sarebbe stato ok nella prossima build.

Ma il problema persiste.

Ho lo stesso test in MT4:

2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayInitialize + ArrayCopy = 113
2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayFill = 78
File:
 
Nikolai Semko:

Quando ho bisogno di riempire una parte di un grande array con un singolo valore Z, uso il costrutto


Molti commercianti diranno perché è così complicato, può essere più semplice:

Ma per qualche ragione sconosciuta, la prima variante che usa un array intermedio è notevolmente più veloce della seconda

Ho già scritto su questo tema a CA un paio di anni fa. Ho ricevuto una risposta che diceva che avevo trovato e risolto il problema e che sarebbe stato ok nella prossima build.

Ma il problema persiste.

Ho lo stesso test in MT4:

Forse questo è un buon posto per fare il check-in.

 
Artyom Trishkin:

Forse questo è un buon posto per fare il check-in.

Che particolarità e sottigliezza!
L'importante funzione standard di lavorare con gli array nel linguaggio di trading algoritmico più veloce del mondo è 4 volte più lento che nell'obsoleto linguaggio MQL4.
Solo qui.

E' un chiaro bogey.
Riuscite a immaginare quanti programmi falliranno quando sarà riparato?
 
Nikolai Semko:

Che particolarità e sottigliezza!
L'importante funzione standard di lavorare con gli array nel linguaggio di trading algoritmico più veloce del mondo è 4 volte più lento che nell'obsoleto linguaggio MQL4.
Solo qui.

E' un chiaro bogey.
Riuscite a immaginare quanti programmi saranno colpiti quando sarà risolto?

Bene.

Ma come caratteristica al momento - è una cosa negativa?
 
Artyom Trishkin:

Bene.

Ma come caratteristica al momento - è una cosa negativa?
Sì, probabilmente ho esposto il problema in modo scorretto. Sembrava che stessi parlando della sua soluzione.
Certo che no. Stavo cercando di formulare il problema. L'opzione dell'array intermedio non è affatto una soluzione al problema, perché richiede più tempo per l'esecuzione di quanto dovrebbe in base alla logica della memoria, e porta anche a un consumo aggiuntivo di memoria.
 
Artyom Trishkin:

Bene.

Ma come caratteristica al momento - è una cosa negativa?

Aneddoto.

Un vecchio va dal medico. Egli dice:

- Dottore, mi fa male la schiena.

- Piegati. Fa male?

- Fa male.

- Piegati di più!

- Ecco, così va meglio...

- Ecco! È così che si cammina!

)))))

 
Nikolai Semko:

Quando ho bisogno di riempire una parte di un grande array con un singolo valore Z, uso il costrutto


Molte persone diranno perché è così complicato - può essere più semplice:

Ma per qualche ragione sconosciuta, la prima variante che usa un array intermedio funziona molto più velocemente della seconda

Non capisco! Perché avevate bisogno di riempire parte di un grande array con un singolo valore Z? Oppure, quali dati assegnate all'array, per quale scopo? Valori di Close, AVG, RSI? Ma non sono presenti nella memoria di MetaTrader dopo il caricamento dell'indicatore? Stavo giocando con l'array 0 e 1 e alla fine ho ottenuto la parola SOS, cioè ho assegnato il valore 0 a S e 1 a O. Naturalmente, potrei inserire Help per un risultato migliore nella seconda dimensione dell'array. Poi controlla il tempo di riempimento per ogni dimensione dell'array. Poi aggiungi tutto e dividi per 4.
 
Bob1Thec:
Non riesco a capire! Perché avevate bisogno di riempire parte di un grande array con un singolo valore Z? Oppure, quali dati assegnate all'array, per quale scopo?
Lo sfondo monocromatico (compresa la trasparenza) di un'immagine è fatto in questo modo.
 
fxsaber:
Lo sfondo monocromatico (compresa la trasparenza) di un'immagine è fatto in questo modo.

più precisamente uno sfondo a gradiente

 
Nikolai Semko:

più precisamente uno sfondo a gradiente

Non ho idea di cosa significhi riempire un array con un singolo valore.