Erreurs, bugs, questions - page 2047

 

Que se passe-t-il lorsque la variable système que nous obtenons de GetTickCount() déborde ?

Y a-t-il une réaction standard de la part du terminal ?

Est-il nécessaire de surveiller ce moment de manière programmatique et de mettre en œuvre une réponse ?

 
Alexey Viktorov:

Bonjour, nous y voilà... Avez-vous lu ce lien vous-même ?

En dehors de mql je ne connais, également pas très bien, que VBA et c'est seulement là que j'ai rencontré la directive de l'initialisation obligatoire des variables. Notez que c'est à la seule discrétion du programmeur. Et vous voulez que MQ force l'initialisation d'absolument toutes les variables ?

C'est là que réside la raison. Non seulement vous ne savez pas très bien (et vous l'avez dit vous-même combien de fois), mais vous connaissez aussi VBA, qui n'a pas grand-chose à voir avec ce langage. Je connais très bien le C++. Il s'agit d'un langage très clair et strict, aucun libre arbitre n'y est autorisé, sur lequel vous fantasmez. Et MQL a été créé à l'image et à la ressemblance de C++. Alors arrêtons ça. Familiarisez-vous avec le C++ pour commencer et ensuite il y aura un sens à argumenter sur quelque chose.

p.s. Au fait, je viens juste de réaliser que vous avez pris la conversation dans la mauvaise direction, parce que j'ai déjà oublié où tout a commencé, et maintenant je revois mon code original et réalise que votre première attaqueici était complètement hors sujet. Et comment ne pas y prêter attention tout de suite ! Dans mon code, la variable statique est initialisée exactement comme une constante, comme il est décrit dans la documentation. Donc le problème est qu'il n'a pas initialisé la merde. Et vous avez commencé à me dire que c'est parce qu'il doit être initialisé avec une constante. Et c'est parti...

 

Pourquoi ne puis-je pas initialiser le tableau avec des variables ?

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

Pourquoi ne puis-je pas initialiser le tableau avec des variables ?

Parce que dans MQL vous ne pouvez initialiser qu'avec des constantes.
 
Alexey Navoykov:

Eh bien, c'est là que réside la raison. Non seulement vous ne savez pas très bien (et vous l'avez dit vous-même combien de fois), mais vous connaissez aussi VBA, qui n'a pas grand-chose à voir avec le langage en question. Je connais très bien le C++. Il s'agit d'un langage très clair et strict, aucun libre arbitre n'y est autorisé, sur lequel vous fantasmez. Et MQL a été créé à l'image et à la ressemblance de C++. Alors arrêtons ça. Familiarisez-vous avec le C++ pour commencer et ensuite il y aura un sens à argumenter sur quelque chose.

p.s. Au fait, je viens juste de réaliser que vous avez pris la conversation dans la mauvaise direction, parce que j'ai déjà oublié où tout a commencé, et maintenant je revois mon code original et réalise que votre première attaqueici était complètement hors sujet. Et comment ne pas y prêter attention tout de suite ! Dans mon code, la variable statique est initialisée exactement comme une constante, comme il est décrit dans la documentation. Donc le problème est qu'il n'a pas initialisé la merde. Et vous avez commencé à me dire que c'est parce qu'il doit être initialisé avec une constante. Et voilà...

Je vous appelle une dernière fois pour étudier la séquence d'initialisation. Il me semble que la capacité à penser logiquement est plus importante que la connaissance. Vous connaissez peut-être tous les langages de programmation par cœur, mais vous devez comprendre la séquence d'initialisation.

Une variable statique NE PEUT PAS être initialisée avant la variable globale. Et ça veut tout dire.

 
Bug de ChartNavigate
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

Résultat sur ICMarkets-Demo EURCHF M1 (max bars = 5000) :

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

Je ne comprends rien du tout. Ce devrait être les mêmes chiffres. Mais au final, le graphique saute tout le temps.

Est-ce que ça marche pour tout le monde ?

 
Alexey Viktorov:

Je vous invite une dernière fois à vous familiariser avec la séquence d'initialisation. Il me semble que la capacité à penser logiquement est plus importante que la connaissance. Vous connaissez peut-être tous les langages de programmation par cœur, mais vous devez comprendre la séquence d'initialisation.

Une variable statique NE PEUT PAS être initialisée avant une variable globale. Et ça veut tout dire.

Je suis désolé, mais je ne prêterai plus attention à vos provocations insensées et sur un tel ton. Je suis déjà désolé d'avoir perdu du temps à discuter inutilement avec un dilettante. Tout d'abord, vous présentiez des constantes qui ne concernaient pas du tout ma situation, et avec la même arrogance agressive que maintenant. Maintenant, vous faites des déclarations non fondées, sans même connaître le sujet et sans comprendre comment un langage de programmation est organisé. Gardez vos "pensées logiques", vos conjectures et vos fantasmes pour vous. Ils ne m'intéressent pas.

 
Kirill Belousov:

Que se passe-t-il lorsque la variable système que nous obtenons de GetTickCount() déborde ?

Y a-t-il une réaction standard de la part du terminal ?

Est-il nécessaire de suivre ce moment de manière programmatique et de mettre en œuvre une réaction ?

Il n'est pas nécessaire de mettre en œuvre une quelconque réaction.

Si vous recevez la valeur retournée de GetTickCount dans une variable de type uint, vous pouvez facilement recevoir la différence

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

Même s'il y a un dépassement, vous obtiendrez la différence correcte. Ce sont des particularités des opérations avec des entiers non signés. Mais cela n'est bon que si la valeur précédente a été obtenue exactement de la même manière (GetTickCount) et si la valeur précédente a été obtenue au plus tôt il y a 49 jours.

Si vous vérifiez le plus ou le moins, vous avez besoin de plus d'opérations que la simple soustraction.

 
fxsaber:
Le bogue ChartNavigate

Résultat sur ICMarkets-Demo EURCHF M1 (max bars = 5000) :

Je ne comprends rien du tout. Ce devrait être les mêmes chiffres. Mais au final, le graphique saute tout le temps.

Se reproduit-il ?

Pourquoi est-ce un bug ?

La navigation sur une carte n'est pas immédiate. C'est une commande asynchrone. Le résultat de son exécution n'est pas garanti.

C'est comme si vous appuyiez sur le bouton PageUp et que le graphique s'immobilisait. Et soudain, il a fait un bond.

 
Slava:

Pourquoi est-ce un bug ?

La navigation sur une carte ne se fait pas immédiatement. Il s'agit d'une commande asynchrone. Et le résultat de son exécution n'est pas garanti.

C'est comme si on appuyait sur le bouton PageUp et que le graphique s'immobilisait. Tout d'un coup, ça fait un bond.

Je vous ai donné une impression de l'Expert Advisor (pas le script).CHART_FIRST_VISIBLE_BAR renvoie des valeurs inadéquates. La position de la barre de navigation dans ChartNavigate est clairement indiquée. C'est censé sauter et ne pas aller ailleurs, et ça saute.

Raison: