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 ? )
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... :))
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 from2010.08.0100:00 to 2010.08.0900:00 CH 0 Tester 15:35:25 complete optimization started
LO 0 Core 115:35:25 agent process started
HK 0 Core 115:35:25 connecting to 127.0.0.1:3000
OK 0 Core 215:35:25 agent process started
DO 0 Core 215:35:25 connecting to 127.0.0.1:3001
DG 0 Core 215:35:26 connected
EK 0 Core 115:35:26 connected
NQ 0 Core 115:35:26 authorized (agent build 384)
QK 0 Core 215:35:26 authorized (agent build 384)
DI 0 Core 115:35:26 pass 0 started
LM 0 Core 215:35:26 pass 1 started
QK 0 Core 115:35:27 common synchronization completed
FD 0 Core 215:35:27 common synchronization completed
GR 0 Core 215:36:08 pass 1 returned result 10000.00in42 sec
RH 0 Core 215:36:08 pass 2 started
ON 0 Core 115:36:09 pass 0 returned result 10000.00in43 sec
ID 0 Core 115:36:09 pass 3 started
GK 0 Core 215:36:21 pass 2 returned result 10000.00in13 sec
QQ 0 Core 215:36:21 pass 4 started
PH 0 Core 115:36:21 pass 3 returned result 10000.00in12 sec
IR 0 Core 115:36:21 pass 5 started
ED 0 Core 215:36:34 pass 4 returned result 10000.00in13 sec
ON 0 Core 215:36:34 pass 6 started
MQ 0 Core 115:36:34 pass 5 returned result 10000.00in13 sec
GK 0 Core 115:36:34 pass 7 started
KN 0 Core 215:36:46 pass 6 returned result 10000.00in12 sec
ND 0 Core 215:36:46 pass 8 started
CJ 0 Core 115:36:47 pass 7 returned result 10000.00in13 sec
EP 0 Core 115:36:47 pass 9 started
PG 0 Core 215:36:59 pass 8 returned result 10000.00in13 sec
QO 0 Core 115:36:59 pass 9 returned result 10000.00in12 sec
MD 0 Tester 15:36:59 optimization finished, total passes 10
HS 0 Tester 15:36:59 optimization passed in1 minutes 34 seconds
CE 0 Core 115:36:59 connect closed
PI 0 Core 215: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 from2010.08.0100:00 to 2010.08.0900:00 FL 0 Tester 15:37:20 complete optimization started
QM 0 Core 115:37:20 connecting to 127.0.0.1:3000
MG 0 Core 215:37:20 connecting to 127.0.0.1:3001
MN 0 Core 115:37:20 connected
LR 0 Core 215:37:20 connected
FH 0 Core 115:37:20 authorized (agent build 384)
QR 0 Core 215:37:20 authorized (agent build 384)
DF 0 Core 115:37:20 pass 0 started
LJ 0 Core 215:37:20 pass 1 started
JR 0 Core 115:37:20 common synchronization completed
EK 0 Core 215:37:20 common synchronization completed
IK 0 Core 115:38:35 pass 0 returned result 10000.00in75 sec
KQ 0 Core 115:38:35 pass 2 started
QG 0 Core 215:38:36 pass 1 returned result 10000.00in76 sec
FM 0 Core 215:38:36 pass 3 started
JD 0 Core 115:39:16 pass 2 returned result 10000.00in41 sec
MN 0 Core 115:39:16 pass 4 started
QP 0 Core 215:39:17 pass 3 returned result 10000.00in41 sec
FJ 0 Core 215:39:17 pass 5 started
KM 0 Core 115:39:56 pass 4 returned result 10000.00in40 sec
CG 0 Core 115:39:56 pass 6 started
DJ 0 Core 215:39:57 pass 5 returned result 10000.00in40 sec
LP 0 Core 215:39:57 pass 7 started
IF 0 Core 115:40:37 pass 6 returned result 10000.00in41 sec
FL 0 Core 115:40:37 pass 8 started
DS 0 Core 215:40:38 pass 7 returned result 10000.00in41 sec
GI 0 Core 215:40:38 pass 9 started
KP 0 Core 115:41:18 pass 8 returned result 10000.00in41 sec
NH 0 Core 215:41:19 pass 9 returned result 10000.00in41 sec
MS 0 Tester 15:41:19 optimization finished, total passes 10
OJ 0 Tester 15:41:19 optimization passed in3 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
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& 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 :
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.
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
voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& 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 ?
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.
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" ?
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.
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.
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 ? )
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... :))
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.
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
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 :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.
On a l'impression d'avoir travaillé du dimanche au vendredi, sans repos... :))
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
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 ?
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.
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.
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.
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.
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.
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.
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.