Questions d'un "mannequin - page 7

 
kPVT:

J'ai un expert avec lequel j'essaie de faire face aux événements.

Je reçois des événements qui ne correspondent pas à des actions.

Correspondant exactement à un clic sur le graphique et à un clic sur un bouton

Un événement controversé id=9(CHARTEVENT_CUSTOM), qui est généré lorsque, par exemple, le graphique est déplacé et qu'il y a environ 10 événements similaires.

L'événementCHARTEVENT_OBJECT_ENDEDIT n'a pas été vérifié.

Tout n'est pas clair avec tout le reste. Soit la description ne correspond pas au numéro de l'événement, soit l'événement de création d'un objet est généré de manière incorrecte lors de la création manuelle d'un objet.

Dans l'ensemble, aidez-nous, s'il vous plaît.

Tu ferais mieux de faire comme ça :

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

Je fais probablement quelque chose de mal, mais je vais essayer de décrire plus en détail les raisons de mon incompréhension.

AlexSTAL:

Vous affectez initialement des correspondances numériques aux constantes numériques déjà affectées CHARTEVENT_XXXXXXXXXXX...

Où puis-je voir la valeur numérique des constantes CHARTEVENT_XXXXXXXXXXX ?

Je ne l'ai pas trouvé, j'ai donc expérimenté et découvert queCHARTEVENT_KEYDOWN = 0 et CHARTEVENT_CLICK = 4, ce qui correspond à l'ordre de description de ces constantes dans l'aide.

J'ai attribué des numéros aux autres événements en conséquence, il y a donc un tableau event[10].

Rosh:

Malheureusement, je ne comprends pas votre question. Qu'est-ce qui ne va pas exactement ?

Sur la base de ma numérotation des événements et de l'utilisation du conseiller expert de mon poste précédent :

Par exemple, je dessine une ligne de tendance -> événementCHARTEVENT_OBJECT_CHANGE,

déplacer cette ligne -> l'événementCHARTEVENT_OBJECT_CHANGE,

modification des propriétés via le menu -> 2 événementsCHARTEVENT_CHART_CHANGE et CHARTEVENT_CUSTOM,

supprimez-le en appuyant sur la touche Del -> événement uniquement CHARTEVENT_KEYDOWN, (si la numérotation de l'événement est erronée, il devrait toujours y avoir 2 événements, la suppression et la pression du bouton).

Tout ceci est basé sur ma numérotation.

Suivant...

J'utilise un conseiller expert:

Dessiner une ligne de tendance -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

déplacer cette ligne -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

Je change les propriétés via le menu -> ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716 et ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=

Je le supprime en appuyant sur Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=

La situation ne s'est pas éclaircie.

Juste au cas où :

MT5 64x - build 458.

Le système est W7 64x Home Extended.

Merci pour votre réactivité ;))




Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
kPVT:

Je fais probablement quelque chose de mal, mais je vais essayer de décrire plus en détail la raison de mon incompréhension.

Où puis-je trouver la valeur numérique des constantes CHARTEVENT_XXXXXXXXX ?

Je ne l'ai pas trouvé, j'ai donc expérimenté et découvert queCHARTEVENT_KEYDOWN = 0 et CHARTEVENT_CLICK = 4, ce qui correspond à l'ordre de description de ces constantes dans l'aide.

J'ai donné au reste des événements des numéros en conséquence, c'est ainsi que le tableau event[10] s'est avéré.

Cela ne doit en aucun cas être fait !

Les valeurs numériques sont attribuées par le développeur et peuvent être modifiées à tout moment.

Seules les constantes de caractères peuvent être utilisées

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

oncleVic vous a donné un exemple d'utilisation correcte (ou mon extrait d'aide).

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

Qu'est-ce que tu fais ? Pourquoi auriez-vous besoin d'une représentation numérique ?

 
AlexSTAL:

Cela ne doit en aucun cas être fait !

Les valeurs numériques sont attribuées par le développeur et peuvent être modifiées à tout moment.

Seules les constantes de caractères peuvent être utilisées

OK. Je suis d'accord que vous ne devez pas le faire.

Oubliez mon travail manuel).

Continuons...

AlexSTAL:

oncleVic vous a donné un exemple d'utilisation correcte (enfin, ou mon aide)

Comme je l'ai écrit ci-dessus, en utilisant l'exemplede l'oncleVic, vous obtenez également des événements qui ne correspondent pas à l'action.

kPVT:

Dessin d'une ligne de tendance -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716 Au lieu deCHARTEVENT_OBJECT_CREATE.

.....

le supprimer en appuyant sur Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=Au lieu deCHARTEVENT_OBJECT_DELETE et ensuite CHARTEVENT_KEYDOWN

AlexSTAL:

Qu'est-ce que tu fais ? Pourquoi auriez-vous besoin d'une représentation numérique ?

C'est une longue explication, et ça n'a pas d'importance. Oublions ma numérotation.

L'essentiel est que j'essaie de donner un sens aux événements, mais même en utilisant l'exempled'oncleVic, je ne comprends pas l'incohérence entre les événements générés et les actions effectuées.

 
kPVT:

OK. Je suis d'accord que vous ne pouvez pas faire ça.

Oubliez mes soucis...).

Continuons...

Comme je l'ai écrit ci-dessus, en utilisant l'exemplede l'oncleVic, nous obtenons également des événements qui ne correspondent pas à l'action.

kPVT:


Ajoutez-le à l'initialisation :

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

Tu vas t'en sortir :

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Alex, merci beaucoup, c'est réglé.

AlexSTAL:

Ajouter à l'initialisation :

....

Ajouté au bloc d'experts

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

Chaque chose est à sa place.

J'ai consulté l'aide, il n'est écrit nulle part que ces deux événements doivent être "initialisés" pour que tous les autres événements soient corrects.

Je les ai commentés et tout fonctionne.

Il s'avère que si l'indicateur/conseiller expert n'a pas de bloc OnInit, il y a un problème avec les événements.

C'est peut-être l'idée, mais les programmeurs de mql5 devraient le savoir, juste au cas où.

 
J'ai généré un Expert Advisor dans Wizard, mais le testeur génère un Core 1 tester arrêté parce que OnInit erreur critique, quelqu'un a rencontré ce problème ? Comment est-il résolu ? Après tout, Wizard, OK, j'aurais fait une erreur là ...
 
Europa:
J'ai généré un Expert Advisor dans Wizard, mais le testeur génère un Core 1 qui s'est arrêté à cause de l'erreur critique OnInit, quelqu'un a-t-il rencontré ce problème ? Comment le résoudre ? Après tout, Wizard, j'aurais raté quelque chose là...
Veuillez joindre le code source. Et les paramètres de test.
 
uncleVic:
Joignez le code source résultant. Et les paramètres de test.
Dossiers :
TheFirst.mq5  7 kb
 
Europa:

Il ne s'est pas reproduit.

J'ai demandé plus de paramètres de test. Je l'ai fait :

La version et le débit binaire de MT5.