Erreurs, bugs, questions - page 2793

 
Andrey Khatimlianskii:

Je suis surpris de ne pas avoir remarqué moi-même la colonne d'échange désactivée.

Merci, le problème est résolu.

Hourra¡¡¡¡ nous avons gagné.

 
Lorsque l'on utilise ChartSetSymbolPeriod, la fonction OnDeinit renvoie 1 Le programme a été supprimé du graphique, alors que logiquement elle devrait renvoyer 3 Le symbole ou lapériode du graphique aété modifié(e).
 

Le bug est que si la condition if(...) est remplie, rien ne doit interrompre la boucle

if( (vm + vs * (double)i) * tvp * 250.0 < ml ) { cv = vm + vs * (double)i; Print(i,": L/ML - ",cv," / ",ml); };


Voici une vidéo



Voici le code complet du script

void OnStart()
  {
//---
   
   double tvp  = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE_LOSS),
          vm   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),
          vs   = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP),
          ml   = AccountInfoDouble(ACCOUNT_EQUITY) * 0.015,
          cv   = -1.0,
          loss = 0.0;
   
   for(int i = 0; i < 20000; i++)
     {
      Print(i);
      //if( (vm + vs * (double)i) * tvp * 250.0 < ml ) { cv = vm + vs * (double)i; Print(i,": L/ML - ",cv," / ",ml); };
      /*loss = cv * tvp * 250.0;
      Print(NormalizeDouble(loss,2));
      Print(NormalizeDouble(ml,2)); Print(" ");
     */};
   
  }
 
Alexandr Sokolov:

Le bug est que si la condition if(...) est remplie, rien ne doit interrompre la boucle

Votre code est similaire à celui-ci

double a = 3;

for(int i = 0; a > 300; i++)
{
 if(a != 3)
  Print("Никогда такого не будет");
}
 

Mon indicateur a commencé à perdre des objets graphiques pour une raison quelconque et ne veut pas les supprimer. J'utilise la suppression automatique dans le destructeur de classe. Je l'appelle :

ObjectDelete(chartID, name);

En conséquence, j'obtiens un faux positif. J'appelle GetLastError() et j'obtiens l'erreur 4101 ("Errory chart identifier"). Supposons. Je compare le chartID de l'objet graphique en cours de suppression avec le résultat de la fonction ChartID() et ils sont exactement les mêmes. Quelle peut être la raison pour laquelle un objet ne peut pas être supprimé du graphique et comment puis-je contourner ce problème ?

 
Mihail Matkovskij:

Mon indicateur a commencé à perdre des objets graphiques pour une raison quelconque et ne veut pas les supprimer. J'utilise la suppression automatique dans le destructeur de classe. Je l'appelle :

En conséquence, j'obtiens un faux positif. J'appelle GetLastError() et j'obtiens l'erreur 4101 ("Errory chart identifier"). Supposons. Je compare le chartID de l'objet graphique en cours de suppression avec le résultat de la fonction ChartID() et ils sont exactement les mêmes. Quelle peut être la raison pour laquelle un objet ne peut pas être supprimé du graphique et comment puis-je contourner ce problème ?

J'ai des problèmes similaires https://www.mql5.com/ru/forum/1111/page2785#comment_17002122

Peut-être que les créateurs feront quelque chose à ce sujet).

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.06.22
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

l'absence de tout commentaire ici, comme si le sujet n'était nécessaire que pour évacuer la négativité d'une autre découverte désagréable ;)


#include <Arrays\ArrayObj.mqh>

class CPosition:public CObject
{
   public:
      string      meTicket;
      CPosition::CPosition(string inT)
      {this.meTicket = inT;}         
};

class CColl:public CArrayObj
{
public:
   string   meWrongProperty;
CPosition  *operator[](const int index) const { return (CPosition*)At(index);} 
};

class CCollOfColl:public CArrayObj
{
public:
CColl  *operator[](const int index) const { return (CColl*)At(index);} 
};



void OnStart()
{
   CCollOfColl lCOC;
   CColl       *lC;
   
   lC = new CColl();
   lC.Add(new CPosition("00"));
   lC.Add(new CPosition("01"));
   lCOC.Add(lC);
   
   lC = new CColl();
   lC.Add(new CPosition("10"));
   lC.Add(new CPosition("11"));
   
   lCOC.Add(lC);
   
   for(int i=0;i<lCOC.Total();i++)
     {
       for(int j=0;j<lCOC[i].Total();j++)
         {
          printf(lCOC[i][j].meTicket);
          lCOC[i][j].me
         }
     }
}


Je pense que le rédacteur aurait dû suggérer meTicket au lieu de meWrongProperty ;)

 

Bild 2530

Sur la troisième attache de la structure, aucune intelligence n'apparaît.

//+------------------------------------------------------------------+
//|                                                   TestStruct.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

//----------------------------------------------------
struct STRUCT_TIME_IN_FORCE
{
   string GTC; 
   string IOC;  
   string FOK; 
}; 
//----------------------------------------------------
struct STRUCT_SYMBOLS  
{
   string               symbol;                
   STRUCT_TIME_IN_FORCE timeInForce;            
};

//----------------------------------------------------
struct STRUCT_EXCH_INFO  
{
   string         timeZone;      
   long           serverTime;     
   STRUCT_SYMBOLS symbols[];  
};


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   STRUCT_EXCH_INFO Info;
   ArrayResize(Info.symbols, 10);
   
   Info.symbols[0].timeInForce. //??? На третьем вложении не появляется интеллесенс

}
//+------------------------------------------------------------------+
 
Dmytryi Voitukhov:

Lors de la vérification sur la place de marché EA, des erreurs se sont produites lors du calcul des lots.

Il n'y a pas d'erreurs dans le testeur.

Le code est aussi simple que possible. Comment pourrait-il y avoir une erreur ?

Lire l'articleQuels tests un robot de trading doit-il passer avant d'être publié sur le marché?

Какие проверки должен пройти торговый робот перед публикацией в Маркете
Какие проверки должен пройти торговый робот перед публикацией в Маркете
  • www.mql5.com
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
 
Mihail Matkovskij:

Mon indicateur a commencé à perdre des objets graphiques pour une raison quelconque et ne veut pas les supprimer. J'utilise la suppression automatique dans le destructeur de classe. Je l'appelle :

En conséquence, j'obtiens un faux positif. J'appelle GetLastError() et j'obtiens l'erreur 4101 ("Errory chart identifier"). Supposons. Je compare le chartID de l'objet graphique en cours de suppression avec le résultat de la fonction ChartID() et ils sont absolument identiques. Quelle peut être la raison pour laquelle un objet ne peut être supprimé du graphique et comment puis-je contourner ce problème ?

J'ai décidé d'essayer une autre méthode. Lors de la création d'un graphique, j'ajoute tous les objets à la liste et j'utilise la boucle pour supprimer tous les objets lors de la suppression de l'indicateur. Maintenant la fonctionGetLastError() donne l'erreur 4001 après l'appel de la fonction ObjectDelete et certains objets du graphique restent sur le graphique.