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

 
Alexandr Sokolov:

J'obtiens toujours des valeurs non normalisées après normalisation - MQL5

Le plus défavorable 1e-05, Que faire ?

DoubleToString(....) vous aidera.

 

Existe-t-il une astuce pour obtenir la valeur d'un élément d'une classe supérieure ?


Code :

class B
  {
   int x
   int               GetA()
     { ????  }
  };

class A
  {
   int               a;
   B                 b;
public:
  };


Un élément de la classe B est à l'intérieur de la classe A. Comment puis-je obtenir la valeur de a (de la classe A) à partir de B ?

 
Sergey Likho:

Il existe une astuce pour obtenir la valeur d'un élément d'une classe supérieure


Code :


Un élément de la classe B est à l'intérieur de la classe A. Comment obtenir la valeur de a (de la classe A) tout en étant à l'intérieur de B ?

La classe B ne sait rien de la classe A.
Vous devez hériter. Vous pouvez alors appeler la méthode de la classe mère à partir de la classe enfant. Mieux utiliser l'opérateur de résolution de contexte : :
 
Sergey Likho:

Existe-t-il une astuce pour obtenir la valeur d'un élément d'une classe supérieure ?


Code :


Un élément de la classe B est à l'intérieur de la classe A. Comment puis-je obtenir la valeur de a (de la classe A) à partir de B ?

class A;

class B
  {
   A*  ptr;
   int x;
public:
   B(int mX,A* mPtr):ptr(mPtr),x(mX){}
   void  Print() {Alert("From B\na=",ptr.Get(),"\nx=",x);}
  };

class A
  {
   int               a;
   B*                b;
public:
   A(int mA,int mB):a(mA),b(new B(mB,&this)){}
  ~A() {delete b;}
   void   PrintB() {b.Print();}
   void   PrintA() {Alert("From A\na=",a);}
   int    Get()   {return a;}
  };
  
void OnStart(){
   A a(8,10);
   a.PrintA();
   a.PrintB();   
  }
 
Artyom Trishkin:

Veuillez me conseiller :

Pouvez-vous me dire comment résoudre le problème de l'appel de l'indicateur sur MT5 windows 10 X64, je procède de cette façon :

#resource "\Indicators\\\\NMonIndicateur.ex5"

handle=iCustom(NULL,0,"::Indicateurs\\\\MyIndicator") ;

Il fonctionnait sans #resource, puis il n'a commencé à fonctionner qu'avec #resource, maintenant rien ne fonctionne, l'erreur 4804 est générée.

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • www.mql5.com
В MQL5 существует несколько вариантов вызова индикаторов, и осуществляются они в основном при помощи функций IndicatorCreate() и iCustom(). Причем эти функции лишь возвращают хендл индикатора, и дальнейшая работа с индикаторами ведется именно через него. Так что же такое хендл? Как работать с функциями IndicatorCreate() и iCustom()? И как...
 
Alexandr Sokolov :

J'obtiens toujours des valeurs non normalisées après normalisation - MQL5

Le plus défavorable 1e-05, Que faire ?

Essayez ça :


if (index <= 65 && index> = 55 ) PrintFormat (index, "" , up, "" , down, "" , sum, "%.5f" , minus);
 
Sergey Likho:

Existe-t-il une astuce pour obtenir la valeur d'un élément d'une classe supérieure ?


Code :


Un élément de la classe B est à l'intérieur de la classe A. Comment puis-je obtenir la valeur de a (de la classe A) à l'intérieur de B ?

class A;

class B
{
public:
   int x;
   int               GetA(A &reference) {  return reference.a;} };
//+------------------------------------------------------------------+
class A
{
public:
   int               a;
   B                 b; };
//+------------------------------------------------------------------+
A obj;
void OnStart()
{
   obj.a = 10;
   int result = obj.b.GetA(obj);
   printf("result = %d",result);
}
//+------------------------------------------------------------------+

2020.01.20 20:30:05.534 tst (EURUSD,H1) résultat = 10

 
Igor Makanu:

2020.01.20 20:30:05.534 tst (EURUSD,H1) résultat = 10

Faux. Vous passez un pointeur à un objet dans une méthode. Mon point de vue est le suivant :

class A;

class B
  {
   A*  ptr;
   int x;
public:
   B(int mX,A* mPtr):ptr(mPtr),x(mX){}
   void  Print() {Alert("From B\na=",ptr.Get(),"\nx=",x);}
  };

class A
  {
   int               a;
   B                 b;
public:
   A(int mA,int mB):a(mA),b(mB,&this){}
   void   PrintB() {b.Print();}
   void   PrintA() {Alert("From A\na=",a);}
   int    Get()   {return a;}
   B*     GetB() {return &b;}
  };

void OnStart(){
   A a(8,10);
   B* b=a.GetB();
   b.Print();   
  }
En d'autres termes, vous pouvez obtenir de A un pointeur vers B et travailler avec lui, alors que B a accès à A.
 
Vladimir Simakov:

Faux. Vous passez un pointeur à un objet dans une méthode. Mon point de vue est le suivant :

En d'autres termes, vous pouvez prendre un pointeur vers B à partir de A et travailler avec lui, et B a accès à A.

J'ai vu votre code

Mais ce n'est pas la première fois que l'auteur de la question "manie la feuille de vigne" en toute simplicité - j'ai déjà répondu à cette question presque sur OOP une fois )))).

en fait, il avait juste besoin d'une description de l'attaquant de classe A, mais il est le seul à le savoir)))


HH : Je passe une référence à un objet ; vous pouvez faire ce que vous voulez avec cette référence, mais ce genre de code n'a aucun sens en général. Habituellement, comme vous l'avez écrit dans votre exemple, vous utilisez un pointeur de classe vers vous-même et vous l'utilisez ensuite de manière pratique.

 
J'ai écrit un simple indicateur gratuit, mais je ne peux pas ajouter de description. Je le remplis en respectant toutes les exigences, j'appuie sur "enregistrer" - tout est OK, pas d'erreur. Mais après le chargement de la page, il n'y a pas de description...