Ancora una volta, riguardo al multithreading - pagina 4

 
meat:

Beh, diciamo che non tutto quello che hai elencato si riferisce agli strumenti mql5 :) E la domanda non era su come risolvere (aggirare) questa questione. Si può sempre trovare un modo per aggirarlo, non c'è dubbio. La domanda è perché non abbiamo voluto aggiungere la funzionalità necessaria a mql5 senza alcun dettaglio.

MQL5 ha tutto ciò di cui abbiamo bisogno, dobbiamo solo imparare ad usarlo.

Trasferire parte dei calcoli all'indicatore ed eseguirlo da un Expert Advisor.

E nessuno farà il parallelismo di base per 2 dozzine (ottimisticamente) di utenti.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
TheXpert:
Ci sono script per il multithreading. E non ne hai bisogno nel tester

Come si esegue uno script da un Expert Advisor?

 
komposter:

Trasferisci alcuni dei calcoli all'indicatore ed eseguilo dall'Expert Advisor.

Ci risiamo con la danza del tamburello. Stavo parlando di una normale implementazione.

E nessuno farà il solito parallelismo per 2 dozzine (ottimisticamente) di utenti.

Mi è sembrato fin dall'inizio che MQL5 sia posizionato come un linguaggio per programmatori più o meno esperti, in contrasto con mql4. Questo significa che l'ottimizzazione dell'algoritmo, mettendolo in parallelo su più thread deve essere una necessità quotidiana. Ecco perché ho attirato la vostra attenzione su questo punto all'inizio dell'argomento. E Renat per qualche motivo ha reagito molto dolorosamente a questo.

Risolvere costantemente il problema dell'ottimizzazione attraverso un solo luogo, come molti qui suggeriscono, non è qualcosa che si vuole fare assolutamente.

Inoltre, ho già detto all'inizio che non chiedo loro di fare un normale parallelismo. Sono perfettamente in grado di mettere tutto in parallelo da solo, usando WinApi. Tutto ciò di cui ho bisogno è un indirizzo di funzione. Ecco perché ho chiesto di aggiungere solo i puntatori alle funzioni. Naturalmente, è auspicabile supportare la direttiva __stdcall, ma non è necessario, potete fare le manipolazioni necessarie per conto vostro.

I puntatori alle funzioni sono in realtà una cosa molto utile. Usarli per creare fili è solo uno dei tanti usi. Sono anche usati, per esempio, per specificare funzioni di callback in varie operazioni asincrone. Saranno anche trasferiti alla DLL, il che semplifica la comunicazione tra la DLL e l'Expert Advisor che l'ha importata, cioè un'integrazione completa. In fase di esecuzione, la DLL può chiamare direttamente la funzione MQL e ottenere da essa alcune informazioni necessarie. Ora, per farlo, abbiamo bisogno di generare un evento (ad esempio, un tick), che chiamerà un Expert Advisor e poi passerà le informazioni richieste alla DLL... Tutto sommato, una seccatura e un consumo di tempo extra

 
Sul multithreading.
  1. Aggiungere il multithreading al linguaggio implica la creazione di un'API speciale che supporti il multithreading,
    che a sua volta funzionerà più lentamente delle API senza tale supporto, spero sia chiaro (loki, ecc.).
  2. Bisogna riscrivere l'ottimizzatore del compilatore MQL5 - in realtà peggiora le ottimizzazioni.
  3. Questo è un posto per i bug degli utenti difficili da trovare.
Bene e infine, non sono molto pochi gli utenti che ne hanno bisogno e la mancanza di supporto può essere aggirata.


Sui puntatori alle funzioni.
La questione è aperta per quanto riguarda il loro uso all'interno del codice MQL5.
Sfortunatamente, non saremo in grado di passare il puntatore alla DLL - abbiamo dovuto sacrificare l'accordo di chiamata per crossplatform x86/x64.
 
mql5:
Per quanto riguarda il multithreading.

L'uomo sta solo trollando (pensavo che il linguaggio fosse...) per un ragionamento teorico e non capisce né la natura applicata del linguaggio né le conseguenze del multithreading.

In effetti, non ha nemmeno un vero compito di parallelismo.

 

mql5:
 ...Ну и последнее, нужно это не очень малому числу пользователей и отсутствие поддержки можно обойти.

Mi piace l'idea di usare gli script, ma come si fa a chiamarli dall'EA?

 
DC2008:

Mi piace l'idea di usare gli script, ma come si fa a chiamarli dall'EA?

Sfortunatamente, non c'è alcuna disposizione per lanciare gli script da MQL5.

Ma c'è un modo, attraverso un modello di un grafico, se si scrive uno script in esso invece di Expert Advisor.
Quando si applica un tale modello a un nuovo grafico, lo script viene lanciato (tuttavia, questa è una "caratteristica non documentata", che potrebbe non essere disponibile un giorno)...

Qual è il suo compito?
Perché non hai un Expert Advisor pronto a funzionare sul grafico adiacente, che farà il suo lavoro dopo aver ricevuto un evento?
Lanciare un nuovo programma MQL5 è costoso, a causa della protezione dei file EX5.
 
mql5:
Sfortunatamente, gli script non possono essere lanciati da MQL5.

Ma c'è un modo, attraverso un modello di grafico, se ci mettiamo uno script al posto dell'Expert Advisor.
Quando si applica un tale modello a un nuovo grafico, lo script viene lanciato (tuttavia, questa è una "caratteristica non documentata", che potrebbe non essere disponibile un giorno)...

Qual è il suo compito?
Perché non hai un Expert Advisor pronto a funzionare sul grafico adiacente, che farà il suo lavoro dopo aver ricevuto un evento?
Lanciare un nuovo programma MQL5 è costoso, a causa della protezione dei file EX5.

Ho migliaia di oggetti grafici da analizzare: cancellare quelli inutili, cambiare le proprietà, calcolare le caratteristiche statistiche, ecc. Anche su un grafico ci sono dei ritardi, e se ce ne sono diversi?

 
Per gli oggetti grafici il multithreading non aiuterà nemmeno teoricamente.

Il problema di lavorare con oggetti grafici dovrebbe essere risolto algoritmicamente. Economicamente e non mescolare il cambiamento e leggere i comandi. Per esempio, 1000 letture e solo 1000 scritture saranno molto più veloci di 1000 letture e scritture.
 
mql5:
Sul multithreading.
  1. Aggiungere il multithreading al linguaggio implica la creazione di un'API speciale che supporti il multithreading,
    che a sua volta funzionerà più lentamente delle API senza tale supporto, spero sia chiaro (loki, ecc.).
  2. Bisogna riscrivere l'ottimizzatore del compilatore MQL5 - in realtà peggiora le ottimizzazioni.
  3. Questo è un posto per i bug degli utenti difficili da trovare.
Bene e infine, non sono molto pochi gli utenti che ne hanno bisogno e la mancanza di supporto può essere aggirata.


Sui puntatori alle funzioni.
La questione è aperta per quanto riguarda il loro uso all'interno del codice MQL5.
Sfortunatamente, passare un puntatore in una DLL non funzionerà - abbiamo dovuto sacrificare la convenzione di chiamata per x86/x64 crossplatform.
Grazie per la sua risposta esauriente. Ora tutto è più chiaro. L'unica cosa che riguarda l'impossibilità di passare un puntatore nella DLL, suppongo che tu intenda le DLL di sistema (cioè l'accordo __stdcall)? E nella mia DLL posso scrivere qualsiasi altro accordo. O è un'esclusiva che non soddisfa alcuno standard?
Motivazione: