MT5 e la velocità in azione - pagina 25

 
A100:
Naturalmente, nessun esperto/indicatore/script è in esecuzione - solo build manuali. La latenza indicata è riproducibile su qualsiasi tablet moderno medio a 64 bit. Se avete un computer i7, non credo che abbiate riscontrato questo ritardo

è l'apk o l'exe-system che rallenta?

 
Oggi è il giorno di riposo. Solo un simbolo in Market Watch. EA esegue OnTimer una volta al secondo. Ho trovato questo registro.
2020.09.06 00:37:09.187         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 8 ms.
2020.09.06 03:57:17.902         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1731 ms.
2020.09.06 03:57:18.463         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2292 ms.
2020.09.06 03:59:49.233         Alert: Time[MT4Orders.mqh 1788: ::PositionGetTicket(Index)] = 2 ms.
2020.09.06 04:35:54.170         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 04:55:34.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 211 ms.
2020.09.06 05:10:54.387         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 895 ms.
2020.09.06 05:23:20.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:24:41.484         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:47:41.492         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:50:41.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:55:45.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 05:57:32.169         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:17:11.177         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:28:03.184         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:30:22.482         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 06:48:07.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 07:45:12.490         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:23:24.172         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:24:26.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 08:37:57.183         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:08:37.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:12:58.497         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 09:57:20.486         Alert: Ping = 10000.000
2020.09.06 09:57:21.680         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 195 ms.
2020.09.06 09:57:54.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 10:47:56.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:06:21.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:11:50.208         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1023 ms.
2020.09.06 11:11:50.537         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1049 ms.
2020.09.06 11:11:51.502         Alert: Ping = 10000.000
2020.09.06 11:11:52.370         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 187 ms.
2020.09.06 11:19:41.502         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 11:38:00.176         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 13:49:02.493         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:03:28.171         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 14:45:05.175         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 16:43:51.196         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:00:17.494         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:40:02.486         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 17:54:00.180         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.
2020.09.06 18:16:47.173         Alert: Time[NewTicks.mqh 33: ::SymbolInfoTick(_Symbol,Tick)] = 1 ms.

Sull'altro Terminale, l'Ottimizzazione funziona in parallelo su sei Agenti locali su otto possibili.

Se queste sono interruzioni di rete, perché influisce sull'ottenimento dell'ultimo tick dal Market Watch e sull'ottenimento dell'ultimo tick dalla cronologia dei tick?


ZZY Il tronco del terminale è sullo stesso tratto.

2020.09.06 01:48:38.338 Network '': scanning network for access points
2020.09.06 01:48:40.195 Network '': scanning network finished
2020.09.06 03:57:04.504 Network '': connection to RannForex-Server lost
2020.09.06 03:57:15.249 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.41 ms, build 2560)
2020.09.06 03:57:15.249 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.05 21:59:42
2020.09.06 03:57:15.678 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 03:57:15.678 Network '': trading has been enabled - hedging mode
2020.09.06 03:57:17.500 Network '': scanning network for access points
2020.09.06 03:57:20.416 Network '': scanning network finished
2020.09.06 05:10:52.296 Network '': connection to RannForex-Server lost
2020.09.06 05:10:53.033 Network '': authorized on RannForex-Server through as.eu 6 (ping: 56.31 ms, build 2560)
2020.09.06 05:10:53.033 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 05:10:59
2020.09.06 05:10:53.299 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 05:10:53.299 Network '': trading has been enabled - hedging mode
2020.09.06 09:57:18.310 Network '': scanning network for access points
2020.09.06 09:57:20.396 Network '': scanning network finished
2020.09.06 09:57:20.396 Network '': auto connecting to a better access point with 93 % quality (previous: 77 %)
2020.09.06 09:57:20.397 Network '': connection to RannForex-Server lost
2020.09.06 09:57:21.151 Network '': authorized on RannForex-Server through as.eu 5 (ping: 41.60 ms, build 2560)
2020.09.06 09:57:21.151 Network '': previous successful authorization performed from 
xx.xx.xx.xx  on 2020.09.06 05:10:59
2020.09.06 09:57:21.208 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 09:57:21.208 Network '': trading has been enabled - hedging mode
2020.09.06 11:08:16.952 Network '': connection to RannForex-Server lost
2020.09.06 11:11:48.892 Network '': authorized on RannForex-Server
2020.09.06 11:11:48.892 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:48.970 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:48.970 Network '': trading has been enabled - hedging mode
2020.09.06 11:11:49.152 Network '': scanning network for access points
2020.09.06 11:11:51.319 Network '': scanning network finished
2020.09.06 11:11:51.319 Network '': auto connecting to a better access point with 92 % quality (previous: 91 %)
2020.09.06 11:11:51.320 Network '': connection to RannForex-Server lost
2020.09.06 11:11:52.035 Network '': authorized on RannForex-Server through as.eu 5 (ping: 43.31 ms, build 2560)
2020.09.06 11:11:52.035 Network '': previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:55
2020.09.06 11:11:52.088 Network '': terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 11:11:52.088 Network '': trading has been enabled - hedging mode
2020.09.06 17:11:49.928 Network '': scanning network for access points
2020.09.06 17:11:52.112 Network '': scanning network finished
 
fxsaber:

Se queste sono interruzioni di rete, perché influisce sull'ottenimento dell'ultimo tick dal Market Watch e sull'ottenimento dell'ultimo tick dalla cronologia dei tick?

Un'attenta analisi ha dimostrato che CopyTicks rallenta quando ci sono interruzioni di rete.

2020.09.06 21:22:24.105         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 1619 ms.
2020.09.06 21:22:24.515         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 2347 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 274 ms.
2020.09.06 21:22:53.814         Alert: Time[NewTicks.mqh 43: ::CopyTicks(_Symbol,Tick,COPY_TICKS_ALL,0,1)] = 686 ms.

2020.09.06 21:20:59.301 Network connection to RannForex-Server lost
2020.09.06 21:22:21.043 Network authorized on RannForex-Server
2020.09.06 21:22:21.043 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 11:11:59
2020.09.06 21:22:21.508 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:21.508 Network trading has been enabled - hedging mode
2020.09.06 21:22:21.915 Network scanning network for access points
2020.09.06 21:22:28.819 Network scanning network finished
2020.09.06 21:22:45.523 Network connection to RannForex-Server lost
2020.09.06 21:22:52.951 Network authorized on RannForex-Server through as.eu 6 (ping: 56.55 ms, build 2560)
2020.09.06 21:22:52.951 Network previous successful authorization performed from xx.xx.xx.xx on 2020.09.06 21:22:28
2020.09.06 21:22:53.024 Network terminal synchronized with RannForex Limited: 1 positions, 0 orders, 67 symbols, 0 spreads
2020.09.06 21:22:53.024 Network trading has been enabled - hedging mode
 
fxsaber:


if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Prima di tutto, per tua informazione.

"Se ilcontrollo della struttura di base (controllo del puntatore) ha successo, viene restituito true -non indica il successo dell'esecuzione dell' operazione commerciale. Per ottenere una descrizione più dettagliata del risultato dell'esecuzione della funzione, bisogna analizzare i campi della struttura delrisultato."


In secondo luogo, secondo la vostra logica, se un ordine viene aperto, non lo si aggiunge alla lista degli ordini, ma si invalida completamente la cache)?

È possibile CHE ottimizzare tutto il codice, che avete HistorySelect sarà l'ultimo posto per le domande sul tempo di esecuzione) Utilizzare la cache. Puoi invalidarlo, per esempio, una volta al giorno, ma questo accelererà significativamente il tuo EA.

 
Andrey Pogoreltsev:

Beh, prima di tutto

O si deve eseguire il codice per capirlo correttamente, o leggerlo molto bene da un foglio di lavoro.

In secondo luogo, secondo la vostra logica, se un ordine viene aperto, non lo si aggiunge alla lista degli ordini, ma si invalida l'intera cache)?

L'elenco degli ordini non cambia. Leggi il codice.

 
fxsaber:

per capire bene il codice, bisogna eseguirlo o leggerlo molto bene dal foglio.

La lista degli ordini non cambia. Leggi il codice.

Qui

if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX)); // В каком месте самострел?

Vedo questa logica:

  1. Se una richiesta di compravendita viene inviata con successo al server
  2. Selezioniamo l'intera storia

Ma può essere che la richiesta sia già respinta sul server - non c'è nessun controllo per questo in questo codice. Che senso ha selezionare la storia? Cosa vogliamo vedere lì?

Qui, in queste due righe di codice, personalmente non vedo il punto. Lo vedrei bene se ci fosse un controllo per cambiare la storia prima di selezionarla. Forse, naturalmente, queste due righe non danno un quadro completo del compito. Ma la connessione tra l'invio con successo di una richiesta al server e la selezione dell'intera cronologia non mi è chiara. Anche se il server invia con successo una richiesta, la lista degli ordini di mercato e delle posizioni sarà cambiata. Cosa c'entra la lista della storia?

 
Artyom Trishkin:

Qui è dove

Vedo questa logica:

  1. Se una richiesta di compravendita viene inviata con successo al server
  2. Seleziona l'intera storia

Ma potrebbe essere che la richiesta sia già stata rifiutata sul server - non c'è nessun controllo per questo in questo codice. Che senso ha selezionare la storia? Cosa vogliamo vedere lì?

Qui, in queste due righe di codice, personalmente non vedo il punto. Lo vedrei bene se ci fosse un controllo per cambiare la storia prima di selezionarla. Forse, naturalmente, queste due righe non danno un quadro completo del compito. Ma la connessione tra l'invio con successo di una richiesta al server e la selezione dell'intera cronologia non mi è chiara. Anche se il server invia con successo una richiesta, la lista degli ordini di mercato e delle posizioni sarà cambiata. Cosa ha a che fare questo con la lista della storia?

Se - per sbarazzarsi dell'avvertimento del compilatore. Non ha altro da fare.

Questo thread non serve per insegnare a scrivere EAs. Ha lo scopo di eliminare le debolezze del terminale. Gli sviluppatori hanno bisogno di un codice semplice, conciso e riproducibile per capirlo. Non scrivo niente del genere per me stesso, naturalmente. Il fatto è che il Combat Advisor registra i freni. Comincio a scavare e mi rendo conto che il rallentamento avviene quando qualcuno (almeno a mano) modifica una posizione. Questo resetta la cache storica, anche se la storia non cambia, ovviamente.


Il codice dimostra perfettamente il problema. Non c'è mai bisogno di ingombrare il codice di replay con controlli inutili. Il suo compito è quello di mostrare chiaramente il problema. E una volta aggiustato - per dimostrare che ora tutto funziona correttamente.

 
fxsaber:

per capire bene il codice, bisogna eseguirlo o leggerlo molto bene dal foglio.

La lista degli ordini non cambia. Leggi il codice.

Considera che sono molto bravo a leggere dal foglio :)


Questo codice l'avete preso da qualche altra parte e avete lì una nuova creazione di posizione, che viene eseguita, giusto?

Altrimenti l'intero punto del tuo codice si riduce ad aggiornare TP della posizione corrente e ad invalidare la cache per il gusto di farlo, il che è anche molto strano.

In entrambi i casi, non viene utilizzata alcuna logica per ottimizzare l'operazione di caching. Inoltre, la vostra soluzione non è scalabile, perché man mano che la storia cresce, porta ad un aumento della frenata.

 
fxsaber:

Il codice dimostra perfettamente il problema. Non c'è mai bisogno di ingombrare il codice di replay con controlli non necessari. Il suo compito è quello di mostrare chiaramente il problema. E quando viene corretto - per dimostrare che ora tutto funziona correttamente.

Quindi, secondo la tua logica, questo codice qui

int v = 0.0;

for (int i = 0; i < 1000000; i++) {
    v = i;
}

std::cout << "The last number: " << v << std::endl;

dimostra la lentezza del processore?

 
Andrey Pogoreltsev:

Avete preso questo codice da qualche parte e lo avete lì creando una nuova posizione, che viene eseguita, giusto?

Domanda retorica: cosa sta cercando di ottenere qui?
Andrey Pogoreltsev:

Quindi, secondo la tua logica, questo codice qui

mostra la lentezza del processore?

Non ti rispondo più perché stai dicendo sciocchezze.