MT5 e la velocità in azione - pagina 91

 
Anton:

La frenata di ObjectGetInterger è la norma?

 
fxsaber:

La frenata di ObjectGetInterger è la norma?

I metodi Get sono già sincroni, quindi aspettano. Il lavoro con gli oggetti è fatto attraverso una speciale coda di comandi, non attraverso l'accesso diretto agli oggetti.

Per informazione, si raccomanda vivamente di non mischiare i metodi Set e Get. È meglio pluralizzare scrivere e poi pluralizzare leggere. O viceversa.

 
Renat Fatkhullin:

I metodi Get sono già sincroni, quindi sono in attesa. Gli oggetti sono gestiti da una speciale coda di comandi, non da un accesso diretto agli oggetti.

Per informazione, non si raccomanda di mischiare i metodi Set e Get. È meglio scrivere set e poi leggere set. O viceversa.

Ho dei problemi con questo, purtroppo. Mostrato dal codice qui sopra.

Grazie per i chiarimenti.

 
L'ha tolto di mezzo in certe situazioni.

un account reale.

2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryDealsTotal() = 99663
2021.03.29 17:18:55.280 TradesID_Example (EURUSD,M1)    HistoryOrdersTotal() = 174307

2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03.29 17:24:15.862 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.057 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03.29 17:24:16.170 TradesID_Example (EURUSD,M1)    Alert: Bench_Stack = 0, 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

La biblioteca è ~2500 volte più veloce della solita implementazione. Solo l'approccio alternativo permette di fare alcuni calcoli in un tempo ragionevole.

 

Per forzare il terminale ad allocare la memoria, potete eseguire questo script

void OnStart()
  {
   short arr[];
   ArrayResize(arr,INT_MAX);
   ArrayInitialize(arr,0);
   Print(ArraySize(arr));
   Sleep(5000);
  }

Regolare ladimensione dell'array in base alla dimensione della RAM

 
Rorschach:

Per forzare il terminale ad allocare la memoria, potete eseguire questo script

Regolare ladimensione dell'array in base alla dimensione della RAM

Qual è l'idea?

 
fxsaber:

Qual è l'idea?

A quanto pare, mettete il terminale in una carenza di memoria e vedete se i meccanismi interni per liberarlo funzionano.

 
traveller00:

Apparentemente, se si mette il terminale in condizioni di scarsità di memoria, i meccanismi interni di rilascio della memoria funzionano.

Sì, il terminale esaurisce la memoria e inizia a resettare i dati della cache

 

Si è creata una situazione non standard. L'Expert Advisor prende una schermata basata sul segnale dell'indicatore e, se i filtri passano, dà un comando per aprire/chiudere le posizioni.
Il nome dello screenshot contiene il tempo: giorno, ora e secondo, per esempio, CHFJPY_d29_h10_m24_s17. L'ora è presa dalla funzione TimeCurrent().

Ci sono 28 istanze dell'Expert Advisor in esecuzione nel terminale. A un certo punto, per 44 minuti, il terminale sembrava bloccarsi e alle 10:27 ha ripreso a funzionare normalmente. Ecco la parte del log del terminale stesso:


Non si vedono interruzioni di connessione. La prima voce per EURUSD alle 10:27 è la chiusura delle 10:14 sl nella cronologia delle transazioni.

Qui sotto c'è una parte del registro dell'EA. Come potete vedere dai riquadri rossi superiori, il tempo di registrazione e TimeCurrent() che è nel nome dello screenshot sono quasi gli stessi.
E nei fotogrammi inferiori, la differenza è di mezz'ora.


Sul simbolo CHFJPY, la formazione di una schermata con il segnale di apertura ha avuto luogo alle 10:12, mentre la seconda con il segnale si è formata alle 10:24. Ma l'apertura/chiusura e la nuova apertura sono avvenute in un minuto alle 10:27.

Comunque, tale stranezza è accaduta dalle 9:43 alle 10:27:
1) TimeCurrent() funziona e ottiene l'ora attuale del server, l'Expert Advisor riceve segnali corretti dall'indicatore.
2) Il registro è stato scritto solo alle 10:27. Gli screenshot sono stati scritti sul mio disco rigido nella cartella Files alle 10:27, nuovi ordini (basati su vecchi segnali) sono stati aperti alle 10:27.

Forse qualcuno ha riscontrato questo, quale potrebbe essere la ragione di tali intoppi o rallentamenti? Si prega di consigliare quale funzione dovrebbe essere utilizzata per rilevare il motivo? Questa situazione si è ripetuta più volte da aprile.

 
Vasiliy Pushkaryov:

Potete dirmi quali funzioni usare per catturare la causa?

Controlla la discrepanza tra TimeLocal e TimeCurrent.