Grazie all'autore, articolo pertinente. Anch'io ho riflettuto su questo argomento, ma non sono riuscito a leggere l'articolo.
L'autore avverte che è necessario monitorare attentamente quali strumenti stanno eseguendo cosa. Alla luce della scrittura di Expert Advisor che possono essere eseguiti su qualsiasi coppia, questo è un po' difficile. È necessario tenere traccia della coppia su cui l'EA è in esecuzione e regolare le coppie di flussi paralleli.
A questo proposito, una domanda (non tanto all'autore, ma più agli sviluppatori di MQ): è possibile introdurre strumenti personalizzati?
In questo modo potremmo risolvere molti compiti, a partire dalla creazione di grafici vuoti per i calcoli in parallelo, fino alla creazione di grafici a tick di nostra creazione.
Per quanto riguarda il buffer di trasferimento dei dati, posso consigliarvi di creare una struttura globale e di trasferire diversi tipi di dati tramite la struttura. So per esperienza che non è sempre conveniente restituire il risultato dei calcoli sotto forma di array, spesso bisogna tenere traccia di alcuni contatori, e per non confondere i nomi è più facile passare tutto come struttura e fare già riferimento alle variabili come membri della struttura. Tra l'altro, la stessa struttura può includere array.
- www.mql5.com
A questo proposito, una domanda (non tanto all'autore, ma più agli sviluppatori di MQ): è possibile introdurre strumenti personalizzati?
Forse ripeterò l'idea già espressa qui sugli strumenti personalizzati, ma vorrei aggiungere....
Ora un Expert Advisor (indicatore, script) viene lanciato solo su un simbolo specifico. Ha accesso ai dati correnti di altri simboli, ma l'evento OnTick viene generato solo per il simbolo host, sul cui grafico viene lanciato l'Expert Advisor.
Forse sarebbe logico introdurre la possibilità di creare un proprio"strumento personalizzato", che è come un componente aggiuntivo. che è come una sovrastruttura sugli Expert Advisor e ha la capacità di ricevere ed elaborare i tick di diversi simboli, passando i risultati ai programmi (parti del programma o Expert Advisor, indicatori) che lavorano con un simbolo specifico nel proprio thread. Questo ha facilitato e stimolato notevolmente la creazione della "multicurrency". E il concetto stesso di programmazione a oggetti vi spinge. Perché vincolare un Expert Advisor a un particolare simbolo se si lavora con più simboli?
P.S. Sarebbe opportuno aggiungere alle funzioni SymbolInf... qualcosa come l'evento "è arrivato un nuovo tick per questo simbolo".
Ora l'Expert Advisor (indicatore, script) viene lanciato solo su un simbolo specifico. Ha accesso ai dati correnti di altri simboli, ma l'evento OnTick viene generato solo per il simbolo host, sul cui grafico viene lanciato l'Expert Advisor.
È difficile capire perché gli sviluppatori abbiano ripetuto questa stampella. Dopo tutto, quando è stata sviluppata l'architettura MQL5, esisteva già un'API molto forte, in cui l 'evento OnTick si attivava per qualsiasi tick di qualsiasi simbolo firmato.
In generale, non capisco perché abbiano scelto una simile architettura e abbiano preso così poco dall'API già esistente, che era molto competente in termini di architettura.
Gli sviluppatori di MQL5 si comportano come se stessero reinventando la ruota: "penseremo a questa funzione", "sì, avete ragione, la aggiungeremo", ecc.
È stato detto più volte che è stato speso più di un anno per elaborare l'architettura. Quindi ci sono alcuni argomenti che spiegano perché hanno deciso di farlo in questo modo e non in un altro.
P.S. Forse la ragione risiede nel fatto che gli sviluppatori di MetaTrader hanno poca esperienza nel campo dell'intermediazione e del trading, ma un'enorme esperienza nella scrittura di piattaforme. Altri sviluppatori, al contrario, hanno una grande esperienza nel brokeraggio e nel trading reale.
P.P.S. Ho scritto i miei pensieri, non le mie speculazioni. È sempre più facile criticare che creare. Gli sviluppatori, nonostante gli evidenti errori, meritano rispetto.
Forse sarebbe logico introdurre la possibilità di creare un proprio"strumento personalizzato" , che sia come un componente aggiuntivo rispetto agli Expert Advisor e abbia la capacità di ricevere ed elaborare i tick da diversi simboli, passando i risultati ai programmi (parti del programma o Expert Advisor, indicatori che lavorano con un simbolo specifico) che è come una sovrastruttura rispetto agli EA e ha la capacità di ricevere ed elaborare i tick da diversi simboli, passando i risultati ai programmi (parti del programma o EA, indicatori) che lavorano con un simbolo specifico nel proprio thread. Questo ha facilitato e stimolato notevolmente la creazione della "multicurrency". E il concetto stesso di programmazione a oggetti vi spinge. Perché vincolare un Expert Advisor a un particolare simbolo se si lavora con più simboli?
P.S. Sarebbe opportuno aggiungere alle funzioni SymbolInf... qualcosa come l'evento "è arrivato un nuovo tick per questo simbolo".
Questo "add-on" può essere implementato utilizzando gli strumenti standard MQL5: gestore di tick multicurrency OnTickMarketWatch
Grazie. È stato questo articolo a spingermi alle conclusioni di cui sopra. Ma come lei stesso ha notato in questo articolo:
Suggerimenti per l'uso:
1. Questa variante del gestore di tick multicurrency richiede molte risorse. È possibile alleggerire il carico sul processore aumentando il ritardo del tempo di ricezione dei tick nello script, utilizzando la variabile delay. Allo stesso tempo, però, è possibile saltare un certo numero di tick.
Se si aumenta il ritardo fino a 1 secondo, si può ottenere lo stesso effetto utilizzando OnTimer(). Purtroppo con gli stessi svantaggi.
Allo stesso tempo, il terminale riceve ed elabora continuamente i tick dei simboli dalla "Finestra del mercato". Abbiamo accesso a questi tick, ma non abbiamo alcun segnale che questi dati siano stati aggiornati. Per questo motivo dobbiamo effettuare il controllo artificialmente. Il vantaggio di MQL5 è che si può fare. Ma sono d'accordo che sarebbe molto più elegante avere una soluzione incorporata nelle funzioni del terminale. Lasciate che sia un evento separato come OnTrade() e che lo sviluppatore possa usarlo a sua discrezione (o meno).
E a proposito di "strumenti personalizzati" o sovrastrutture rispetto agli esperti.... Mi rendo conto che si tratta di una sorta di "sogno" e che avrebbe dovuto essere pensato in fase di progettazione... È un peccato!
Grazie. È stato questo articolo a spingermi alle conclusioni di cui sopra. Ma come lei stesso ha sottolineato in questo articolo:
Suggerimenti per l'uso:
1. Questa variante del gestore di tick multicurrency richiede molte risorse. È possibile alleggerire il carico sul processore aumentando il ritardo del tempo di ricezione dei tick nello script, utilizzando la variabile delay. Allo stesso tempo, però, è possibile saltare un certo numero di tick.
Se si aumenta il ritardo fino a 1 secondo, si può ottenere lo stesso effetto utilizzando OnTimer(). Purtroppo con gli stessi svantaggi.
Allo stesso tempo, il terminale riceve ed elabora continuamente i tick dei simboli dalla "Finestra del mercato". Abbiamo accesso a questi tick, ma non abbiamo alcun segnale che questi dati siano stati aggiornati. Per questo motivo dobbiamo effettuare il controllo artificialmente. Il vantaggio di MQL5 è che si può fare. Ma sono d'accordo che sarebbe molto più elegante avere una soluzione incorporata nelle funzioni del terminale. Lasciate che sia un evento separato come OnTrade() e che lo sviluppatore possa usarlo a sua discrezione (o meno).
E a proposito di "strumenti personalizzati" o sovrastrutture rispetto agli esperti.... Mi rendo conto che questo è solo un "sogno" e che avrebbe dovuto essere pensato in fase di progettazione... È un peccato!
Ok! Ora resta da ascoltare gli sviluppatori. Sarebbe opportuno che questo componente aggiuntivo includesse subito le funzioni di gestione dei thread.
Sarebbe possibile eseguire ogni elaborazione nel proprio thread. Forse sarebbe possibile elaborare un nuovo tick mentre si lavora con il tick corrente.
Articolo utile. Ha aperto nuovi orizzonti.
Ho una domanda: è possibile trasformare la funzione OnTick() in una funzione con un parametro, come OnTick(EURUSD), in modo che i tick di diversi strumenti possano essere elaborati in parallelo in un Expert Advisor? Naturalmente, con l'elaborazione di ogni istanza di una funzione a parametro singolo in un thread separato (su un kernel separato).
- www.mql5.com
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il nuovo articolo Calcoli paralleli su MetaTrader 5 è stato pubblicato:
Il tempo ha sempre avuto un grande valore in tutta la storia dell'umanità e noi ci sforziamo di non sprecarlo inutilmente. Questo articolo ti dirà come accelerare il lavoro del tuo Expert Advisor se il tuo computer ha un processore multi-core. Inoltre, l'implementazione del metodo proposto non richiede la conoscenza di altri linguaggi oltre a MQL5.
Non tutti coloro che usano un computer (e nemmeno tutti i programmatori alle prime armi) capiscono come funziona. Pertanto, qualcuno sicuramente chiederà: perché abbiamo bisogno di un processore con così tanti core quando prima (con un singolo core) il computer poteva eseguire molti programmi contemporaneamente e tutti funzionavano? La verità è che non è vero. Diamo un'occhiata al seguente diagramma.
Figura 1. Esecuzione parallela delle applicazioni
Autore: ds2