Ancora una volta, riguardo al multithreading - pagina 5

 

Sono lontano dall'essere un esperto, quindi mi scuso in anticipo.

Sto scrivendo un EA.

Il compito:

1) Utilizzare diversi indicatori. Uno stesso indicatore può essere usato con diverse impostazioni (periodi) - come farli lavorare in parallelo, per ridurre il tempo di ricezione dei segnali?

2) Parallelamente alla ricezione dei segnali dagli indicatori, eseguire un controllo costante e chiudere le posizioni redditizie o perdenti. Inoltre, abbiamo molte posizioni aperte, quindi questo processo dovrebbe essere parallelizzato in parti. Per esempio, possiamo controllare 1000 ordini in 3 o 4 thread.

3) Parallelamente ai processi di cui sopra, utilizzare i segnali ricevuti dagli indicatori al punto 1 per comprare o vendere.


E la cosa più interessante = come parallelizzare tutti questi compiti in modo che il tester sia disponibile e le ottimizzazioni nel tester siano possibili?

Indica la strada, preferibilmente con esempi. Grazie in anticipo.

 
dd:

Sono lontano dall'essere un esperto, quindi mi scuso in anticipo.

Compito:

1) Utilizzare diversi indicatori. Uno stesso indicatore può essere utilizzato con diverse impostazioni (periodi) - come farli lavorare in parallelo, per ridurre il tempo di ricezione dei segnali.

2) Parallelamente alla ricezione dei segnali dagli indicatori, eseguire un controllo costante e la chiusura delle posizioni redditizie o perdenti. Inoltre, abbiamo molte posizioni aperte, quindi questo processo dovrebbe essere parallelizzato in parti. Per esempio, possiamo controllare 1000 ordini in 3 o 4 thread.

3) Parallelamente ai processi di cui sopra, utilizzare i segnali ricevuti dagli indicatori al punto 1 per comprare o vendere.


La cosa più interessante è come parallelizzare tutti questi compiti in modo che il tester sia disponibile e siano possibili ottimizzazioni nel tester.

Indica la strada, preferibilmente con esempi. Grazie in anticipo.

Avete mai aperto il terminale? In generale, il tester e l'ottimizzatore sono sempre disponibili in parallelo con il trading sul conto.

Mi chiedo quanto tempo ci voglia per ricevere i segnali dagli indicatori se c'è la questione della necessità di metterli in parallelo.

 
Dmitry Fedoseev:

Avete aperto il terminale almeno una volta? Il tester e l'ottimizzatore sono sempre disponibili in parallelo con il trading sul conto.

Mi chiedo quanto tempo ci voglia per ricevere i segnali dagli indicatori, se c'è qualche dubbio sulla necessità di parallelizzarli?

L'ho fatto, e ovviamente più lungo del tuo. Un tick è un secondo. Durante questo tempo è necessario controllare diciamo 4 indicatori - costruire grafici. Ricevi segnali, compra o vendi, chiudi 1000 ordini e così via... E come se ogni millisecondo contasse... Più precisamente, in conti meno. Il tempo è denaro :)
 
dd:

1) Utilizzare diversi indicatori. Uno stesso indicatore può essere usato con diverse impostazioni (periodi) - come farli lavorare in parallelo, per ridurre il tempo di ottenere segnali?

2) Parallelamente alla ricezione dei segnali dagli indicatori, eseguire un controllo costante e chiudere le posizioni redditizie o perdenti. Inoltre, abbiamo molte posizioni aperte, quindi questo processo dovrebbe essere parallelizzato in parti. Per esempio, possiamo controllare 1000 ordini in 3 o 4 thread.

3) Parallelamente ai processi di cui sopra, utilizzare i segnali ricevuti dagli indicatori al punto 1 per comprare o vendere.

Gli indicatori lanciati su un simbolo lavorano in un unico flusso. Ma se sono scritti bene, non ci sarà alcun ritardo (sarà contato in millisecondi).

Ma tutte le operazioni di trading possono essere parallelizzate utilizzando Expert Advisors / script aggiuntivi. Chiamateli dall'EA principale, se necessario, o teneteli sempre in funzione. Un esempio di implementazione può essere trovato in questo articolo. Oppure usare OrderSend asincrono, ma in questo caso sarà un po' più difficile da controllare.


dd:

E la cosa più interessante = come parallelizzare tutti questi compiti in modo che il tester e l'ottimizzazione nel tester siano disponibili?

Non avete bisogno di tutto questo per il tester, funziona in modo sincrono e non salta i tick. Fare 2 varianti - per il tester e per l'online (if ( IsTesting() ).

Многопоточный асинхронный WebRequest на MQL5 своими руками
Многопоточный асинхронный WebRequest на MQL5 своими руками
  • www.mql5.com
Реализация торговых алгоритмов часто требует анализа информации из различных внешних источников, в частности из Internet. MQL5 предоставляет функцию WebRequest для отправки HTTP-запросов во "внешний мир", но она, к сожалению, обладает одним заметным недостатком. Эта функция является синхронной, а потому блокирует работу эксперта на все время...
 
Andrey Khatimlianskii:

Gli indicatori che girano sullo stesso strumento girano tutti nello stesso thread. Ma se li scrivete correttamente, non ci sarà alcun ritardo (sarà contato in millisecondi).

Ma tutte le operazioni di trading possono essere parallelizzate utilizzando Expert Advisors / script aggiuntivi. Chiamateli dall'EA principale, se necessario, o teneteli sempre in funzione. Un esempio di implementazione può essere trovato in questo articolo. Oppure, potete usare OrderSend asincrono, ma in questo caso, il controllo sarà un po' più difficile.


Per il tester tutto questo non è necessario, funziona in modo sincrono e non salta i tick. Fare 2 varianti - per tester e per online (if ( IsTesting() ).



Gli indicatori che girano su uno strumento lavorano tutti in un thread. Ma se li scrivete bene, non ci sarà alcun ritardo (sarà calcolato in millisecondi).

--- Non capisco. Non ho intenzione di scrivere i miei indicatori. Sto usando gli indicatori OEM. E il punto è che voglio usarli in parallelo per ridurre il tempo di risposta...


Non avete bisogno di tutto questo per il tester, funziona in modo sincrono e non salta i tick. Fare 2 varianti - per tester e per online (if ( IsTesting() ).

---- Non capisco affatto. Chi non ne ha bisogno? Funziona in modo sincrono --- ma per me ha bisogno del viceversa, per tenere conto della mia asincronia... Cosa diavolo sono due varianti? Ho una variante del mio EA e voglio eseguirla nel tester, ma voglio parallelizzare i miei processi e mostrarla nel tester.

A causa del fatto che tutto funziona in modo sequenziale, comincio ad avere dei drawdown.

 
dd:

--- Non capisco. Non ho intenzione di scrivere i miei indicatori. Sto usando quelli standard. E il punto è che voglio usarli in parallelo per ridurre il tempo di risposta...

Avete misurato il tempo di risposta? Perderete di più con il parallelismo.


dd:

---- Non lo capisco affatto. Chi non lo vuole? Funziona in sincronia --- ma ho bisogno che tenga conto della mia asincronia... Cosa diavolo sono le due varianti? Ho una variante del mio EA e voglio eseguirla nel tester, ma voglio parallelizzare i miei processi e mostrarla nel tester.

Una EA:

if ( IsTesting() )
{
   // работаем нормально
}
else
{
   // распараллеливаем торговые приказы
}

Perché testare la parallelizzazione nello Strategy Tester?

 
dd:

A causa del fatto che tutto viene eseguito in modo sequenziale, sto iniziando ad avere dei drawdown, e sto avendo un sacco di drawdown.

Distribuire l'invio di ordini di compravendita o usare OrderSendAsync

Se hai bisogno di chiudere un mucchio di operazioni, puoi aprire un grande contatore, bloccare un profitto e poi chiudere con calma OrderCloseBy uno sull'altro.
 
Andrey Khatimlianskii:

Distribuire l'invio di ordini di compravendita o usare OrderSendAsync

quindi non si tratta solo dell'invio dell'ordine, ci sono un sacco di altri controlli che vengono fatti. Ma vengono tutti accodati finché una funzione non finisce, l'altra non viene eseguita ....

L'ho già descritto nella dichiarazione del problema. Ed è un compito complesso. DLL o chat o altro - quello che mi interessa è lo scenario in cui posso mettere in parallelo questi compiti e quindi eseguirli nel tester per capire cosa c'è...

 
dd:

Quindi non è solo l'invio del mandato, ci sono un sacco di altri controlli che vengono fatti. Ma tutti sono accodati fino alla fine di una funzione, l'altra non viene eseguita ....

L'ho descritto nei termini del problema. Ed è un compito complesso. DLL o chat o qualsiasi altra cosa - quello che mi interessa è lo scenario in cui posso parallelizzare questi compiti e tenerli in esecuzione nel tester per vedere cosa c'è...

E quanto tempo prezioso si perde e quali sono le conseguenze? E quale sarebbe il profitto se non ci fosse una "perdita"?

 
Dmitry Fedoseev:

E quanto tempo prezioso state perdendo e quali sono le conseguenze? E quale sarebbe il profitto se non ci fosse una "perdita"?

Mi ci vogliono 5 giorni per eseguire questa strategia nel tester con 24 core a mia disposizione. E solo un nucleo funziona. Per non parlare del fatto che il log, uno stupido log di cui nessuno ha bisogno durante questo periodo può gonfiarsi fino a terabyte o due. E tutto questo senza ottimizzazioni. E questo stupido registro non può essere disabilitato in alcun modo...

Come pensi che se accelerassi il processo diciamo - 4 programmi, ognuno sul suo nucleo - un aumento di questo punto 4 volte. Più un processo separato per la chiusura di 1000 trade, diciamo, o la suddivisione di questo processo in 5 o 10 thread - un aumento di 10 volte. Più un processo separato per l'apertura di posizioni tramite segnali ...

Penso che più e più volte ...

Ma ogni millisecondo + ritardo al broker + ritardo dal broker allo scambio (se non è una cucina) è una perdita colossale. È strano che questo non sia compreso in Siberia...
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Motivazione: