Encore une fois, à propos du multithreading - page 5

 

Je suis loin d'être un expert, je m'excuse donc par avance.

Je suis en train d'écrire un EA.

La tâche :

1) Utiliser plusieurs indicateurs. Un seul et même indicateur peut être utilisé avec différents paramètres (périodes) - comment les faire fonctionner en parallèle, pour réduire le temps d'obtention des signaux ?

2) Parallèlement à la réception des signaux des indicateurs, effectuez un contrôle constant et fermez les positions rentables ou perdantes. De plus, nous avons beaucoup de postes ouverts, donc ce processus doit être parallélisé en plusieurs parties. Par exemple, nous pouvons vérifier 1000 commandes en 3 ou 4 fils.

3) Parallèlement aux processus ci-dessus, utilisez les signaux reçus des indicateurs du point 1 pour acheter ou vendre.


Et le plus intéressant : comment paralléliser toutes ces tâches pour que le testeur soit disponible et que les optimisations dans le testeur soient possibles ?

Indiquez la voie à suivre, de préférence à l'aide d'exemples. Merci d'avance.

 
dd:

Je suis loin d'être un expert, je m'excuse donc par avance.

Tâche :

1) Utiliser plusieurs indicateurs. Un seul et même indicateur peut être utilisé avec différents paramètres (périodes) - comment les faire fonctionner en parallèle, pour réduire le temps de réception des signaux.

2) Parallèlement à la réception des signaux des indicateurs, effectuez une vérification constante et la fermeture des positions rentables ou perdantes. De plus, nous avons beaucoup de postes ouverts, donc ce processus doit être parallélisé en plusieurs parties. Par exemple, nous pouvons vérifier 1000 commandes en 3 ou 4 fils.

3) Parallèlement aux processus ci-dessus, utilisez les signaux reçus des indicateurs du point 1 pour acheter ou vendre.


Et le plus intéressant : comment paralléliser toutes ces tâches pour que le testeur soit disponible et que les optimisations dans le testeur soient possibles ?

Indiquez la voie à suivre, de préférence à l'aide d'exemples. Merci d'avance.

Avez-vous déjà ouvert le terminal ? En général, le testeur et l'optimiseur sont toujours disponibles en parallèle avec le trading sur le compte.

Je me demande combien de temps il faut pour recevoir les signaux des indicateurs si la question de la nécessité de les mettre en parallèle se pose.

 
Dmitry Fedoseev:

Avez-vous au moins ouvert le terminal une fois ? Le testeur et l'optimiseur sont toujours disponibles en parallèle avec le trading sur le compte.

Je me demande combien de temps il faut pour recevoir les signaux des indicateurs, si l'on se pose la question de la nécessité de les paralléliser ?

Je l'ai fait, et évidemment plus longtemps que le vôtre. Un tic est une seconde. Pendant ce temps, vous devez vérifier, disons, 4 indicateurs - construire des graphiques. Obtenez des signaux, achetez ou vendez, fermez 1000 ordres et ainsi de suite ... Et comme chaque milliseconde compte... Plus précisément, dans les comptes négatifs. Le temps, c'est de l'argent :)
 
dd:

1) Utilisez plusieurs indicateurs. Un seul et même indicateur peut être utilisé avec différents paramètres (périodes) - comment les faire fonctionner en parallèle, pour réduire le temps d'obtention des signaux ?

2) Parallèlement à la réception des signaux des indicateurs, effectuez un contrôle constant et fermez les positions rentables ou perdantes. De plus, nous avons beaucoup de postes ouverts, donc ce processus devrait être parallélisé en plusieurs parties. Par exemple, nous pouvons vérifier 1000 commandes en 3 ou 4 fils.

3) Parallèlement aux processus ci-dessus, utilisez les signaux reçus des indicateurs du point 1 pour acheter ou vendre.

Les indicateurs lancés sur un symbole fonctionnent en un seul flux. Mais s'ils sont bien écrits, il n'y aura pas de retard (il se comptera en millisecondes).

Mais toutes les opérations de trading peuvent être parallélisées à l'aide d'Expert Advisors / scripts supplémentaires. Appelez-les depuis l'EA principale si nécessaire, ou laissez-les fonctionner en permanence. Un exemple de la mise en œuvre peut être trouvé dans cet article. Vous pouvez aussi utiliser l'option asynchrone OrderSend, mais dans ce cas, il sera un peu plus difficile de la contrôler.


dd:

Et le plus intéressant : comment paralléliser toutes ces tâches pour que le testeur et l'optimisation dans le testeur soient disponibles ?

Vous n'avez pas besoin de tout cela pour le testeur, il fonctionne de manière synchrone et ne manque pas de ticks. Faites 2 variantes - pour le testeur et pour l'utilisateur en ligne (if ( IsTesting() ).

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

Les indicateurs fonctionnant sur le même outil sont tous exécutés dans le même fil. Mais si vous les écrivez correctement, il n'y aura pas de retard (il sera compté en millisecondes).

Mais toutes les opérations de trading peuvent être parallélisées à l'aide d'Expert Advisors / scripts supplémentaires. Appelez-les depuis l'EA principale si nécessaire, ou laissez-les fonctionner en permanence. Un exemple de la mise en œuvre peut être trouvé dans cet article. Ou bien, vous pouvez utiliser la commande asynchrone OrderSend, mais dans ce cas, le contrôle sera un peu plus difficile.


Pour le testeur, tout cela n'est pas nécessaire, il fonctionne de manière synchrone et ne saute pas de ticks. Faites 2 variantes - pour le testeur et pour l'utilisateur en ligne (if ( IsTesting() ).



Les indicateurs fonctionnant sur un seul instrument fonctionnent tous dans un seul fil. Mais si vous les écrivez bien, il n'y aura aucun retard (ils dureront quelques millisecondes).

--- Je ne comprends pas. Je ne vais pas écrire mes propres indicateurs. J'utilise des indicateurs OEM. Et le fait est que je veux les utiliser en parallèle pour réduire le temps de réponse...


Vous n'avez pas besoin de tout cela pour le testeur, il fonctionne de manière synchrone et ne saute pas de ticks. Faites 2 variantes - pour le testeur et pour l'utilisateur en ligne (if ( IsTesting() ).

---- Je ne comprends pas du tout. Qui n'en a pas besoin ? Il fonctionne de manière synchrone --- mais pour moi il faut l'inverse, pour tenir compte de mon asynchronie... Qu'est-ce que c'est que deux variantes ? J'ai une variante de mon EA et je veux l'exécuter dans le testeur, mais je veux paralléliser mes processus et le montrer dans le testeur.

Comme tout fonctionne de manière séquentielle, je commence à avoir des pertes.

 
dd:

--- Je ne comprends pas. Je ne vais pas écrire mes propres indicateurs. J'utilise les standards. Et le fait est que je veux les utiliser en parallèle pour réduire le temps de réponse...

Avez-vous mesuré le temps de réponse ? Vous perdrez plus sur le parallélisme.


dd:

---- Je ne comprends pas du tout. Qui n'en veut pas ? Il fonctionne en synchronisation --- mais j'ai besoin qu'il prenne en compte mon asynchronisme... Qu'est-ce que c'est que deux variantes ? J'ai une variante de mon EA et je veux l'exécuter dans le testeur, mais je veux paralléliser mes processus et le montrer dans le testeur.

Un EA :

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

Pourquoi tester la parallélisation dans le testeur de stratégie ?

 
dd:

Étant donné que tout est exécuté de manière séquentielle, je commence à avoir des drawdowns, et j'en ai beaucoup.

Répartir l'envoi des ordres de bourse ou utiliser OrderSendAsync

Si vous devez clôturer un ensemble de transactions, vous pouvez ouvrir un grand compteur, réaliser un bénéfice, puis clôturer calmement OrderCloseBy l'un après l'autre.
 
Andrey Khatimlianskii:

Répartir l'envoi des ordres de bourse ou utiliser OrderSendAsync

donc il ne s'agit pas seulement de l'envoi de la commande, il y a un tas d'autres vérifications qui sont faites. Mais elles sont toutes mises en file d'attente jusqu'à ce qu'une fonction se termine, l'autre n'est pas exécutée .....

Je l'ai déjà décrit dans l'énoncé du problème. Et c'est une tâche complexe. DLL ou chats ou autre - ce qui m'intéresse, c'est le scénario dans lequel je peux mettre ces tâches en parallèle et ainsi les exécuter dans le testeur pour comprendre ce qui se passe...

 
dd:

donc ce n'est pas seulement l'envoi du mandat, il y a un tas d'autres vérifications qui sont faites. Mais elles sont toutes mises en attente jusqu'à ce qu'une fonction se termine, l'autre n'est pas exécutée .....

Je l'ai décrit dans les termes du problème. Et c'est une tâche complexe. DLL ou chats ou autre - ce qui m'intéresse, c'est le scénario dans lequel je peux paralléliser ces tâches et continuer à les exécuter dans le testeur pour voir ce qui se passe...

Et combien de temps précieux vous perdez et quelles sont les conséquences ? Et quel serait le bénéfice s'il n'y avait pas de "perte" ?

 
Dmitry Fedoseev:

Et combien de temps précieux perdez-vous et quelles en sont les conséquences ? Et quel serait le bénéfice s'il n'y avait pas de "perte" ?

Il me faut 5 jours pour exécuter cette stratégie dans le testeur avec 24 cœurs à ma disposition. Et un seul noyau fonctionne. Sans parler du fait que le journal, un journal stupide dont personne n'a besoin pendant ce temps, peut gonfler jusqu'à des téraoctets ou deux. Et tout cela sans optimisations. Et ce journal stupide ne peut être désactivé d'aucune façon ...

Que pensez-vous si j'accélère le processus disons - 4 programmes, chacun sur son noyau - une augmentation de ce point 4 fois. Plus un processus distinct pour la clôture de 1000 transactions, par exemple, ou la décomposition de ce processus en 5 ou 10 fils, soit une multiplication par 10. Plus un processus distinct pour l'ouverture de positions par signaux ...

Je pense que de multiples fois...

Mais chaque milliseconde + décalage vers le courtier + décalage du courtier vers la bourse (si ce n'est pas une cuisine) est une perte colossale. Il est étrange que cela ne soit pas compris en Sibérie...
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...