Noch einmal zum Thema Multithreading - Seite 5

 

Ich bin weit davon entfernt, ein Experte zu sein, also entschuldige ich mich im Voraus.

Ich schreibe gerade einen EA.

Die Aufgabe:

1) Mehrere Indikatoren zu verwenden. Ein und derselbe Indikator kann mit verschiedenen Einstellungen (Perioden) verwendet werden - wie kann man sie parallel arbeiten lassen, um die Zeit des Signalempfangs zu reduzieren?

2) Führen Sie parallel zum Empfang der Signale der Indikatoren eine ständige Kontrolle durch und schließen Sie gewinnbringende oder verlorene Positionen. Außerdem haben wir sehr viele offene Stellen, so dass dieser Prozess in Teilen parallelisiert werden sollte. Wir können zum Beispiel 1000 Aufträge in 3 oder 4 Threads prüfen.

3) Parallel zu den oben genannten Prozessen verwenden Sie die von den Indikatoren in Punkt 1 erhaltenen Signale zum Kauf oder Verkauf.


Das Interessanteste ist, wie man all diese Aufgaben parallelisieren kann, damit der Tester verfügbar ist und Optimierungen im Tester möglich sind.

Zeigen Sie den Weg, vorzugsweise mit Beispielen. Vielen Dank im Voraus.

 
dd:

Ich bin weit davon entfernt, ein Experte zu sein, also entschuldige ich mich im Voraus.

Aufgabe:

1) Mehrere Indikatoren zu verwenden. Ein und derselbe Indikator kann mit verschiedenen Einstellungen (Perioden) verwendet werden - wie kann man sie parallel arbeiten lassen, um die Zeit für den Empfang von Signalen zu reduzieren.

2) Führen Sie parallel zum Empfang der Signale von den Indikatoren eine ständige Überprüfung und Schließung von Gewinn- oder Verlustpositionen durch. Außerdem haben wir sehr viele offene Stellen, so dass dieser Prozess in Teilen parallelisiert werden sollte. Wir können zum Beispiel 1000 Aufträge in 3 oder 4 Threads prüfen.

3) Parallel zu den oben genannten Prozessen verwenden Sie die von den Indikatoren in Punkt 1 erhaltenen Signale zum Kauf oder Verkauf.


Das Interessanteste ist, wie man all diese Aufgaben parallelisieren kann, damit der Tester verfügbar ist und Optimierungen im Tester möglich sind.

Zeigen Sie den Weg, vorzugsweise mit Beispielen. Ich danke Ihnen im Voraus.

Haben Sie das Terminal jemals geöffnet? Im Allgemeinen sind der Tester und der Optimierer immer parallel zum Handel auf dem Konto verfügbar.

Ich frage mich, wie lange es dauert, bis die Signale von den Indikatoren empfangen werden, wenn die Frage nach der Notwendigkeit einer Parallelschaltung gestellt wird.

 
Dmitry Fedoseev:

Haben Sie das Terminal überhaupt einmal geöffnet? Der Tester und der Optimierer sind immer parallel zum Handel auf dem Konto verfügbar.

Ich frage mich, wie lange es dauert, um Signale von den Indikatoren zu erhalten, wenn es eine Frage über die Notwendigkeit, sie zu parallelisieren ist?

Das habe ich, und zwar offensichtlich länger als Sie. Ein Tick ist eine Sekunde. Während dieser Zeit müssen Sie, sagen wir, 4 Indikatoren überprüfen - Charts erstellen. Signale erhalten, kaufen oder verkaufen, 1000 Aufträge schließen und so weiter ... Und als ob jede Millisekunde zählt... Genauer gesagt, in Minuskonten. Zeit ist Geld :)
 
dd:

1) Verwenden Sie mehrere Indikatoren. Ein und derselbe Indikator kann mit verschiedenen Einstellungen (Perioden) verwendet werden - wie kann man sie parallel arbeiten lassen, um die Zeit für das Erhalten von Signalen zu reduzieren?

2) Führen Sie parallel zum Empfang der Signale der Indikatoren eine ständige Kontrolle durch und schließen Sie gewinnbringende oder verlorene Positionen. Außerdem haben wir sehr viele offene Stellen, so dass dieser Prozess in Teilen parallelisiert werden sollte. Wir können zum Beispiel 1000 Aufträge in 3 oder 4 Threads prüfen.

3) Parallel zu den oben genannten Prozessen verwenden Sie die von den Indikatoren in Punkt 1 erhaltenen Signale zum Kauf oder Verkauf.

Mit einem Symbol gestartete Indikatoren arbeiten in einem Fluss. Aber wenn sie gut geschrieben sind, gibt es keine Verzögerung (sie wird in Millisekunden gezählt).

Aber alle Handelsoperationen können mit zusätzlichen Expert Advisors / Skripten parallelisiert werden. Rufen Sie sie bei Bedarf vom Haupt-EA aus auf, oder lassen Sie sie ständig laufen. Ein Beispiel für die Umsetzung finden Sie in diesem Artikel. Oder verwenden Sie asynchrones OrderSend, aber in diesem Fall wird es etwas schwieriger zu kontrollieren sein.


dd:

Und das Interessanteste ist: Wie kann man all diese Aufgaben parallelisieren, so dass der Tester und die Optimierung im Tester verfügbar sind?

Für den Tester ist das alles nicht nötig, er arbeitet synchron und verpasst keine Ticks. Machen Sie 2 Varianten - für Tester und für Online (if ( IsTesting() ).

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

Indikatoren, die auf demselben Werkzeug laufen, laufen alle im selben Thread. Aber wenn Sie sie richtig schreiben, gibt es keine Verzögerung (wird in Millisekunden gezählt).

Alle Handelsoperationen können jedoch mit zusätzlichen Expert Advisors / Skripten parallelisiert werden. Rufen Sie sie bei Bedarf vom Haupt-EA aus auf, oder lassen Sie sie ständig laufen. Ein Beispiel für die Umsetzung finden Sie in diesem Artikel. Sie können auch den asynchronen OrderSend verwenden, aber in diesem Fall wird die Steuerung etwas schwieriger sein.


Für den Tester ist das alles unnötig, er arbeitet synchron und überspringt keine Ticks. Erstellen Sie 2 Varianten - für Tester und für Online (if ( IsTesting() ).



Mit einem Werkzeug gestartete Indikatoren arbeiten alle in einem Thread. Aber wenn man sie gut schreibt, gibt es keine Verzögerung (sie dauern nur Millisekunden).

--- Ich verstehe das nicht. Ich werde nicht meine eigenen Indikatoren schreiben. Ich verwende OEM-Indikatoren. Und der Punkt ist, dass ich sie parallel verwenden möchte, um die Reaktionszeit zu verkürzen...


Für den Tester ist das alles nicht nötig, er arbeitet synchron und überspringt keine Ticks. Erstellen Sie 2 Varianten - für Tester und für Online (if ( IsTesting() ).

---- Das verstehe ich überhaupt nicht. Wer braucht das nicht? Es funktioniert synchron --- aber für mich muss es umgekehrt sein, um meine Asynchronität zu berücksichtigen... Was zum Teufel sind zwei Varianten? Ich habe eine Variante meines EA und möchte sie im Tester ausführen, aber ich möchte meine Prozesse parallelisieren und sie im Tester anzeigen.

Da alles sequentiell abläuft, kommt es zu Drawdowns.

 
dd:

--- Ich verstehe das nicht. Ich werde nicht meine eigenen Indikatoren schreiben. Ich verwende die Standardtypen. Und der Punkt ist, dass ich sie parallel verwenden möchte, um die Reaktionszeit zu verkürzen...

Haben Sie die Reaktionszeit gemessen? Beim Parallelisieren verlieren Sie mehr.


dd:

---- Ich verstehe das überhaupt nicht. Wer braucht das nicht? Es funktioniert synchron --- aber ich brauche es, um meine Asynchronität zu berücksichtigen... Was zum Teufel sind die beiden Varianten? Ich habe eine Variante meines EA und möchte sie im Tester ausführen, aber ich möchte meine Prozesse parallelisieren und sie im Tester anzeigen.

Ein EA:

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

Warum sollte man die Parallelisierung mit dem Strategy Tester testen?

 
dd:

Aufgrund der Tatsache, dass alles sequentiell ausgeführt wird, kommt es zu Drawdowns, und zwar zu verdammt vielen Drawdowns.

Verteilen Sie das Senden von Handelsaufträgen oder verwenden Sie OrderSendAsync

Wenn Sie eine Reihe von Geschäften schließen müssen, können Sie einen großen Schalter öffnen, einen Gewinn einfahren und dann in aller Ruhe einen OrderCloseBy über den anderen schließen.
 
Andrey Khatimlianskii:

Verteilen Sie das Senden von Handelsaufträgen oder verwenden Sie OrderSendAsync

Es geht also nicht nur um die Übermittlung der Bestellung, sondern es werden noch eine Reihe anderer Kontrollen durchgeführt. Aber sie werden alle in eine Warteschlange gestellt, bis eine Funktion beendet ist, die andere wird nicht ausgeführt ....

Ich habe es bereits in der Problemstellung beschrieben. Und das ist eine komplexe Aufgabe. DLL oder Chats oder was auch immer - was mich interessiert, ist das Szenario, in dem ich diese Aufgaben parallelisieren kann und sie so im Tester ausführen kann, um zu verstehen, was was ist...

 
dd:

Es geht also nicht nur um die Übermittlung des Haftbefehls, sondern um eine ganze Reihe anderer Kontrollen. Aber alle werden in eine Warteschlange gestellt, bis eine Funktion beendet ist, die andere wird nicht ausgeführt ....

Ich habe es in den Begriffen des Problems beschrieben. Und das ist eine komplexe Aufgabe. DLL oder Chats oder was auch immer - was mich interessiert, ist das Szenario, in dem ich diese Aufgaben parallelisieren und im Tester laufen lassen kann, um zu sehen, was los ist...

Und wie viel kostbare Zeit verlieren Sie und was sind die Folgen? Und wie hoch wäre der Gewinn, wenn es keinen "Verlust" gäbe?

 
Dmitry Fedoseev:

Und wie viel kostbare Zeit verlieren Sie und was sind die Folgen? Und wie hoch wäre der Gewinn, wenn es keinen "Verlust" gäbe?

Ich brauche 5 Tage, um diese Strategie im Tester mit 24 Kernen auszuführen. Und nur ein Kern funktioniert. Ganz zu schweigen von der Tatsache, dass das Protokoll, das niemand braucht, in dieser Zeit auf ein oder zwei Terabyte anwachsen kann. Und das alles ohne Optimierungen. Und dieses blöde Protokoll lässt sich in keiner Weise deaktivieren ...

Wie denken Sie, wenn ich den Prozess so beschleunigen - sagen wir - 4 Zeitpläne, jeder in seinem Kern - eine Erhöhung in diesem Punkt 4 mal. Hinzu kommt ein separater Prozess für den Abschluss von z.B. 1000 Geschäften oder die Aufteilung dieses Prozesses auf 5 oder 10 Threads - eine Verzehnfachung. Plus ein separates Verfahren zur Eröffnung von Positionen durch Signale ...

Ich denke mehrfach und mal ...

Aber jede Millisekunde + Verzögerung zum Broker + Verzögerung vom Broker zur Börse (wenn es sich nicht um eine Küche handelt) ist ein kolossaler Verlust. Es ist seltsam, dass dies in Sibirien nicht verstanden wird...
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...