Erreurs, bugs, questions - page 1776

 

Dans l'aide de Metatrader 4 à propos de l'indicateur iGator()

mode

[in]  Источник данных, идентификатор одной из линий индикатора. Mожет быть любой из следующих величин:

MODE_GATORJAW - синяя линия (линия челюсти аллигатора),
MODE_GATORTEETH - красная линия (линия зубов аллигатора),
MODE_GATORLIPS - зеленая линия (линия губ аллигатора).  


et ci-dessous un exemple

double diff=iGator(NULL,0,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_UPPER,1);


Source de données MODE_UPPER, je comprends qu'il y a une erreur dans l'aide

 

Erreur de compilation (ou plutôt pas de message d'erreur)

class A {
        A() { ::ArrayResize( i1, 1 ); }
        int i1[ ];
        int i2[1];
        void f1() const { i1[0] = 0; } //нет сообщения ошибки
        void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified

};
 

J'ai trouvé deux erreurs lors du traitement de l'événement de clic du bouton de la souris.

1. gérer l'événement de clic de la molette de la souris dans OnChartEvent(). L'idée est que la fonction génère l'événement (id == CHARTEVENT_MOUSE_MOVE) lorsque le bouton gauche de la souris est cliqué (avec et sans le maintenir), le bouton droit de la souris (avec et sans le maintenir), mais si la roue est cliquée, l'événement ne sera généré que lorsqu'elle est maintenue. Par exemple, si vous appuyez sur la touche centrale et la relâchez immédiatement, l'événement ne sera pas généré !

2. Après avoir traité la pression du bouton gauche de la souris (sparam == "1"), l'événement sparam == "0" sera généré. Après un clic sur le bouton droit de la souris (sparam == "2"), pour une raison quelconque, l'événement sparam == "0" n'est pas généré. Tous les boutons de la souris ne devraient-ils pas être gérés de la même manière ? Je passe sous silence le fait de cliquer sur la roue, car, comme je l'ai dit au point 1 - aucun événement n'est généré lorsque la roue est cliquée.

Vérifiez le code :

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Обработка события графика                                                                                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   switch(id)
     {
      case CHARTEVENT_MOUSE_MOVE:
         FuncMove(lparam,dparam,sparam);
         break;
     }
  }
//+------------------------------------------------------------------+
//| Функция обработки события перемещения мыши                                                          |
//+------------------------------------------------------------------+
void FuncMove(const long lparam,// Х координата
              const double dparam,// Y координата
              const string sparam          // Строковое значение статуса кнопки
              )
  {
   Print(__FUNCTION__,": sparam = "+sparam);
  }
//+------------------------------------------------------------------+
//| Функция деинициализации индикатора                                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Отписываемся от события передвижения мыши
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,false);
  }
//+------------------------------------------------------------------+
 
A100:

Erreur de compilation (ou plutôt pas de message d'erreur)

class A {
        A() { ::ArrayResize( i1, 1 ); }
        int i1[ ];
        int i2[1];
        void f1() const { i1[0] = 0; } //нет сообщения ошибки
        void f2() const { i2[0] = 0; } //Error: 'i2' - member of the constant object cannot be modified

};
dans la fonction f1, l'état de l'objet A n'est pas modifié, l'état du tableau dynamique A::i1 est modifié, les éléments A::i1 n'appartiennent pas à l'objet A
dans la fonction f2, l'état de l'objet A change, car le tableau A::i2 n'est pas dynamique - tous ses éléments appartiennent à l'objet A
 
Dratuti. Question : Comment puis-je envoyer un message à un utilisateur avec lequel je n'ai pas encore correspondu sur les navigateurs mobiles (android, apple) ? J'ai regardé depuis plusieurs appareils différents - nulle part il n'y a de bouton "envoyer un message", ainsi que "ajouter aux autres". La page de l'utilisateur ressemble à ceci, sans boutons :
 

Erreur de compilation

class A {};
class B {
        int A() { return 0; }
        void f( int ) {}
        void g() { f(A()); } //Error: 'A' - invalid cast operation
};
 
Andrey Sokolov:
Dratuti. Question : comment envoyer un message à un utilisateur avec lequel je n'ai pas encore correspondu sur les navigateurs mobiles (android, apple) ? J'ai regardé depuis plusieurs appareils différents - nulle part il n'y a de bouton "envoyer un message", ainsi que "ajouter aux autres". La page de l'utilisateur ressemble à ceci, sans boutons :

Je le dis depuis longtemps. Jusqu'à présent, ils n'ont rien dit.

 
Alexey Kozitsyn:

J'ai trouvé deux erreurs dans le traitement de l'événement du bouton de la souris.


Vérifions.
 
Alexander:
Vérifiez.

Merci, vérifiez le numéro de la première barre visible sur le graphique : ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ) ;

Le fait est que si vous désactivez le défilement du graphique et que vous surveillez la dernière barre visible, au moment d'une nouvelle bougie, son numéro change pour une raison quelconque, bien que le graphique ne bouge pas ! Le TF est M1 afin de pouvoir vérifier plus rapidement. Commencez par l'indicateur :

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
   {
    //--- Подписываемся на событие движения мыши
         ChartSetInteger( 0, CHART_EVENT_MOUSE_MOVE, true );
         //---
    return(INIT_SUCCEEDED);
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
   {

    return(rates_total);
   }
//+------------------------------------------------------------------+
//| Обработка события графика                                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
   {
    switch( id )        
        {
         case CHARTEVENT_MOUSE_MOVE:
                 Print( __FUNCTION__," "+TimeToString( TimeCurrent(), TIME_DATE|TIME_SECONDS )+": sparam = "+sparam+", ",(int)ChartGetInteger( 0, CHART_FIRST_VISIBLE_BAR ));
                 break;
        }
   }
 
Le produit passera-t-il le test automatique s'il (l'examinateur) est bouclé dans le code ?
Raison: