Oggi parliamo di un indicatore davvero interessante: si tratta di un pseudo-indicatore senza buffer, il cui scopo principale è dimostrare la tecnica di calcoli multi-threaded. Questo indicatore ha la capacità di emettere comandi per calcoli complessi, che vengono eseguiti in thread separati, creati per oggetti grafici con un Expert Advisor dedicato.
Questo esempio è pensato per utenti con una certa esperienza di programmazione.
L'idea alla base di questo indicatore proviene da un articolo sui WebRequest Asincroni Multi-Threaded. Troverai tutti i dettagli tecnici su come vengono gestiti i messaggi (eventi) e come vengono utilizzate le risorse per trasferire dati tra i grafici.
Questo indicatore utilizza un'implementazione più "compatta" della tecnica descritta nell'articolo, impiegando oggetti grafici invece di finestre di grafico a piena funzionalità. Puoi trovare ulteriori dettagli nel forum.
Ricorda di compilare prima l'Expert AdvisorMultiThreadedObjectWorker prima di compilare e utilizzare l'indicatore stesso, MultiThreadedIndicator.
Parametri di Input
- sinput int _Cores = 1; - numero di thread da utilizzare (non superare il numero di core fisici disponibili)
- sinput int _Tasks = 1; - numero di pseudo-task da eseguire in parallelo (utilizza un numero maggiore rispetto ai core per vedere le prestazioni in parallelo)
- input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - deve indicare il percorso dell'Expert Advisor worker
Ogni pseudo-task calcola una serie di funzioni sqrt (solo a scopo dimostrativo). Puoi sostituire questo processo nei tuoi progetti MQL con algoritmi che richiedono più tempo.
Per avviare i calcoli in parallelo dopo aver attaccato l'indicatore a un grafico, ti basta cliccare sul grafico stesso. Tutte le fasi importanti del processo (sia nel programma client che nel worker MQL5) vengono registrate.
Il programma client MQL che emette richieste per calcoli paralleli può essere non solo un indicatore, ma anche un Expert Advisor. Script e servizi non sono supportati dalla piattaforma.
Utilizzando il file di intestazione MultiThreadedObjectWorker.mqh, dovresti implementare la tua gestione dei dati tra il client MQL5 e l'Expert Advisor worker.
Ecco due esempi dei log di esecuzione.

Esecuzione di 4 task su 2 core (2 thread in parallelo)
Quando si eseguono 4 task su 2 core, ci sono 2 thread paralleli, il che garantisce un'esecuzione due volte più veloce rispetto a 1 core (confronta 3354ms sopra e 6240ms sotto).

Esecuzione di 4 task su 1 core (thread singolo - programma MQL standard)
Più core significano più velocità.

Commento 0