Errori, bug, domande - pagina 1124
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
Anche se entrambe le strutture sono della stessa dimensione e si copiano l'una nell'altra senza perdita, riceviamo comunque un avviso.
Quindi è fantastico. Non è così difficile fare una casta evidente. E capire dove assegnare cosa quando i bug iniziano a insinuarsi non è molto piacevole.
Copia dall'applicazione a SR:
Versione del terminale e bit
910 32 bit
Descrizione del problema
Ciao, cari sviluppatori!
In MQL5 un certo numero di funzioni di sistema comeCopyRates,CopyTime,CopyOpen, ecc. sono destinate a ricevere dati di serie temporali.
Quando chiamate una qualsiasi di queste funzioni, la serie temporale richiesta viene caricata nella RAM all'interno del parametro "Max bars in chart".
Tuttavia, la combinazione di fattori come:
1. Storia sufficientemente profonda disponibile sul simbolo o completamente caricata dal server.
2. Il parametro "Max bars in chart" è "Unlimited".
3. Vengono richiesti i dati del più piccolo lasso di tempo M1.
Si sta consumando una quantità molto grande di memoria.
Il problema è aggravato dal fatto che la logica del programma che esegue MQL5 (per esempio, se è un Expert Advisor multivaluta o un indicatore)
può essere stabilito per l'accesso alternato ai dati dei tempi di basso livello di diversi simboli (per esempio, ricerca singola).
Di conseguenza, il consumo di RAM aumenta di molte volte.
Получение данных нужного таймфрейма из промежуточных данных
I file di servizio nel formato HCC svolgono il ruolo di fonte di dati per costruire i dati sui prezzi secondo i tempi richiesti nel formato HC. I dati nel formato HC sono serie temporali preparate al massimo per un accesso rapido. Vengono creati solo su richiesta di un grafico o di un programma mql5 nel volume che non supera il parametro "Max bars in charts", e vengono salvati per un uso successivo in file con estensione hc.
Per risparmiare risorse, i dati sul timeframe sono caricati e immagazzinati nella RAM solo quando necessario.In caso di lunga assenza di richieste i dati sono scaricati dalla RAM salvandoli in un file. I dati per ogni periodo sono preparati indipendentemente dai dati pronti per altri periodi. Le regole per la preparazione e la disponibilità dei dati sono le stesse per tutti i tempi. Cioè, nonostante il fatto che l'unità di memorizzazione dei dati nel formato HCC sia la barra dei minuti, la disponibilità dei dati nel formato HCC non significa la disponibilità e l'accessibilità dei dati in formato HC per il periodo M1 nello stesso volume.
La ricezione di nuovi dati dal server provoca l'aggiornamento automatico dei dati di prezzo usati in formato HC per tutti i tempi e il ricalcolo di tutti gli indicatori, che li usano esplicitamente come dati di input per il calcolo.
Il tempo del processo evidenziato in giallo nella citazione citata della documentazione è abbastanza grande: circa mezz'ora (dalle mie osservazioni).
Di conseguenza, tutte le serie temporali richieste sono "sedute" nella "RAM" senza alcuna ragione.
Se la "RAM" non è "gomma E il "vorace" Expert Advisor/indicatore richiede sempre più serie temporali, il terminale non ha altro da fare
tranne che per un urgente "scarico" delle serie temporali in eccesso nel file (cache). Così, in questo reset di emergenza, il terminale può resettare la serie temporale a
una "cache rotta", cioè perderà "una buona metà" dei dati. E la prossima volta che si accede a questa serie temporale, il terminale carica questa "cache rotta" come una normale.
Di conseguenza, il grafico del terminale visualizza la serie temporale necessaria con un enorme buco nella storia.
Risultato atteso
Il linguaggio MQL5 tende a risparmiare risorse dell'ambiente di esecuzione. Un esempio di questo è il seguente:
1. la funzioneArrayFree
2. funzioneresourceFree
3.eliminare l'operatore
4. Parametro"Barre massime nei grafici
È possibile aggiungere una funzione di sistema alla funzionalità del linguaggio MQL5 che forzi il terminale ad eseguire operazioni con la serie temporale non più utilizzata?
Se non c'è un grafico aperto con questa serie temporale, alla fine del tempo?
Per esempio, una funzione:
bool SeriesFlush(
string symbol_name, // имя символа
ENUM_TIMEFRAMES timeframe, // период
);
Questo permetterebbe:
1. non preoccuparsi dell'overflow della RAM.
2. non preoccupatevi delle "cache rotte" di cui potete liberarvi solo cancellando manualmente i file *.hc quando il terminale è spento.
3. Non dovete dipendere dalla modalità bit del vostro sistema operativo e dalla dimensione della RAM.
4. Quando si sviluppa un prodotto software, non usare "stampelle" che cercano di aggirare gli svantaggi descritti sopra.
Copia dall'applicazione a SR:
Potete dirmi come ottenere i dati dell'indicatore con un offset positivo? Sono interessato ai dati sulla barra -1?
Per fare questo è necessario conoscere le impostazioni di offset per la linea dell'indicatore di interesse. Questo è un esempio dell'indicatore tecnicoiAlligator
Si tratta di una compensazione, non di un calcolo indicatore per il futuro.
Copia dall'applicazione alla SD:
Versione del terminale e modalità di bit
910 32 bit
Descrizione del problema
Ciao, cari sviluppatori!
Una delle raccomandazioni per migliorare la qualità del codice quando si progettano cicli con un gran numero di iterazioni
è incorporare la verifica di un arresto forzato di un programma MQL5 utilizzando il sistema
Funzione di sistemaIsStopped();
Tuttavia, in pratica, questo controllo non funziona negli indicatori (lo fa negli script e negli Expert Advisors)
Ecco il codice breve dell'indicatore che mostra l'essenza del problema:
Se provate a rimuovere questo indicatore dal grafico, il processo di "calcolo dell'indicatore" non si ferma in quanto tale,
anche se dovrebbe, a causa del controllo del flag di arresto del programma.
Puoi scoprirlo facilmente monitorando il processo terminal.exe in Task Manager. Su un processore quad core
è circa il 25% del carico della CPU. Inoltre, il carico terminale non diminuisce affatto nel tempo fino a quando il
spegnimento del terminale. E anche dopo lo spegnimento del terminale il processo terminal.exe si blocca ancora nel manager. E mi sembra che sia così,
che viene scaricato dal sistema operativo come "sospeso".
Risultato atteso
Per favore, risolvete questo problema.
Per fare questo è necessario conoscere le impostazioni di offset per la linea dell'indicatore di interesse. Questo è un esempio dell'indicatore tecnicoiAlligator
Questa è una compensazione, non il calcolo dell'indicatore per il futuro.
Ho un calcolo del futuro, ma uso un offset per renderlo, come faccio a calcolare -1 barra dall'Expert Advisor?
Se qualcuno ne ha bisogno, usa CopyBuffer(Handle_original,0,-2,10,Data_Ind )
Esattamente, ho un calcolo nel futuro, ma per disegnare un offset, come faccio a leggere -1 barra dall'Expert Advisor?