Il problema del trasferimento da MT4 a MT5. O, più precisamente, l'impossibilità di eseguire alcuni algoritmi in MT5 senza 'err. - pagina 3
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ho cercato di rispondere alla domanda. I dati non sono disponibili.
Il log è nel tooltip. Il codice per il tooltip è dato. La serie temporale è stata generata. Viene costruito un grafico con le serie temporali W1. Dostap è assente. La funzione iBarShift genera un errore. Lo stesso errore non si vede in MT4.
Ancora una volta ignorate la richiesta di mostrare il codice e il risultato del lavoro.
Si prega di fornire un codice MQL5 riproducibile.
Artem, sei stato tu a cancellare il mio post nel thread di discussione dell'articolo. Dove ho risposto alla richiesta di un membro del forum?
Stavo solo toccando l'argomento sollevato in questo thread del forum. E mi ha fatto arrabbiare questo atteggiamento cavalleresco. Così ho creato questo thread del forum.
======
Ho già avuto disaccordi su questo forum. Non vuoi discutere qui. Ci sono molti forum dove si può dire molto senza censura.
Nel 2005 un moderatore (HQ) ha fatto qualcosa di simile sul forum Alpari. E poi quasi tutto il forum si è spostato da Alpari a Onyx.
No, non ho cancellato nulla
Ancora una volta ignorate la richiesta di mostrare il codice e il risultato del lavoro.
Si prega di fornire codice MQL5 riproducibile.
Il fatto è che il codice ha circa 50 000 linee. Non lo pubblicherò pubblicamente.
La situazione è fluttuante. Ma... Cercherò di creare un altro codice. Non sarà nemmeno piccolo.
E ci vorrà del tempo.
Spero che tu abbia letto i miei link nella Guida alle lingue a cui mi riferisco. C'è scritto nero su bianco da qualcuno di Metakvotes che l'accesso ai dati può essere interrotto in qualsiasi momento.
Ecco la citazione completa dal manuale di lingua:
Disponibilità dei dati.
La disponibilità di dati in formato HCC o anche in formato HC pronto all'uso non significa sempre che questi dati siano incondizionatamente disponibili per la visualizzazione su un grafico o per l'uso in programmi mql5.
Quando si accede ai dati dei prezzi o ai valori degli indicatori dai programmi mql5, dobbiamo ricordare che non è garantito che siano disponibili in un certo momento, o da un certo punto nel tempo. Questo ha a che fare con il fatto che MetaTrader 5 non memorizza la copia completa dei dati necessari per il programma mql5, ma dà accesso diretto al database del terminale per risparmiare risorse.
La storia dei prezzi per tutti i timeframes è costruita a partire dai dati comuni in formato HCC e qualsiasi aggiornamento del server porta all'aggiornamento dei dati per tutti i timeframes e al ricalcolo dell'indicatore. Pertanto, l'accesso ai dati può essere negato anche se questi dati erano disponibili solo un momento fa.
Potete anche farlo in modo più semplice. Ho già avuto diverse persone che hanno comprato questo programma. Se ricevo delle lamentele da loro su questo thread, pubblicherò qui i loro messaggi. E che tutti sappiano che questo è stabilito dagli sviluppatori del linguaggio: l'accesso ai dati può essere negato anche se questi dati erano disponibili un momento fa.
Fornire le impostazioni del terminale insieme al codice: numero di barre sul grafico.
Fornire le impostazioni del terminale insieme al codice: numero di barre sul grafico.
Il numero di barre è quello predefinito. Da qualche parte intorno ai 100.000. E l'accesso è negato negli esempi precedenti a 271 barre.
Il numero di barre è di default. Da qualche parte intorno ai 100.000. E l'accesso è negato negli esempi precedenti a 271 barre.
Quando si lavora già su H1 questo è un numero trascurabile di barre.
Quindi: codice riproducibile, impostazioni del terminale(numero di barre sul grafico).
Senza questo minimo non c'è semplicemente nulla da discutere - come finora è l'aria.
Il numero di barre è di default. Da qualche parte intorno ai 100.000. E l'accesso è negato negli esempi precedenti a 271 barre.
Ogni due minuti abbiamo bisogno di ottenere dati da tutti i timeframe e simboli utilizzati nell'indicatore.
Nel gestore OnTimer(), in altre parole - nel timer, applicare una volta ogni 90 secondi a tutti i timeframe, che sono necessari per il lavoro dell'indicatore. Puoi usare qualsiasi funzione di Copia. Basta ottenere dati "da nessuna parte", per esempio dalla prima barra o dalla barra corrente per ciascuno dei timeframe utilizzati. Questo sarà sufficiente per mantenere aggiornati tutti i dati per tutti i periodi di tempo.
E all'inizio di OnCalculate() controllate cosa restituisce la funzione che accede ai dati dei timeframe desiderati. Se restituisce -1, allora uscite prima del prossimo tick.
Ogni due minuti dovresti ricevere i dati da tutti i timeframe e i simboli utilizzati nell'indicatore.
Nel gestore OnTimer(), in altre parole - nel timer, ogni 90 secondi circa indirizza tutti i timeframe, che sono necessari per il lavoro dell'indicatore. Puoi usare qualsiasi funzione di Copia. Basta ottenere i dati "in mezzo al nulla", per esempio dalla prima barra o dalla barra corrente per ogni timeframe utilizzato. Questo sarà sufficiente per mantenere aggiornati tutti i dati per tutti i periodi di tempo.
E proprio all'inizio di OnCalculate() controllate cosa viene restituito dalla funzione, che accede ai dati dei timeframe desiderati. Se -1, allora esci prima del prossimo tick.
Nessun problema con OnCalculate(). L'intera GUI funziona attraverso OnChartEvent() . Ci sono più di 400 pulsanti nella GUI. Alcuni dei pulsanti non interagiscono in alcun modo con la serie temporale. Le funzioni OnCalculate() e OnTrade() possono aspettare fino al prossimo tick. Questo non si nota psicologicamente. Ed è più complicato con OnChartEvent(). Qui è coinvolta la psicologia umana. L'utente del programma preme il pulsante GUI. E non ottiene la risposta che vuole. Qual è la sua reazione? Una delle reazioni è che lui/lei preme lo stesso pulsante una seconda volta. Ho fatto in modo che una seconda pressione su molti dei pulsanti disabiliti la funzionalità collegata a quel pulsante. Anticipo il tuo suggerimento di rendere l'azione del pulsante disattivabile in qualche altro modo. Ma c'è lo stesso programma per MT4. Lì funziona normalmente. Si scoprirà che MT4 ha un algoritmo di interazione con l'interfaccia grafica mentre MT5 ne ha uno diverso. Tale comportamento dello stesso programma causerà solo il rifiuto.
Ho fatto qualcosa di simile quando ho tradotto in MT5 - ho abilitato l'uscita da OnChartEvent(). Non voglio mentire, è per questo che la GUI stava morendo.
E nel mio caso il riferimento alla serie temporale in OnTimer() avviene dopo 5 minuti. Lo farò dopo 2 minuti. Controllerò cosa succederà.
Artem, i tuoi suggerimenti erano utili anche prima.
Quando si lavora già su H1 è un numero trascurabile di barre.
Quindi: codice riproducibile, impostazioni del terminale(numero di barre sul grafico).
Senza questo minimo non c'è semplicemente nulla da discutere - come finora è l'aria.
Vi prego di non interferire ulteriormente con i problemi che sollevo sul forum.
La comunicazione con voi non è stata nulla di utile né prima né ora.
Puoi scrivere qualcosa in altri rami del forum. E nei miei rami si prega di non partecipare.
Ho fatto in modo che tutti i timeframe siano accessibili ogni due minuti. Il controllo dell'accesso ai timeframe inOnCalculate() non sembra causare difficoltà nel funzionamento del programma.
Ma il controllo inOnChartEvent() influenza il funzionamento. In alcuni casi la GUI si rifiuta di funzionare.
Osserverò come funziona il programma quando si accede a tutti i tf una volta ogni due minuti.
================
A proposito, ho trovato un'altra differenza tra MT5 e MT4.
Il legame degli strumenti grafici tramite l'interfaccia grafica viene eseguito a numeri di zagzag estremi o simboli di marcatura dell'onda.
Il binding avviene quando il programma "vede" il numero o il simbolo. Lasciate che vi spieghi cosa si intende con questo. Quando passi sopra un numero o un simbolo, appare un tooltip.
Se il tooltip appare, allora il programma "vede" il numero o il simbolo. Se non c'è un tooltip, il numero o il simbolo rimane invisibile. Lo strumento grafico non è allegato. Pertanto, lo strumento grafico non è mostrato sul grafico.
Se, per esempio, il Pitchfork di Andrews è già legato a questo numero o simbolo (non ho controllato con altri strumenti grafici), il tooltip appare in MT4. Ma il tooltip appare molto raramente in MT5. Ma se nascondo il Pitchfork di Andrews collegato al numero dato, il tooltip viene visualizzato normalmente.
Ho la sensazione che se ci sono altri oggetti grafici vicino al numero, MT5 sarà meno sensibile nella visualizzazione del tooltip. Ma non escludo che accada perché MT5 deve fare alcuni aggiornamenti di serie temporali aggiuntive che non sono disponibili in MT4. Questi aggiornamenti extra possono causare un ritardo in alcune funzioni di MT5. (Questa è la mia fantasia, non conosco il funzionamento interno di MT5).