Erreurs, bugs, questions - page 1637

 
A100:

Prenons un exemple plus simple

En d'autres termes, combien y a-t-il d'appels du type A( A& ) ? Un. Au moins, le C++ ne crée pas d'objets intermédiaires.

Peut-être que l'optimisation de la valeur de retour (RVO) est définie par défaut en C++ ?
 
A100:

1. Double appel du constructeur de la copie

2. Pas de message de "fuite de mémoire" (nouveau sans suppression)

  1. Correctement dit à propos de l'optimisation RVO (il y a aussi NRVO), elle est actuellement absente du compilateur MQL, mais sera ajoutée dans le futur (pour l'instant nous considérons cette optimisation comme une tâche non prioritaire).
  2. ne se reproduit pas, veuillez revérifier, il se peut que vous n'ayez pas spécifié des détails importants pour la reproduction.
 
Ilyas: 2. ne se reproduit pas, veuillez revérifier, il se peut que vous n'ayez pas spécifié des détails importants pour la reproduction.

Exemple simplifié

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

Résultat :

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

Conclusion : aucun destructeur n'est appelé et aucun message de fuite de mémoire en même temps (comme dans l'exemple suivant).

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

Résultat :

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 octets de mémoire perdue
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 objet de type A gauche
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 objets non supprimés restants
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Merci pour cette précision. Reproduit - aucun message de fuite et voici pourquoi :

L'optimiseur est ici sur-optimisé, puisqu'il n'y a pas d'opérations sur la mémoire ou le pointeur qui ont été créés dans l'opérateur new, l'allocation de cette mémoire a été supprimée.

Nous examinerons s'il faut corriger ce "bug" dans l'optimiseur ou l'améliorer pour que l'enregistrement d'un pointeur dans une variable inutilisée ne bloque pas la suppression de la nouvelle opération.

 
Bon après-midi.
Veuillez indiquer aux développeurs pourquoi MQL4 et MQL5 ont la fonction de supprimer une sous-fenêtre d'indicateur d'un Expert Advisor, alors qu'ils n'ont pas la fonction de créer une fenêtre d'indicateur.
Je dois utiliser des modèles ou lancer l'indicateur de fenêtre manuellement, ce qui n'est pas pratique car les informations sur le graphique sont perdues.
J'aimerais également pouvoir lancer et afficher des indicateurs à partir d'un fichier de ressources.
Ou de vous conseiller sur la manière de le faire.
 
Slawa:

Ce n'est pas vous qui avez organisé le "conseil de visualisation" ?

Qu'est-ce qui vous fait penser que c'est un bug ? Le nom du dossier correspond au numéro du port sur lequel la connexion a été établie.

C'était moi..... Merci, je l'ai.
 
Faire une macro
#define  MACROS(A) "##A##"
Je veux que MACROS(Num) soit remplacé par "Num", mais le résultat est toujours "##A###". Est-il possible de définir une macro pour obtenir ce que je veux ?

 

J'ai fait une petite découverte pour moi-même

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Si vous ouvrez un ordre à Integer * Point (sans normalisation) et que vous demandez ensuite le prix d'ouverture, celui-ci sera différent de l'Integer * Point non normalisé.

Pourquoi OrderSEnd utilise-t-il TOUJOURS des prix Integer * Point non normalisés ?

 
fxsaber:
Je fais une macro et je veux que MACROS(Num) soit remplacé par "Num", mais cela donne toujours "##A####". Est-il possible de définir une macro pour obtenir ce que je veux ?

Supprimez les guillemets du corps de la macro.

Pour convertir un paramètre de macro en une chaîne de caractères, utilisez # :

#define  MACROS(A) #A
## est utilisé pour concaténer les jetons.
 
Dmitry Voronkov:
Bonne journée.
Veuillez indiquer à MQL4 et MQL5 pourquoi ils ont la fonction de supprimer une sous-fenêtre d'indicateur d'un Expert Advisor mais n'ont pas la fonction de créer une fenêtre d'indicateur.
Je dois utiliser des modèles ou lancer l'indicateur de fenêtre manuellement, ce qui n'est pas pratique car les informations sur le graphique sont perdues.
J'aimerais également pouvoir lancer et afficher des indicateurs à partir d'un fichier de ressources.
Ou de vous conseiller sur la manière de le faire.

La fonction ChartIndicatorAdd peut être utilisée pour créer une sous-fenêtre.

Il est question d'indicateurs provenant de ressources sur le site https://www.mql5.com/ru/docs/runtime/resources, à la toute fin - "Work with custom indicators connected as resources".

Документация по MQL5: Программы MQL5 / Ресурсы
Документация по MQL5: Программы MQL5 / Ресурсы
  • www.mql5.com
Программы MQL5 / Ресурсы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Raison: