Errori, bug, domande - pagina 2573

 

Oh, sì, allora non dovete preoccuparvi del sovraccarico del disco.
Quello che mi sorprende è l'uso di variabili globali di terminale (se è di questo che si tratta) per salvare grandi insiemi di dati.
È una stampella inquietante, vero?

Ok, le variabili stesse, ma ci sono i loro nomi di stringa, che devono anche essere memorizzati e ancora fare ogni volta una ricerca di stringa per l'accesso a questa variabile, per non parlare del solo tipo doppio, che può essere memorizzato. Certo, puoi usare l'unione, ma usarla non è gratis.

È molto più corretto implementare il salvataggio indipendente attraverso le risorse di qualsiasi array di dati con salvataggio automatico su disco o quando si verifica l'evento deinit

 
Nikolai Semko:

Le variabili stesse vanno bene, ma ci sono nomi di stringhe, che devono anche essere memorizzati e ancora fare ogni volta una ricerca di stringhe per accedere a questa variabile, per non parlare del solo tipo doppio, che può essere memorizzato. È chiaro che possiamo usare l'unione, ma anche il suo uso non è gratuito.

Ho avuto l'idea e il desiderio di usare le variabili globali, ma ho deciso di salvarle su disco nel vecchio modo, specialmente ora che ho iniziato a scrivere codice correttamente - i dati sono memorizzati in strutture, e si possono scaricare le strutture su disco in un clic - FileWriteStruct().



così, le variabili globali "devono essere usate esattamente al contrario" - i dati dovrebbero essere memorizzati nel nome della variabile globale. e il checksum in doppio con Base64 - tutto è pronto in CryptEncode(), e idealmente dovrebbe essere Base85 ( Ascii85 ) o visto da qualche parte codice sorgente sul githab Base128

e se non mi sbaglio, il nome della variabile globale nel terminale è di 256 caratteri? l'efficienza di Base64 è leggermente superiore al 60% (dimensione), altri metodi di codifica hanno un'efficienza maggiore - si possono memorizzare 160-180 byte in una variabile globale

Anche se dovrete determinare i dati usando il prefisso, ma in generale, funzionerà - tanto più che le variabili globali sono usate raramente - tutti i nomi sono essenzialmente liberi

 
Igor Makanu:

Ho avuto l'idea e il desiderio di usare le variabili globali, ma ho deciso di salvarle su disco nel vecchio modo, specialmente ora che ho iniziato a scrivere codici il più correttamente possibile - memorizzo i dati in strutture, e posso scaricare le strutture su disco in un click - FileWriteStruct().



così, le variabili globali "devono essere usate esattamente al contrario" - i dati dovrebbero essere memorizzati nel nome della variabile globale. e il checksum in doppio con Base64 - tutto è pronto in CryptEncode(), e idealmente dovrebbe essere Base85 ( Ascii85 ) o visto da qualche parte codice sorgente sul githab Base128

e se non mi sbaglio, il nome della variabile globale nel terminale è di 256 caratteri? l'efficienza di Base64 è leggermente superiore al 60% (dimensione), altri metodi di codifica hanno un'efficienza maggiore - si possono memorizzare 160-180 byte in una variabile globale

Anche se dovrete definire i dati con un prefisso, ma in generale funzionerà - tanto più che le variabili globali sono usate raramente - tutti i nomi sono essenzialmente liberi.

Ancora, per arrivare a una variabile, devi passare attraverso i checksum fino a trovare quello giusto. E se ci sono molte variabili?
Oppure si può tracciare una sequenza di variabili e assegnare loro degli indici. Ma questo è assolutamente inutile, perché è più facile scrivere una classe per salvare i dati
 
Nikolai Semko:
è più facile scrivere una classe di salvataggio dei dati

La classe è disposta, compresi gli esempi. Gli sviluppatori introdurranno nuove funzionalità che permettono già senza scrivere wrapper intorno alle risorse di trasferire dati.

Levariabili globali sono usate per le bandiere. È anche conveniente vedere sempre i loro valori - F3.

 
fxsaber:

La classe è disposta, compresi gli esempi. Gli sviluppatori introdurranno nuove funzionalità che permettono già senza scrivere wrapper intorno alle risorse di trasferire dati.

Levariabili globali sono usate per le bandiere. È anche conveniente vedere sempre i loro valori - F3.

Sì, l'ho fatto. Ecco perché sono rimasto sorpreso.
Per il controllo del valore sono d'accordo, quindi giustificato.
 
Georgiy Merts:

Ho scoperto che nella mia modalità di test visivo SymbolInfoTick() restituisce un valore ma la serie temporale Close[0] ha un valore diverso.

È un mio errore? Sto facendo qualcosa di sbagliato?

Sembra che dovrebbero essere gli stessi valori:

Di solito la differenza è di 1-2 punti, ma nei movimenti bruschi può essere di più.

Sono solo io?

Per ora ho preso la serie temporale come "più corretta". Se risulta che SymbolInfoTick() dà un valore diverso da Close[0], allora assumo che il valore corretto sia Close[0] e lascio uno spread come è stato restituito da SymbolInfoTick().

Ma è interessante capire quale prezzo è corretto, quale prezzo è "cercato" da DC - SymbolInfoTick() o Close[0].

Qual è il numero di costruzione?

La build 2155 dovrebbe essere già stata corretta - questo bug è stato risolto la settimana scorsa

 
Slava:

Qual è il numero di costruzione?

La build 2155 dovrebbe essere già risolta - hanno risolto quel bug la settimana scorsa

Sì... E io ho 2085.

Capito, aggiornamento.

P.S. Sì, i valori sono gli stessi ora.
 
Slava:

Qual è il numero di costruzione?

La build 2155 dovrebbe essere già stata corretta - questo bug è stato risolto la settimana scorsa

Ne sai qualcosa?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021
 
Aleksei Beliakov:
Ne sai qualcosa?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021

Non hai dato alcun dettaglio per riprodurre

 
Slava:

Non hai dato alcun dettaglio per riprodurre

Banale se si stampano i risultati di queste funzioni in ontick, è per il tempo 1970.01.01 per il prezzo 0
Una volta era l'ora del bar o del prezzo.
Quindi ora è così.
iHigh(NULL,PERIOD_W1,0) в журнале будет 0
iTime(NULL,PERIOD_W1,0) в журнале будет 1970.01.01