Erreurs, bugs, questions - page 743

 
Fia:

Bonjour, messieurs les développeurs !

Pouvons-nous apporter des modifications au compilateur MQL5 pour qu'il nous donne au moins un avertissement ?

pour les erreurs de ce type dans le code.

if(Flag_Exitl=true) {break;}


La condition de comparaison n'est pas correcte ici (elle devrait être == ), c'est pourquoi il y aura toujours une rupture.

Comment remédier à cette situation dans le compilateur (si c'est possible), afin que je puisse avoir moins de bosses en écrivant du code ?

(J'ai pensé que ça ne marcherait pas, il semble que nous devrions séparer l'affectation et la comparaison dans if, donc la question est supprimée).

Vous pouvez le faire, si la condition contient une affectation booléenne avec une constante à droite.
Les variables de type bool ne peuvent pas être comparées à true/false, mais utilisées directement (il s'agit essentiellement d'un drapeau oui/non).
if(Flag_Exitl) {break;}
Tu le fais au beurre.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип bool
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип bool - Документация по MQL5
 
notused:

Je reçois régulièrement l'erreur 4401

ERR_HISTOIRE_NON_FONDÉE

Le code indicateur suivant

donnera une erreur juste après le démarrage (s'il n'est pas sur D1). Ou plutôt, dès que vous démarrez le terminal et ouvrez le graphique - mettez l'indicateur, vous obtiendrez une erreur. Si le terminal n'est pas fermé, il n'y aura pas une telle erreur au démarrage.

Mais après un certain temps (quelques heures - 2 heures ont suffi pour moi), nous verrons que nous obtiendrons l'erreur sur le graphique déjà ouvert. (Je le faisais fonctionner sur m30)

Représentants, MetaQuotes, veuillez commenter, est-ce que c'est censé être comme ça ?
 
struct SDaylyRange {double min, max, open, close;};
struct SNoDaylyRange {
   uint x;
   double y;
 };

void OnStart()
  {
   SNoDaylyRange tmp;
   SDaylyRange tmp2 = tmp;
  }
Ce code se compile sans le moindre avertissement. Bien que ça ne devrait probablement pas compiler
 
notused:
...l'erreur 4401 apparaît régulièrement

référence :

Organiser l'accès aux données

Accessibilité des données

La disponibilité des données au format HCC ou même au format HC prêt à l'emploi ne signifie pas toujours la disponibilité inconditionnelle de ces données pour l'affichage sur un graphique ou pour l'utilisation dans les programmes mql5.

Lorsque nous accédons aux données de prix ou aux valeurs d'indicateurs à partir des programmes mql5, nous devons nous rappeler qu'il n'est pas garanti qu'elles soient disponibles à un certain moment, ou à partir d'un certain point dans le temps. Cela est dû au fait que MetaTrader 5 ne stocke pas la copie complète des données requises pour le programme mql5, mais donne un accès direct à la base de données du terminal afin d'économiser des ressources.

L'historique des prix pour toutes les échéances est construit à partir des données communes au format HCC et toute mise à jour du serveur entraîne la mise à jour des données pour toutes les échéances et le recalcul des indicateurs. Par conséquent, l'accès aux données peut être refusé même si les données étaient disponibles il y a juste un instant.

CopyRate

Lors de la demande de données de l'indicateur, si les séries temporelles demandées n'ont pas été construites ou si elles doivent être téléchargées du serveur, la fonction renverra -1 immédiatement, mais le processus de téléchargement/construction sera lancé.
Cela semble être la façon dont cela devrait être. Avant de CopyRate SERIES_SYNCRONIZED vous pouvez vérifier...
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - Документация по MQL5
 
Swan:

fiche d'information :

On dirait que ça devrait l'être. Jusqu'au CopyRate SERIES_SYNCRONIZED vous pouvez vérifier...

Je suis juste en train de saupoudrer des cendres sur ma tête, ouais. Merci.

Bien qu'il soit étrange de voir la demande de deux barres et l'historique indisponible, alors que seule la barre zéro change. Mais peu importe - si c'est décrit dans la documentation, ce n'est pas une erreur.

 

dans mon IsNewBar, une erreur est apparue.

Au lieu de

CopyTime(sym, period, 0, 1, currentTime);

J'aurais dû écrire

   if (CopyTime(sym, period, 0, 1, currentTime) < 1) return (false);

Et je me suis demandé pourquoi, toutes les deux heures, IsNewBar(PERIOD_D1) == true -> d'où la découverte de l'inaccessibilité de l'historique, mais je n'arrivais pas à me souvenir d'une fonction que j'avais écrite il y a un an ou deux.

 
sergeev:

Pourquoi l'indicateur ne peut pas gérer les types de couleurs (COLOR_ARROW, etc.) avec plus d'un tampon.

exemple de code

Nous définissons deux DRAW_COLOR_ARROW (buf1 et buf2) et pour chacun un tampon de couleur supplémentaire (clr1, clr2).

En même temps, bien que le second tampon buf2 reçoive des barres High/Low, elles n'apparaissent pas sur le graphique. Il semble que la couleur des flèches dans ce tampon = clrNONE. C'est-à-dire que le réglage de la couleur dans le tampon clr2 ne fonctionne pas.


voici une capture d'écran. seules les valeurs de buf1/clr1 sont visibles. les valeurs du second tampon ne sont pas affichées avec couleur bien que les valeurs soient reçues.


Où est l'erreur ?

La question a simplement été créée pour répondre à la question "dans l'ADN de MQL5".

C'est également le cas pour DRAW_FILLING et même pour DRAW_HISTOGRAM2 (qui n'est pas aussi stable, bien sûr, mais des bogues se produisent).

Rien qu'à partir de l'instabilité des bugs, j'en conclus qu'il est peu probable que vous obteniez une réponse sans CD.

 

Bild 642 pour Win32

Un problème avec les tableaux tridimensionnels de double apparaît si vous dépassez par erreur les limites du tableau lors de l'affichage dans la fonction Print.

Le script entre dans une boucle infinie par lui-même.

int i1,i2,i3;
double out[3][7][7];
for(i1=0;i1<7;i1++) out[0][0][i1] = inp[i1];
double sum;
sum = 0.0;
for(i3=0;i3<3;i3++){
   for(i2=0;i2<7;i2++){
      for(i1=1;i1<7;i1++)  sum += W[i3][i2][i1] * out[i3][i2][i1-1];
      out[i3][i2][i1] = f(sum + WT[i3][i2]);
      sum = 0.0;
      Print("out[",i3,"][",i2,"][",i1,"] = ",out[i3][i2][i1]);
   }
}
Print("sum = ",sum);

}
//-------------------------------------------------------
double f(double x){return(1/(1+MathExp(-x)));}
 
IgorM:

Bild 642 pour Win32

un certain problème avec les tableaux tridimensionnels double apparaît si vous sortez par erreur du tableau lors de la sortie dans la fonction Print

En fait, le dépassement se produit deux lignes plus tôt

et vous appelez un exposant à partir d'un élément inexistant, très probablement zéro.

Regardez dans le journal

 
sergeev:

En général, le hors-limite se produit deux lignes plus tôt

et vous appelez un exposant à partir d'un élément inexistant, très probablement zéro.

regardez dans le journal

Oui, je sais, et j'ai cité un code qui ne provoque pas d'erreur d'exécution, mais qui boucle le script
Raison: