Discussion de l'article "Le MQL5 Cookbook : Commandes de la sous-fenêtre d'indicateur - Boutons" - page 6

 
tol64:

Pas nécessairement à chaque seconde, il y a une alternative sur un autre événement (déjà discuté). Veuillez me donner un exemple de la façon dont j'ai procédé ici. ) A condition que l'Expert Advisor ait besoin de cet événement, mais pas l'indicateur. Ce sera plus clair ainsi.

P.S. Correction. J'ai fait une erreur. )) Votre variante n'est pas plus correcte. Elle ne convient pas du tout. Il est donc préférable de donner un exemple basé sur la condition ci-dessus.

Si l'indicateur n'a pas besoin de cet événement, il ne le traite tout simplement pas. De même, le conseiller expert ne doit pas désactiver les événements dont il n'a pas besoin. Il peut les activer, mais pas les désactiver. Car ce n'est pas son affaire de savoir quels événements passent par sa fenêtre et qui peut en avoir besoin.

 
C-4:

Si l'indicateur n'a pas besoin de cet événement, il ne le traite tout simplement pas. De même, le conseiller expert ne doit pas désactiver les événements dont il n'a pas besoin. Il peut les activer, mais pas les désactiver. Car ce n'est pas son affaire de savoir quels événements passent par sa fenêtre et qui peut en avoir besoin.

Le fait est que cet événement peut être non traité (il suffit de l'oublier). Mais cela ne signifie pas que la file d'attente de la fonction OnChartEvent() ne sera pas remplie de choses dont on n'a pas besoin à un moment donné.

Cela représente des milliers d'événements inutiles par minute. Et s'il y a plusieurs programmes sur le graphique ? Pas d'argument ?

On gaspille beaucoup moins de ressources si l'on vérifie toutes les secondes si un événement est activé, et si on l'active s'il n'est pas activé actuellement mais qu'il est nécessaire. Ce n'est pas non plus un argument ? Alors faites-le à votre façon.

Je n'ai pas d'autres arguments. ) Je m'en tiendrai à mon opinion, car je n'ai rien entendu qui puisse me faire changer d'avis.

C'est bien. J'ai alors une question à poser à ceux qui pensent que cet événement ne doit pas être désactivé par le programme qui l'a activé.

Pourquoi ? )

C'est-à-dire :

1. Pourquoi laisser quelque chose qui n'est pas nécessaire (des milliers d'événements par minute) ?

2) (dans une autre formulation) Pourquoi dépenser plus de ressources quand on peut en dépenser moins ?

Des options telles que "si un événement n'est pas nécessaire, il suffit de ne pas le traiter" ne me plaisent pas du tout. Vous ne pouvez pas désactiver l'un, vous ne pouvez pas désactiver l'autre, et qu'est-ce que cela vous apportera ?

 

Cher auteur de l'article, c'est en vain que vous n'expliquez pas les contradictions internes de vos produits, que vous essayez de combattre et d'enseigner aux "débutants".

Ainsi, l'auteur a montré les moments glissants qui peuvent perturber le bon fonctionnement de son indicateur. Il est maintenant clair pour le "débutant" que.. :

  1. Lorsque vous supprimez un programme du graphique, vous devez veiller à ne pas nuire aux autres programmes.
  2. En aucun cas vous ne devez placer des programmes contradictoires sur un graphique, mais il est préférable de les placer dans d'autres fenêtres du graphique du symbole en question. Si quelqu'un ne le sait pas, un seul symbole peut ouvrir un nombre suffisant de fenêtres graphiques.
  3. Chaque graphique possède ses propres propriétés. Par conséquent, en les modifiant, vous risquez de perturber le bon fonctionnement d'autres programmes. Il ne faut en aucun cas agir de la sorte !
  4. Il faut être "infaillible". En d'autres termes, si un virus sous la forme d'un indicateur ou d'un autre programme tente de modifier les propriétés d'un graphique que vous utilisez dans vos programmes, vous devez le vérifier. Et si cela se produit régulièrement, supprimez le virus !
  5. Les erreurs commises dans les programmes destinés aux marchés financiers entraînent le plus souvent des pertes considérables. Ne l'oubliez pas !
 
tol64:

1. Pourquoi laisser ce qui n'est pas nécessaire (des milliers d'événements par minute) ?

2) (dans une autre formulation) Pourquoi dépenser plus de ressources quand on peut en dépenser moins ?

Des options telles que "si un événement n'est pas nécessaire, il suffit de ne pas le traiter" ne me plaisent pas du tout. Vous ne pouvez pas désactiver l'un, vous ne pouvez pas désactiver l'autre et qu'est-ce que vous en retirerez ?

Vous obtiendrez un code complètement contrôlé.

Vous mettez l'accent sur les performances, mais est-ce qu'elles diminuent tellement avec cet événement activé ? Pour répondre à cette question, j'ai spécialement écrit un Expert Advisor simple qui teste cet événement. Après avoir testé différentes combinaisons, j'ai obtenu le tableau suivant :

Mode
% de charge CPU
EVENT_MOVE_MOUSE est activé, le traitement de cet événement dans l'Expert Advisor est activé.9%
EVENT_MOVE_MOUSE est activé, le traitement de cet événement dans l'Expert Advisor est désactivé.
6%
EVENT_MOVE_MOUSE est désactivé, le traitement de cet événement dans l'Expert Advisor est désactivé.
5-6%
Le conseiller expert est désactivé. Le graphique est fermé. Il suffit de déplacer la souris sur la fenêtre MetaTrader.
5-6%

Comme vous pouvez le constater, la charge réelle n'augmente que lorsque le traitement de cet événement a lieu. Il convient de noter qu'à en juger par la charge du processeur, MetaTrader suit la position de la souris, que l'abonnement à cet événement soit activé ou non. En général, il s'avère qu'il est inutile d'économiser des ressources hypothétiques, car le suivi de la souris sera effectué de toute façon.

Testez le code de l'Expert Advisor :

//+------------------------------------------------------------------+
//|Test.mq5 |
//| Copyright 2013, MetaQuotes Software Corp.
//| http ://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0, "Edit", OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, "Edit", OBJPROP_XSIZE, 400);
   //Activer et désactiver l'événement comme bon nous semble
   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, false);
   
//---
   return(INIT_SUCCEEDED);
  }
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   //Commenter le bloc s'il n'est pas nécessaire de traiter l'événement entrant.
   if(id == CHARTEVENT_MOUSE_MOVE)
   {
      string label = (string)lparam + " " + (string)dparam + " " + sparam;
      //printf(sparam) ;
      ObjectSetString(0, "Edit", OBJPROP_TEXT, label);
      ChartRedraw(0);
   }
}
Знакомство с MQL5: написание простого советника и индикатора
Знакомство с MQL5: написание простого советника и индикатора
  • 2010.03.16
  • Denis Zyatkevich
  • www.mql5.com
В этой статье проведен краткий обзор языка MQL5, приведен пример написания советника и индикатора. Данная статья ориентирована как на читателей, знакомых с программированием на языке MQL4, так и на тех, кто только начинает знакомство с программированием торговых систем и индикаторов.
 

1. Il faut toujours envisager le cas où un événement est manqué sur la pile. Si quelque chose de critique peut se produire dans le cas où un événement est manqué, c'est très mauvais.

2. Personnaliser le graphique à sa guise n'est pas une bonne chose. C'est à peu près la même chose que de trader avec une machine de trading automatisée sans magik.

 
DC2008:

Cher auteur de l'article, c'est en vain que vous n'expliquez pas les contradictions internes de vos produits, que vous essayez de combattre et d'enseigner aux "débutants".

Ainsi, l'auteur a montré les moments glissants qui peuvent perturber le bon fonctionnement de son indicateur. Génial, maintenant il est clair pour un "débutant" que :

...

Vous pouvez inventer 20 règles supplémentaires pour justifier votre sentiment d'importance personnelle, vous vous embrouillerez alors définitivement et vous "aiderez" les débutants. Dans ce cas, vous avez observé des contradictions et des malentendus. )

C-4:

Vous obtiendrez un code entièrement contrôlé.

...

Il sera contrôlé lorsque vous le contrôlerez. Dans ce cas, vous proposez de tout laisser sans contrôle, c'est-à-dire de laisser un événement qui n'est pas nécessaire pour le moment et qui peut être reproduit très souvent. Sur des exemples simples, cela peut ne pas être perceptible. Peut-être verrez-vous la nécessité de désactiver tout ce qui n'est pas nécessaire dans des programmes plus complexes.

 
TheXpert:

1. Il faut toujours envisager le cas où un événement est manqué sur la pile. Si quelque chose de critique peut se produire dans le cas où un événement est manqué, c'est très mauvais.

...

Comme lorsque la file d'attente des événements déborde, par exemple ?
 

tol64:

Excusez-moi, est-ce que par hasard je vous distrais de l'écriture d'un autre tutoriel ou d'une autre recette ?

Si ce n'est pas le cas, continuons à discuter de votre article sur le contrôle dans la sous-fenêtre de l'indicateur. Vous proposez donc une solution de masse (ou une idée) pour créer un menu pratique dans un indicateur. Bien, l'objectif de l'article est tout à fait louable ! Mais comment un programmeur "débutant" peut-il utiliser tout cet arsenal ? Où placer les fonctions personnalisées ? Démontrez-le par l'exemple. Et en même temps, expliquez ce qu'il faut corriger dans le code pour utiliser, par exemple, 5 boutons ? Il s'agit là d'une question de débutant.

 
tol64:
Comme lorsque la file d'attente des événements déborde ?
Oui, c'est ça.
 
DC2008:
Êtes-vous sûr que tout est parfait dans votre article ?