Erreurs, bugs, questions - page 279

 
Rosh:
Non.
C'est pourquoi l'accès simultané ne peut être organisé :(((
 
Olegts:
c'est pourquoi l'accès simultané ne peut être organisé :(((.

Vous pouvez, le fichier ouvert dans MT5 avec le drapeau de partage sera également disponible pour tout autre programme, y compris MT4.

Voyez comment cela se passe ici.

Par exemple, si le fichier est déjà ouvert dans MT4, l'indicateur Shaare permettra de l'ouvrir sans problème dans MT5. Le MT4 fonctionne comme d'habitude, tandis que le MT5 peut permettre à d'autres programmes d'utiliser un fichier déjà ouvert par lui, ou d'ouvrir un fichier qui est ouvert par quelqu'un d'autre sans le drapeau de shahre.

 
Urain:

Vous pouvez, le fichier ouvert dans MT5 avec le drapeau de partage sera également disponible pour tout autre programme, y compris MT4.

Voyez comment cela se passe ici.

Merci, je vais regarder maintenant...
 
Olegts:
Merci, je vais regarder maintenant...
J'ai regardé, MT5 écrit et MT4 lit, cela fonctionne, mais si MT4 écrit, MT5 ne peut pas lire car le fichier est bloqué, en tout cas cela n'a pas fonctionné pour moi....
 
La section d'aide dans la description du type de données dit :
<br / translate="no">

Pour cette raison, il est catégoriquement déconseillé de comparer deux nombres réels entre eux pour vérifier leur égalité, car une telle comparaison n'est pas correcte.

Et une méthode de comparaison spéciale est proposée.

Si vous avez toujours besoin de comparer deux nombres réels pour l'égalité, vous pouvez...

Mais il s'ensuit une conclusion logique : il n'est pas recommandé de comparer des nombres réels, même au moyen d'opérations plus grandes/plus petites, car une telle opération, au sens de ce qui précède, n'est correcte que si une méthode spéciale établit d'abord correctement que les valeurs vérifiées ne sont pas égales en termes de machine zéro.

C'est-à-dire qu'il s'avère que les opérateurs > et < pour les nombres réels ne peuvent pas non plus être utilisés sous forme pure. Ai-je bien compris, et si oui, pourquoi ne pas ajouter un commentaire correspondant à l'aide ?


Mais, si l'opérateur, par exemple, >, ne peut être utilisé qu'après une vérification correcte de l'inégalité, alors comment faire pour vérifier >= ? Est-il nécessaire de compliquer encore plus l'algorithme, c'est-à-dire de vérifier l'égalité d'abord avec une fonction spéciale, puis avec une fonction spéciale pour l'inégalité (avant d'utiliser >) ?


Peut-être quelqu'un a-t-il déjà développé une bibliothèque pour tous les cas de comparaison pour les types double et flottant ? J'ai esquissé quelque chose pour les caractères doubles - je ne sais pas si c'est correct :

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на равенство двух вещественных чисел типа double
bool EqualDoubles(const double d1, const double d2)
   {  
      const double epsilon=2.2204460492503131 e-016;//DBL_EPSILON
      if(d1-d2>epsilon) return false;
      if(d1-d2<-epsilon) return false;
      return true;
   }
// Конец функции проверки на равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на неравенство двух вещественных чисел типа double
bool NotEqualDoubles(const double d1, const double d2)
   {      
      return !EqualDoubles(d1, d2);
   }
// Конец функции проверки на неравенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого из двух вещественных чисел типа double
bool LessDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1<d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого из двух вещественных чисел типа double
bool GreaterDoubles(const double d1, const double d2)
   {  
      if (NotEqualDoubles(d1, d2)&&(d1>d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого из двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на меньшинство первого или равенство двух вещественных чисел типа double
bool LessEqualDoubles(const double d1, const double d2)
   {  
      if (LessDoubles(d1, d2)||EqualDoubles(d1, d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на меньшинство первого или равенство двух вещественных чисел типа double
//+++++++++++++++++++++++++++++++++++++++++++++++++
// Функция проверки на большинство первого или равенство двух вещественных чисел типа double
bool GreaterEqualDoubles(const double d1, const double d2)
   {  
      if (GreaterDoubles(d1, d2)||EqualDoubles(d1,d2))
      {
         return true;
      }
      return false;
   }
// Конец функции проверки на большинство первого или равенство двух вещественных чисел типа double

P.S. Si prevcalculated==0, cela fonctionne à nouveau comme d'habitude. Bug flottant ?

 

Bonjour !

J'ai besoin d'utiliser un indicateur personnalisé dans le module des signaux de trading.

Pour cela, d'après ce que je comprends, je dois ajouter un pointeur vers cet objet indicateur dans la "collection d'indicateurs (timeseries ?)" comme cela est fait dans l'exemple :

indicators.Add(GetPointer(m_MA)))

où m_MA est un objet de la classe CiMA.

Les fonctions iCustom et IndicatorCreate renvoient la valeur entière d'un handle de l'indicateur créé, mais j'ai besoin d'un objet de cet indicateur, comme je le comprends.

Veuillez me conseiller sur la manière de me sortir de cette situation.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 
lVlaxim:

Bonjour !

J'ai besoin d'utiliser un indicateur personnalisé dans le module des signaux de trading.

Pour cela, d'après ce que je comprends, je dois ajouter un pointeur vers cet objet indicateur dans la "collection d'indicateurs (timeseries ?)" comme cela est fait dans l'exemple :

où m_MA est un objet de la classe CiMA.

Les fonctions iCustom et IndicatorCreate renvoient la valeur entière d'un handle de l'indicateur créé, mais j'ai besoin d'un objet de cet indicateur, comme je le comprends.

Veuillez me conseiller sur la manière de me sortir de cette situation.

D'après ce que j'ai compris, je devrais écrire mon propre objet indicateur basé sur CiCustom (de façon similaire à la façon dont CiMA est écrit).

Je ne peux pas vous conseiller dans les détails, car je n'ai pas travaillé avec des induits, mais je pense que vous comprendrez ou que les gens vous diront la bonne réalisation.

PS

Au fait, développeurs, veuillez ajouter des exemples à la section sur CiCustom...

 
-Alexey-:

Et une méthode de comparaison spéciale est proposée.

Mais il s'ensuit logiquement qu'il n'est pas recommandé de comparer des nombres réels même au moyen d'opérations plus grand/plus petit, car une telle opération, au sens de ce qui précède, n'est correcte que si l'on établit correctement au préalable, à l'aide d'une méthode spéciale, que les valeurs contrôlées ne sont pas égales au sens de la machine zéro.

Je n'ai peut-être pas bien compris, mais si deux nombres réels sont comparés, disons, à l'aide de l'opération "<" et que les nombres réels vérifiés sont "égaux au sens de la machine zéro", l'opération "<" renverra simplement faux. Ce qui signifie "le premier nombre réel n'est pas inférieur au second nombre réel".
 
lVlaxim:

Bonjour !

J'ai besoin d'utiliser un indicateur personnalisé dans le module des signaux de trading.

Pour cela, d'après ce que je comprends, je dois ajouter un pointeur vers cet objet indicateur dans la "collection d'indicateurs (timeseries ?)" comme cela est fait dans l'exemple :

où m_MA est un objet de la classe CiMA.

Les fonctions iCustom et IndicatorCreate renvoient la valeur entière d'un handle de l'indicateur créé, mais j'ai besoin d'un objet de cet indicateur, comme je le comprends.

Pourriez-vous m'indiquer comment sortir de cette situation ?

Pour l'instant, prenons ce fichier comme exemple.

La classe CSignalCustomMACD est absolument identique à CSignalMACD, à l'exception du fait qu'elle est basée sur la version "personnalisée" de l'indicateur de la livraison standard.

N'oubliez pas d'ajouter une ligne dans le code source de l'Expert Advisor :

#property tester_indicator "Examples\MACD.ex5"

sinon il ne fonctionnera pas dans le testeur.

S'il n'y a pas de fichier MACD.ex5 dans le dossier Indicators\Examples, l'indicateur doit être compilé.

Un exemple dans l'aide sera ajouté dans un avenir proche.

Dossiers :
 
Yedelkin:
Peut-être que je ne comprends pas bien le problème, mais si deux nombres réels sont comparés en utilisant, disons, l'opération "<", et que les nombres réels vérifiés sont "égaux au sens de la machine zéro", alors l'opération "<" retournera simplement false, et c'est tout. Ce qui voudrait dire "le premier nombre réel n'est pas inférieur au second nombre réel".
Ce serait logique, mais maintenant l'opération ">" ("<" n'a pas été vérifié) peut retourner vrai pour de tels nombres "égaux au sens de la machine zéro". Cet effet a été détecté parce que le résultat du calcul numérique était plus grand que ce qui est théoriquement possible en raison de cet effet, mais après avoir utilisé les fonctions spéciales ci-dessus, il est devenu vrai. C'est pourquoi je propose un ajout à l'aide.
Raison: