Erreurs, bugs, questions - page 1680

 
fxsaber:

Dans le magazine.

BCS-MetaTrader5, réel, 1415. C'est arrivé quand je suis passé de la démo au compte réel. Aucun conseiller expert ou indicateur n'était en cours d'exécution. La fenêtre du cockpit était ouverte.

J'ai écrit sur ce bug

https://www.mql5.com/ru/forum/95131

invalid book transaction
invalid book transaction
  • avis : 2
  • www.mql5.com
Раньше не было, появилось сегодня (реал). Что это...
 
prostotrader:
Que sont ces astérisques sous le titre du sujet ? Et le nombre de critiques aussi.
 
fxsaber:
Que sont ces astérisques sous le titre du sujet ? Et le nombre de critiques.
À propos, je me demande depuis longtemps où doivent être placées ces étoiles pour les thèmes.
 

En mode débogage, comment puis-je savoir d'où est appelée la fonction dans laquelle je me trouve actuellement ?

En gros, je voudrais avoir accès à un arbre d'appel de fonctions/méthodes imbriquées. Est-ce possible ?

 
fxsaber:
En mode débogage, comment puis-je savoir d'où a été appelée la fonction dans laquelle je me trouve actuellement ?

En mode "Pas à pas", consultez l'onglet "Débogage" un par un :

étapes

 
Karputov Vladimir:

En mode "Pas à pas", consultez l'onglet "Débogage" un par un :

Merci. Je n'arrive pas à comprendre pourquoi l'indicateur appelle OnCalculate deux fois au début. J'aimerais savoir à quel événement il réagit. Malheureusement, je ne vois aucun événement dans l'onglet de débogage.
 
fxsaber:
Merci. Je ne comprends pas pourquoi, au début, l'indicateur appelle OnCalculate deux fois. J'aimerais savoir à quel événement correspond cette réponse. Aucun événement n'est visible sur le débogage, malheureusement.

Cela se produit parfois deux fois, parfois une fois, peut-être même trois fois : vous mettez ce code dans Oncalculate() -.

//+------------------------------------------------------------------+
//|  Accelerator/Decelerator Oscillator                              |
//+------------------------------------------------------------------+
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[])
  {
   Print(__FUNCTION__,", rates_total ",rates_total,", prev_calculated ",prev_calculated);

il sera clair lorsque l'historique est échangé (lorsque l'historique est échangé prev_calculated==0).

 
Karputov Vladimir:

Cela se produit parfois deux fois, parfois une fois, peut-être même trois fois : vous mettez ce code dans Oncalculate() -

il sera clair quand l'échange d'historique se produit (quand l'échange d'historique prev_calculé==0).

Nan, je l'utilise en RTS maintenant, quand les kotirs sont debout. J'ai compris que c'est appelé une fois, et le débogueur ment, en montrant comme si c'était deux. Code pour jouer (exécuter sur un personnage où il n'y a pas de ticks)

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

int Func(){ return(0); }

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(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо
  return(Func()); // здесь поставить точку останова (F9)
}

Après avoir appuyé sur F5, il y aura un point d'arrêt. Et après une seconde pression sur F5 - de même. Bien que cela ne devrait pas être - comme une confirmation, vous pouvez raccourcir la ligne qui est dans le code et essayer avec elle.

 
fxsaber:

Nan, je l'utilise en RTS maintenant, quand les kotirs sont debout. J'ai compris qu'il n'est appelé qu'une fois, et que le débogueur ment, en montrant comme si c'était deux. Code pour jouer (exécuter sur un personnage où il n'y a pas de ticks)

Après avoir appuyé sur F5, il y aura un point d'arrêt. Et après une seconde pression sur F5 - de même. Cela ne devrait pas être le cas - pour confirmer, vous pouvez supprimer la ligne qui se trouve dans le code et essayer avec elle.

Cela ne fait aucune différence que les citations partent ou restent. Vous devez contrôler la condition prev_calculate==0 dans l'indicateur - il s'agit de l'échange d'historique et le deuxième point - le mode d'épargne du recalcul des barres modifiées, c'est-à-dire en fait, rates_total -prev_calculate+1.
 
Karputov Vladimir:
Cela ne fait aucune différence si les citations sont en cours ou debout. Vous devez contrôler la condition prev_calculate==0 dans l'indicateur - c'est l'échange de l'historique et le deuxième point - le mode d'épargne du recalcul des barres modifiées, c'est en fait rates_total -prev_calculate+1.

Vous devriez lire ce qui est écrit avant de répondre. Le code pour reproduire le bug du débogueur ! Toutes les données pour le reproduire sont données.

Voici un script pour reproduire le même bug

int Func(){ return(0); }

int Func2()
{
//  return(0); // если расскоментировать и здесь поставить точку останова, то отладчик отработает, как надо  
  return(Func()); // здесь поставить точку останова (F9)
}

void OnStart()
{
  Func2();
}
Raison: