Erreurs, bugs, questions - page 3005

 
fxsaber:
Où est passé le lien vers "Tous les messages" dans le profil ?
.
 
Alexey Viktorov:

Merci !

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Prix non normalisés dans MT4

fxsaber, 2021.04.30 10:42

Deux nombres différents convertis en chaîne de la même manière. C'est un bug ?

void OnStart()
{
  const double Num = 1.07299;
  const double Norm = NormalizeDouble(Num, 5);
   
  Print(Num);  // 1.07299
  Print(Norm); // 1.07299

  Print(Num - Norm); // 2.220446049250313e-16
}

La situation est similaire à celle-ci.

 

Indicateur personnalisé dans la sous-fenêtre, type oscillateur.
Comment masquer la ligne zéro par défaut ?
Colorer la ligne zéro de l'interface graphique, pour qu'elle corresponde à la couleur de l'arrière-plan, ne fonctionne pas.

i

définition des propriétés dans l'indicateur, ne fonctionne pas

#property indicator_level1  0.0
#property indicator_levelcolor C'35,35,35'
 
fxsaber:

Les chiffres sont différents, mais la différence est de 17 décimales, et Print ne gère que 15 décimales, donc du point de vue de Print, ils sont identiques.

 
A100:

Les chiffres sont différents, mais la différence réside dans la 17e décimale, alors que Print ne gère que 15 chiffres, donc du point de vue de Print, ils sont identiques.

Seulement pas l'impression, mais la conversion du double en chaîne.

 

Figure 1

J'ai remarqué ça. Si les données du test avant sont répétées (les mêmes), lorsque vous consultez le Backtest pour les trois variantes, seule la variante (10384.88) sera affichée en premier.

Fig2

Les données pour les variants avec les résultats = 10435 ou 10843 sont inconnues (tout dans les rapports pour le variant = 10384) ? ??.


 

Pouvez-vous me dire comment copier correctement les données des pointeurs ?

Vous devez copier des données d'un objet à un autre. Ensuite, supprimez l'objet initial. Lorsque vous supprimez l'objet original, les données de l'objet copié deviennent inaccessibles.

#include <Arrays\ArrayObj.mqh>

CArrayObj ArrCur;       // массив с объектами, каждый объект содержит структуру с полями ордеров и его id
CArrayObj ArrPrev;  // массив с объектами, каждый объект содержит структуру с полями ордеров и его id

class CID : public CObject
{
  public:  int id;
};


void OnStart()
{
  // -----------------------------------------------------------------
    CID* pCur = new CID;        // создаем объект для текущих параметров
    pCur.id = 25;               // вносим текущие данные
    ArrCur.Add(pCur);           // помещаем в массив объектов
    
    CID* pPrev = ArrCur.At(0);  // копируем данные??? Указатель???
    ArrPrev.Add(pPrev);         // помещаем в массив объектов
    
    ArrCur.Clear();             // чистим текущий массив
  // -----------------------------------------------------------------
  
   // --- для вывода в журнал
  int sizeCur = ArrCur.Total();       // размер = 0
  int sizePrev = ArrPrev.Total();     // размер = 1
  
  ENUM_POINTER_TYPE pTypeCur = CheckPointer(ArrCur.At(0));    // POINTER_INVALID
  ENUM_POINTER_TYPE pTypePrev = CheckPointer(ArrPrev.At(0));  // POINTER_INVALID
  
  Print(__FUNCTION__, " sizeCur=", sizeCur, " pTypeCur=", EnumToString(pTypeCur));
  Print(__FUNCTION__, " sizePrev=", sizePrev, " pTypePrev=", EnumToString(pTypePrev));

}
 
Là, le pointeur copie
 
Aliaksandr Hryshyn:
Là, le pointeur copie
Comment copier des données ? Eh bien, à part élément par élément ?