Souhaits pour MT5 - page 48

 

Yedelkin:

Explication. Si un conseiller expert ne traite pas les ticks pour un symbole auquel il est attaché à un graphique, la génération continue d'événementsNewTick pour ce symbole entraînera un débordement de la file d'attente des événements traités par cet EA.

Qu'est-ce que tu veux dire ?

Il n'y a pas de OnTick() dans l'Expert Advisor, mais les événements NewTick sont mis en file d'attente ?

Comment savez-vous ce qui a analysé la file d'attente ? )

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
Yedelkin:

Je n'ai pas trouvé de moyen de désactiver le flux de ticks (événementNewTick) pour le symbole avec le conseiller expert attaché au graphique, si nécessaire.


J'ai l'impression d'avoir travaillé du dimanche au vendredi sans aucun repos... :))

 
komposter:

Qu'est-ce que tu veux dire ?

Comment avez-vous su... ?

Je l'ai appris de deux manières. J'ai d'abord fait connaissance avec la combinaison EventChartCustom - OnChartEvent sur l'exemple d'un simple Expert Advisor collectant des signaux d'indicateurs à partir de symboles étrangers. En même temps, le conseiller expert ne travaille pas avec les ticks de son propre symbole, la fonction Ontick() dans le code du conseiller expert a été commentée. En exécutant l'EA dans le testeur, j'ai constaté que le temps de parcours diffère selon le symbole attaché à l'EA. Voir, par exemple, l'exemple ci-dessous. Avec les mêmes paramètres d'optimisation, les temps d'exécution sont sensiblement différents.

OE      0       Tester  15:35:25        Experts\Ye00-01-0 Event.ex5 on USDRUR,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
 CH      0       Tester  15:35:25        complete optimization started
LO      0       Core 1  15:35:25        agent process started
HK      0       Core 1  15:35:25        connecting to 127.0.0.1:3000
OK      0       Core 2  15:35:25        agent process started
DO      0       Core 2  15:35:25        connecting to 127.0.0.1:3001
DG      0       Core 2  15:35:26        connected
EK      0       Core 1  15:35:26        connected
NQ      0       Core 1  15:35:26        authorized (agent build 384)
QK      0       Core 2  15:35:26        authorized (agent build 384)
DI      0       Core 1  15:35:26        pass 0 started
LM      0       Core 2  15:35:26        pass 1 started
QK      0       Core 1  15:35:27        common synchronization completed
FD      0       Core 2  15:35:27        common synchronization completed
GR      0       Core 2  15:36:08        pass 1 returned result 10000.00 in 42 sec
RH      0       Core 2  15:36:08        pass 2 started
ON      0       Core 1  15:36:09        pass 0 returned result 10000.00 in 43 sec
ID      0       Core 1  15:36:09        pass 3 started
GK      0       Core 2  15:36:21        pass 2 returned result 10000.00 in 13 sec
QQ      0       Core 2  15:36:21        pass 4 started
PH      0       Core 1  15:36:21        pass 3 returned result 10000.00 in 12 sec
IR      0       Core 1  15:36:21        pass 5 started
ED      0       Core 2  15:36:34        pass 4 returned result 10000.00 in 13 sec
ON      0       Core 2  15:36:34        pass 6 started
MQ      0       Core 1  15:36:34        pass 5 returned result 10000.00 in 13 sec
GK      0       Core 1  15:36:34        pass 7 started
KN      0       Core 2  15:36:46        pass 6 returned result 10000.00 in 12 sec
ND      0       Core 2  15:36:46        pass 8 started
CJ      0       Core 1  15:36:47        pass 7 returned result 10000.00 in 13 sec
EP      0       Core 1  15:36:47        pass 9 started
PG      0       Core 2  15:36:59        pass 8 returned result 10000.00 in 13 sec
QO      0       Core 1  15:36:59        pass 9 returned result 10000.00 in 12 sec
MD      0       Tester  15:36:59        optimization finished, total passes 10
HS      0       Tester  15:36:59        optimization passed in 1 minutes 34 seconds
CE      0       Core 1  15:36:59        connect closed
PI      0       Core 2  15:36:59        connect closed
ON      1       Tester  15:37:20        genetics turned off because 10 passes, to use genetics increase amount of optimized parameters
RQ      0       Tester  15:37:20        Experts\Ye00-01-0 Event.ex5 on EURGBP,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
 FL      0       Tester  15:37:20        complete optimization started
QM      0       Core 1  15:37:20        connecting to 127.0.0.1:3000
MG      0       Core 2  15:37:20        connecting to 127.0.0.1:3001
MN      0       Core 1  15:37:20        connected
LR      0       Core 2  15:37:20        connected
FH      0       Core 1  15:37:20        authorized (agent build 384)
QR      0       Core 2  15:37:20        authorized (agent build 384)
DF      0       Core 1  15:37:20        pass 0 started
LJ      0       Core 2  15:37:20        pass 1 started
JR      0       Core 1  15:37:20        common synchronization completed
EK      0       Core 2  15:37:20        common synchronization completed
IK      0       Core 1  15:38:35        pass 0 returned result 10000.00 in 75 sec
KQ      0       Core 1  15:38:35        pass 2 started
QG      0       Core 2  15:38:36        pass 1 returned result 10000.00 in 76 sec
FM      0       Core 2  15:38:36        pass 3 started
JD      0       Core 1  15:39:16        pass 2 returned result 10000.00 in 41 sec
MN      0       Core 1  15:39:16        pass 4 started
QP      0       Core 2  15:39:17        pass 3 returned result 10000.00 in 41 sec
FJ      0       Core 2  15:39:17        pass 5 started
KM      0       Core 1  15:39:56        pass 4 returned result 10000.00 in 40 sec
CG      0       Core 1  15:39:56        pass 6 started
DJ      0       Core 2  15:39:57        pass 5 returned result 10000.00 in 40 sec
LP      0       Core 2  15:39:57        pass 7 started
IF      0       Core 1  15:40:37        pass 6 returned result 10000.00 in 41 sec
FL      0       Core 1  15:40:37        pass 8 started
DS      0       Core 2  15:40:38        pass 7 returned result 10000.00 in 41 sec
GI      0       Core 2  15:40:38        pass 9 started
KP      0       Core 1  15:41:18        pass 8 returned result 10000.00 in 41 sec
NH      0       Core 2  15:41:19        pass 9 returned result 10000.00 in 41 sec
MS      0       Tester  15:41:19        optimization finished, total passes 10
OJ      0       Tester  15:41:19        optimization passed in 3 minutes 59 seconds

komposter:

Le conseiller expert n'a pas de OnTick(), alors que les événements NewTick sont mis en file d'attente ?

Pour vérifier la réponse à cette question (la deuxième méthode), j'ai modifié le code de l'Expert Advisor de la manière suivante

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }
C'est-à-dire que j'ai inséré une ligne avec un fond jaune pour détecter le fait de la réception de nouveaux ticks par le symbole. Les résultats montrent que les ticks pour le symbole, auquel le conseiller expert est attaché, sont reçus régulièrement :
DS      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
QI      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
IG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
LO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PI      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
DE      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DH      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
EJ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
LE      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
PP      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LP      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PJ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38

Eh bien, puisque le manuel dit " l'événement NewTick est généré lorsqu'un nouveau tick est reçu par un symbole, au graphique duquel le Conseiller Expert est attaché"Le fait que de nouveaux ticks soient reçus devrait entraîner la génération de l'événementNewTick.

À en juger par votre question, vous pensez qu'aucun événement NewTick n'est généré lorsque OnTick() est désactivé ? Mais je n'ai pas trouvé cette information dans le manuel.

 
sergeev:

On a l'impression d'avoir travaillé du dimanche au vendredi, sans repos... :))

À en juger par la ligne, connaissez-vous la bonne solution ? - Donnez-moi un indice !
 
Yedelkin:
C'est-à-dire que j'ai inséré une ligne sur fond jaune pour détecter le fait que de nouveaux ticks arrivent par symbole. D'après les résultats, vous pouvez voir que les ticks de

au symbole auquel le conseiller expert est attaché sont reçues régulièrement :


Avez-vous vérifié quel événement provoque l'appel de OnChartEvent avant d'appeler l'événement personnalisé ?

-------------

si

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }


vous mettez un simple EA et le laissez tourner dans le testeur, il ne s'active pas.

Avez-vous d'autres fonctions qui appellent OnChartEvent ?

 
sergeev:

avez-vous d'autres fonctions qui appellent OnChartEvent.

Oui, bien sûr. Puisque le conseiller expert collecte les signaux d'indicateurs à partir de symboles tiers en utilisant la liaison EventChartCustom - OnChartEvent, chaque indicateur possède sa propre instance de la fonction EventChartCustom(). Le premier paramètre de chaque instance de la fonction EventChartCustom() contient un identifiant de graphique, auquel notre EA est attaché ; le second paramètre est zéro.

sergeev:

S'il est inséré dans un conseiller expert, il ne sera pas activé.

Il ne s'agit que d'une partie du code, - du conseiller expert qui collecte les signaux d'indicateurs provenant d'autres symboles. S'il n'y a pas d'indicateurs, cette partie du code (la fonction OnChartEvent) ne traitera pas les événements personnalisés en raison de leur absence.

sergeev:

Avez-vous vérifié quel événement provoque l'appel de OnChartEvent avant d'appeler l'événement personnalisé ?

Non, un peu faux. Je voulais voir si les ticks sont reçus par le symbole, au graphique duquel l'Expert Advisor est attaché, lorsque la fonction OnChartEvent() traite les événements personnalisés provenant des indicateurs d'autres symboles. On peut voir que les ticks de l'EURGBP sont reçus. Sur la base de la référence, je conclus que lorsque de nouveaux ticks arrivent pour le symbole, l'événement NewTick est généré.

 

Il n'est pas possible de déterminer laquelle de vos fonctions utilisées a conduit à des résultats de chronométrage différents. Sans code complet, c'est juste une supposition par le marc de café.

NewTick n'est pas directement lié à OnChartEvent de quelque manière que ce soit. C'est pourquoi le mécanisme de suivi des files d'attente que vous proposez est plutôt artificiel. Je ne suis pas sûr que ce soit correct.

Dans ce cas, je ne prétends pas que c'est NewTick qui crée les retards de test. Et je pense que ce sont les mécanismes de vos fixations qui sont à blâmer, pas l'événement lui-même.

 
sergeev:

Il n'est pas possible de déterminer laquelle de vos fonctions utilisées a conduit à des résultats de chronométrage différents. Sans code complet, c'est juste une supposition par le marc de café.

NewTick n'est pas directement lié à OnChartEvent de quelque manière que ce soit. C'est pourquoi le mécanisme de suivi des files d'attente que vous proposez est plutôt artificiel. Je ne suis pas sûr que ce soit correct.

Dans ce cas, je ne prétends pas que c'est NewTick qui crée les retards de test. Et je pense que ce sont vos mécanismes de liaison qui sont à blâmer, pas l'événement lui-même.

Ce n'est pas ce que je voulais dire depuis le début. Dans mon premier message, j'ai dit que je n'avais pas trouvé le moyen de désactiver les événements tick pour un symbole avec un Expert Advisor attaché à son graphique. Vous avez réagi à cette phrase, mais vous n'avez pas fourni un moyen de désactiver le flux de ticks pour le symbole requis, si nécessaire. J'en conclus que non seulement moi, mais vous aussi ne connaissez pas cette voie. Ma suggestion est donc toujours d'actualité : introduisez une fonction de basculement qui vous permette de désactiver par programme la génération de l'événement . NewTickpour le symbole qui a un conseiller expert attaché à son graphique.

En ce qui concerne les commentaires sur le "devinement par le gee" et "l'artificialité des mécanismes de suivi des files d'attente" - je n'ai pas proposé de regarder dans le code depuis le début et de chercher une réponse à la question "pourquoi cela se passe-t-il de cette façon ?". Comme vous pouvez le voir dans ma suggestion, j'ai déjà trouvé la réponse pour moi-même. Mais considérons le problème d'un point de vue plus abstrait, sans focaliser notre attention sur le code d'un conseiller expert particulier.

sergeev:

NewTick n'est en aucun cas relié directement à OnChartEvent.

Ok, supposons que ça l'est. Ainsi, NewTick estindirectement lié à OnChartEvent, mais il est connecté. Je l'ai déjà dit dans l'explication mais je vais le répéter encore une fois. Vous savez mieux que moi qu'il existe une "file d'attente commune d'événements" où s'empilent tous les événements qui se produisent, qu'ils soient prédéfinis ou définis par l'utilisateur. Ces événements sont traités un par un, dans l'ordre où ils sont reçus. Comme la file d'attente a une taille limitée, lorsqu'elle est pleine, les anciens événements sont supprimés sans être traités. C'est bien ça ?

Ainsi, il s'avère que si le conseiller expert ne prévoit pas de traiter les événements NewTick, mais que ces événements sont toujours générés, alors ma file d'attente générale d'événements sera simplement encombrée d'événements NewTick inutiles, et il y aura un risque de ne pas traiter les événements utilisateur obsolètes qui doivent être traités par le conseiller expert. J'espère que vous êtes d'accord avec cette conclusion. C'est pourquoi j'ai fait la suggestion ci-dessus.

Bien sûr, je ne connais pas toutes les subtilités du fonctionnement de la file d'attente des événements et de l'événement NewTick. Il se peut donc que je me trompe dans certaines conclusions et je considérerai toute explication avec intérêt.

sergeev:

Dans ce cas, je ne prétends pas que c'est NewTick qui crée les retards de test. Et je pense que ce sont les mécanismes de vos fixations qui sont à blâmer, pas l'événement lui-même.

Pour référence. Le Conseiller Expert articule les instances d'un seul et même indicateur avec les mêmes paramètres et avec le même "mécanisme de liaison" sur les symboles adjacents, sur un seul et même intervalle de temps. La liaison est la même : EventChartCustom - OnChartEvent.

Ai-je bien compris que vous êtes d'accord avec l'affirmation selon laquelle "s'il n'y a pas de OnTick() dans un conseiller expert, les événements NewTick ne sont pas du tout mis en file d'attente" ?

 

Pourquoi deviner et inventer des hypothèses ?

votre demande d'"introduire une fonction de commutation permettant de désactiver de manière programmatique la génération d'événements" . NewTickpour le symbole auquel le conseiller expert est attaché au graphique. " est clair.

Écrivez à Servicedesk.

tout le reste, c'est se battre contre des moulins à vent.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
sergeev:

Pourquoi deviner et concocter des hypothèses ?

tout le reste est une lutte contre des moulins à vent.

Vous ne dites rien :) Certains ont l'habitude de travailler à l'aveuglette, tandis que d'autres cherchent à en savoir plus sur le phénomène à endiguer. Les hypothèses naissent en l'absence de telle ou telle information. Merci de participer à la discussion.

J'ai écrit au SD. Je ne savais pas que des suggestions pouvaient y être adressées.