Questions d'un "mannequin - page 263

 
Contender:

Essayez d'utiliser StringConcatenate() pour "coller" les chaînes ensemble.

Remplacé par

StringConcatenate(nTL,"nTL_",IntegerToString(MathRand()));
n'a pas aidé.
 
Silent:
Je vais me creuser les méninges pendant encore une semaine. Pouvez-vous me donner plus de détails ? (ça peut être dur :))

Existe-t-il une autre option pour quelques centaines d'objets avec des noms uniques ?

(Un groupe d'objets doit avoir la même partie de la chaîne dans le nom, pour supprimer le groupe).

Compteur
 
TheXpert:

En toute logique, si la fonction définit la dernière erreur, la valeur de l'erreur devrait être nulle ou correspondre à la valeur décrite dans la documentation. Il n'y a pas d'autre moyen.

C'est-à-dire que si l'appel a réussi et que l'erreur est non nulle, ce cas doit être décrit dans la documentation.

C'est ce que je pensais aussi, jusqu'à ce qu'on me convainque du contraire. J'ai écrit une demande au SD, j'ai eu une réponse comme ci-dessus :)
 
220Volt:

Vous êtes inquiet parce que Get Last Errors imprime quelque chose d'autre que zéro ? Dans ce cas, vous ne devez demander une erreur que si la fonction signale un échec. Et vous ne devriez pas demander une erreur à la fin du tracé, vous risquez d'obtenir une valeur erronée. C'est ainsi que cela se passe dans MT4, peut-être est-ce différent ici.

Pseudocode :

L'erreur devrait être effacée par ResetLastError(), mais si une affectation est en cours, c'est équivalent.
 
Silent:

Ma recommandation : refaire le Get LastError selon le principe que j'ai décrit ci-dessus. Ce n'est qu'alors que vous obtiendrez l'erreur qui se produit, peut-être obtiendrez-vous autre chose.

 
220Volt:
Je le pensais aussi, jusqu'à ce qu'on me convainque du contraire. J'ai écrit une demande au SD et j'ai obtenu la même réponse que ci-dessus :)
Brayed.
 

La remise à zéro est effectuée avant l'appel.

L'erreur est causée par l'entrée suivante

void  CreateTL(string name,datetime time1,double price1,datetime time2,double price2,bool ray_left,bool ray_right,color color_TL)
  {
//------------ nTL,nTLh,nTLl,nTLe
   nTL="nTL_"+IntegerToString(MathRand());
   nTLh="nTLh_"+IntegerToString(MathRand());
   nTLl="nTLl_"+IntegerToString(MathRand());
   nTLe="nTLe_"+IntegerToString(MathRand());
//------------
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
  };

Il n'y a pas d'erreur dans cette variante

void  CreateTL(string name,datetime time1,double price1,datetime time2,double price2,bool ray_left,bool ray_right,color color_TL)
  {
//------------ nTL,nTLh,nTLl,nTLe
   //nTL="nTL_"+IntegerToString(MathRand());
   //nTLh="nTLh_"+IntegerToString(MathRand());
   //nTLl="nTLl_"+IntegerToString(MathRand());
   //nTLe="nTLe_"+IntegerToString(MathRand());
//------------
   ObjectCreate(0,nTL="nTL_"+IntegerToString(MathRand());,OBJ_TREND,0,time1,price1,time2,price2);
  };
 
zfs:
Compteur
Quelle différence cela fait-il ? Les mêmes chiffres dans une chaîne.
 
Silent:
Quelle différence cela fait-il ? Ce sont les mêmes chiffres sur la ligne.
Il n'y a aucune garantie que les chiffres ne correspondent pas. Potentiel d'erreur.
 
zfs:
Il n'y a aucune garantie que les numéros ne correspondent pas. Erreur potentielle.

Tout d'abord, il n'y a aucune chance (le code d'Urain n'a jamais échoué).

x=0;  MathSrand(x);
   for(i=0;i<MathRand();i++)MathRand();
   MathSrand((int)TimeLocal()*MathRand());

Deuxièmement, j'ai une erreur (et aucun objet créé) exactement lors du premier appel.

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5