Erreurs, bugs, questions - page 541

 
220Volt:

Pour ne pas être infondé, j'ai simulé la situation que j'ai évoquée plus haut (je ne peux pas la citer car je ne peux pas sortir de la citation :) ).

J'ai exécuté le code suivant sur M15 :

Pendant l'exécution du script, je me suis connecté et déconnecté d'Internet. Les photos montrent le résultat.

Je vois. Nous allons le corriger.
 

Est-ce dans servicedesk ou un bug dans le code ?

L'indicateur devrait construire des niveaux de 5 points à partir du prix de clôture vers le bas en rouge.

Mais seuls deux tampons sont affichés (bien qu'il les compte tous) et non pas rouges, mais verts (après la compilation noire).

Veuillez vérifier si c'est juste moi ou si c'est juste moi en général... ?


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
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[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

Est-ce dans servicedesk ou un bug dans le code ?

L'indicateur devrait construire des niveaux de 5 points à partir du prix de clôture vers le bas en rouge.

Mais seuls deux tampons sont affichés (bien qu'il les compte tous) et non pas rouges, mais verts (après la compilation noire).

Veuillez vérifier si c'est juste moi ou si c'est juste moi en général... ?

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...Je pense que les bibliothèques standard sont un code idéal qui devrait servir de modèle aux autres.

Je peux seulement dire qu'il serait souhaitable de se débarrasser de telles notions le plus tôt possible.

Je n'ai rien contre les bibliothèques standard, mais faire confiance au code de quelqu'un d'autre "pour faciliter l'écriture de programmes" sans le vérifier ? - Sauf au stade de la rédaction initiale d'un conseiller expert. Pour accélérer les processus de routine, pour ainsi dire.

 

Je reçois le message : Abnormal termination assez souvent dans mon journal de bord. Quelqu'un a-t-il remarqué qu'il pourrait y avoir un tel conflit ?

Je ne peux pas encore trouver la cause. La seule chose que je peux dire, c'est que si je laisse le terminal inactif pendant un certain temps ou si j'utilise un autre programme à ce moment-là (par exemple, Excel), le conseiller expert que je teste commence à fonctionner incorrectement après mon retour au terminal. C'est-à-dire que les opérations commerciales sont effectuées sans aucun problème. Le seul problème réside dans l'interaction avec les panneaux de négociation et d'information. Il semble que la fonction OnChartEvent() soit défectueuse. Le passage d'un panneau à l'autre commence à ralentir considérablement, comme si le processus était très occupé par autre chose. Je n'utilise pas de boucles éternelles. De même, la charge du processeur à ce moment-là n'indique pas que quelque chose est activement utilisé. La recompilation du conseiller expert est utile. Au moment de la recompilation, avant que l'EA ne soit désinitialisée, le messageAbnormal termination apparaît dans le journal. Ensuite, le programme est initialisé avec succès et tout commence à fonctionner comme sur des roulettes.

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

Je reçois le message : Abnormal termination assez souvent dans mon journal de bord. Quelqu'un a-t-il remarqué qu'il pourrait y avoir un tel conflit ?

Je ne peux pas encore trouver la cause. La seule chose que je peux dire, c'est que si je laisse le terminal inactif pendant un certain temps ou si j'utilise un autre programme à ce moment-là (par exemple, Excel), le conseiller expert que je teste commence à fonctionner incorrectement après mon retour au terminal. C'est-à-dire que les opérations commerciales sont effectuées sans aucun problème. Le seul problème réside dans l'interaction avec les panneaux de négociation et d'information. Il semble que la fonction OnChartEvent() soit défectueuse. Le passage d'un panneau à l'autre commence à ralentir considérablement, comme si le processus était très occupé par autre chose. Je n'utilise pas de boucles éternelles. De même, la charge du processeur à ce moment-là n'indique pas que quelque chose est activement utilisé. La recompilation du conseiller expert est utile. Au moment de la recompilation, avant que l'EA ne soit désinitialisée, le messageAbnormal termination apparaît dans le journal. Ensuite, le programme est initialisé avec succès et tout commence à fonctionner comme sur des roulettes.

Doit-on utiliser IsStopped() dans les boucles ?

Vous pouvez lire des informations sur ces problèmes ici, ici et ici. Vous devriez également réfléchir aux endroits du code où il y a des "goulots d'étranglement"...

D'après ce que j'ai compris, cette erreur se produit en cas d'arrêt "précoce" du programme (lorsque le graphique/terminal est fermé ou que le conseiller expert est recompilé), et pendant cette opération, le conseiller expert effectue un certain travail.

 
Interesting:

Doit-on utiliser IsStopped() dans les boucles ?

Vous trouverez des informations sur des problèmes similaires ici, ici et ici. Pensez aussi aux goulots d'étranglement dans le code...

D'après ce que j'ai compris, cette erreur se produit en cas d'arrêt "précoce" d'un programme (lorsque le graphique/terminal est fermé ou que l'Expert Advisor est recompilé), alors que l'Expert Advisor effectue un travail.

Merci. Les liens montrent la même situation. Je n'utilise jamais IsStopped() dans les boucles, seulement break, continue et return.

Jusqu'à présent, je n'ai pas vu de lien entreIsStopped() et le ralentissement du programme. Après tout, si le programme se figeait, aucune autre opération ne pourrait être effectuée. Ou est-ce que je me trompe ?

Une dernière chose.IsStopped() est utile lorsque vous devez arrêter l'exécution d'un programme de force, par exemple, pour fermer le terminal ou supprimer Expert Advisor du graphique. Et j'ai besoin de continuer à utiliser le conseiller expert.

 
tol64:

Merci. Les liens montrent la même situation. Je n'utilise nulle part IsStopped() dans les boucles, seulement break, continue et return.

Jusqu'à présent, je n'ai pas vu de lien entreIsStopped() et le ralentissement du programme. Si le programme se figeait, aucune autre opération ne serait effectuée. Ou est-ce que je me trompe ?

Une dernière chose.IsStopped() est utile lorsque vous devez arrêter l'exécution d'un programme de force, par exemple, pour fermer le terminal ou supprimer l'Expert Advisor du graphique. Et je dois continuer à utiliser le conseiller expert.

IsStopped(), il s'agit de l'erreur. La raison pour laquelle le terminal/expert ralentit n'est même pas devinée (aucune condition d'exécution n'est connue, rien sur l'Expert Advisor non plus).
 
tol64:

Je reçois le message : Abnormal termination assez souvent dans mon journal de bord. Quelqu'un a-t-il remarqué qu'il pourrait y avoir un tel conflit ?

Je ne peux pas encore trouver la cause. La seule chose que je peux dire, c'est que si je laisse le terminal inactif pendant un certain temps ou si j'utilise un autre programme à ce moment-là (par exemple, Excel), le conseiller expert que je teste commence à fonctionner incorrectement après mon retour au terminal. C'est-à-dire que les opérations commerciales sont effectuées sans aucun problème. Le seul problème réside dans l'interaction avec les panneaux de négociation et d'information. Il semble que la fonction OnChartEvent() soit défectueuse. Le passage d'un panneau à l'autre commence à ralentir considérablement, comme si le processus était très occupé par autre chose. Je n'utilise pas de boucles éternelles. De même, la charge du processeur à ce moment-là n'indique pas que quelque chose est activement utilisé. La recompilation du conseiller expert est utile. Au moment de la recompilation, avant que l'EA ne soit désinitialisée, le messageAbnormal termination apparaît dans le journal. Ensuite, le programme est initialisé avec succès et tout commence à fonctionner comme sur des roulettes.

Une terminaison anormale signifie que vous avez interféré avec le programme de manière non naturelle, à savoir en le recompilant au moment de l'exécution, ce qui entraîne une interruption du programme et une réinitialisation.

Il en va de même si vous effectuez une division par zéro ou si vous interrompez le programme en cours d'exécution, mais si le programme est relancé, vous n'obtiendrez pas une telle entrée. C'est pourquoi il est conseillé de vérifier IsStopped afin que le programme puisse se terminer sur son propre retour au lieu d'être forcé de le faire.

 

Est-il prévu d'ajouter les éléments suivants ?

Double-cliquez sur une position du graphique pour faire apparaître le menu de gestion des positions.

Mise en évidence de plusieurs positions à fermer en même temps

? ???

Merci.