Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1007

 
Alexey Viktorov:

Temps moins le temps divisé par PeriodSeconds()

il pourrait donc être de la mauvaise longueur à la transition vendredi-lundi (ou s'il y a des barres manquées dans l'historique).

il est préférable de lire le temps du point et ensuite de définir les barres

datetime time1=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,0);
datetime time2=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,1);

int bar1=iBarShift(_Symbol,_Period,time1);
int bar2=iBarShift(_Symbol,_Period,time2);
 
Taras Slobodyanik:

il pourrait donc être de la mauvaise longueur à la transition vendredi-lundi (ou s'il y a des barres manquées dans l'historique).

il est préférable de lire l'heure des points et ensuite d'identifier les barres

D'accord. Ça ne m'a pas gêné, ni moi, ni mon cerveau. Il est alors préférable de prendre le nombre de barres entre les dates.

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Cette partie dit erreur



Pouvez-vous me dire comment démarrer le robot ?


 
Ivan Butko:

Cette partie écrit une erreur

Comment faire pour que le robot démarre ?

Ici la variable est déclarée et immédiatement elle est divisée :

double spred = spred/Point*(tot-1); 

L'erreur montre que le compilateur traite cette variable (spred) comme non déclarée. Cela n'est pas bon non plus, car elle (la variable) n'est pas initialisée - comme ce n'est pasune variable globale, elle peut avoir une valeur non définie...

Essayez de le déclarer plus tôt et de lui attribuer une valeur.
 
Yevhenii Levchenko:

Ici une variable est déclarée et immédiatement elle est partagée :

L'erreur montre que le compilateur traite cette variable (spred) comme non déclarée, ce qui n'est pas bon non plus, car elle (la variable) n'est pas initialisée - comme ce n'est pas une variable globale, il peut y avoir une valeur non définie...

Essayez de le déclarer plus tôt et de lui attribuer une valeur.

Eugène, du fond du cœur !
C'est parti, merci.

 

Que faire si dans MQL5 ...

if(BarsCalculated(handle) == -1)

... cela fait environ une minute et le problème est le même. Pourquoi si longtemps ?


Erreur 4806 - Les données demandées n'ont pas été trouvées ... - ...comment faire pour que mon EA le trouve ?

 
Ivan Butko:
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Cette partie dit erreur



Pouvez-vous me dire comment démarrer le robot ?


Ligne 61, c'est quelle ligne ?
 

Comment attraper l'erreur d'absence de mémoire ?


Qu'est-ce qui pourrait causer ce message en premier lieu ?


J'ai écrit un programme d'environ 20 000 lignes. J'ai beaucoup de classes, de tableaux et de structures différents.

Tous les deux ou trois jours environ, le message "out of memory" apparaît.

Je ne sais pas comment retrouver la fonction responsable de la fuite de mémoire.

 
Sergey Likho:

Comment attraper une erreur d'absence de mémoire ?


Qu'est-ce qui pourrait causer ce message en premier lieu ?


J'ai écrit un programme d'environ 20 000 lignes. J'ai beaucoup de classes, de tableaux et de structures différents.

Tous les deux ou trois jours environ, le message "out of memory" apparaît.

Je ne sais pas comment l'attraper, ni quelle fonction est responsable de la fuite de mémoire.

Assurez-vous que chaque nouvelle a sa propre suppression

C'est-à-dire uniquement en lisant attentivement votre code. Pour rendre la lecture plus facile et plus amusante, vous pouvez la commenter :-)

C'est aussi une bonne idée d'écrire des scripts de test-case pour chaque classe et de vérifier les fuites à l'intérieur des classes de cette façon.

 
Maxim Kuznetsov:

s'assurer que chaque nouveau produit a sa propre suppression

C'est-à-dire, juste en lisant attentivement le code. Pour rendre la lecture plus facile et plus amusante, vous pouvez également commenter :-)

C'est aussi une bonne idée d'écrire des scripts de test-case pour chaque classe et de vérifier les fuites à l'intérieur des classes de cette façon.

Nouveau, supprimer n'est pas utilisé. Les éléments de la classe sont définis au départ et je ne les recrée pas.

Je travaille surtout avec des tableaux.


Que sont lesscripts de test-case ?