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

 
Vikon:
Voici comment appeler une fonction à l'intérieur d'une classe : comment private : public :, comment passer des données à la classe et comment obtenir un résultat de la classe. Jusqu'à présent, c'est ça !

Dans la classe, le résultat doit être calculé d'une manière ou d'une autre. Et comment la classe, sans votre participation, comprendra-t-elle qu'elle doit renvoyer le résultat maintenant, mais pas à un autre moment ?

Vous avez donc besoin d'une méthode à l'intérieur de la classe qui peut être appelée de l'extérieur. Elle doit donc être publique.

Bien entendu, vous pouvez créer une méthode privée qui lira toutes les données de la classe et les écrira dans la variable de la classe, et la méthode publique appellera la méthode privée. Mais une méthode doit être appelée de toute façon. Et ce qui y sera compté en méthode privée, la complexité des calculs, et les variables qui seront impliquées dans les calculs - tout dépend de vous, et de votre propre responsabilité.

 
Vikon:
C'est le but, comment appeler une fonction dans une classe, à savoir comment private : public :, comment passer des données à une classe et comment obtenir le résultat de la classe. Jusqu'à présent, c'est ici !
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      inputA=1;
input int      inputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int Add(int a,int b)
     {
      Print(__FUNCTION__,": Результат сложения: a",a," + b",b," = ",a+b);
      return(a+b);
     }
  } ar;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ar.Add( inputA, inputB );
  }
//+------------------------------------------------------------------+
Il semble que cela devrait fonctionner, je n'ai pas vérifié si c'est correct).
 
Alexey Kozitsyn:
Je pense que cela devrait fonctionner, je n'ai pas vérifié si c'était correct).

Voilà, merci, je commence déjà à bouger -

le script :

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

classe :

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

L'alerte donne un résultat de 8, mais c'est une alerte de la classe, et j'ai maintenant besoin d'une alerte du script.

 
Vikon:

Voilà, merci, je commence déjà à bouger -

le script :

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

classe :

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert donne un résultat de 8, mais c'est une alerte de la classe, et maintenant j'ai besoin d'une alerte du script
.

Ok, vous déclarez une méthode Alert( ) dans la classe et l'appelez ar.Alert(), bien que maintenant la méthode sf() fasse la même chose. Je ne suis pas tout à fait sûr de ce que vous voulez voir après avoir écrit une valeur dans le champ d ?
 
Alexey Kozitsyn:
Ok, vous déclarez la méthode Alert() dans la classe et l'appelez ar.Alert(), bien que maintenant la méthode sf() fasse la même chose. Je ne sais pas vraiment ce que vous voulez voir après avoir écrit une valeur dans le champ d ?
Si vous voulez obtenir la valeur de d sans appeler la méthode sf(), vous devez ajouter une méthode publique int GetD() const { return( d ) ; }. Et dans le script, écrivez Alert( ar.GetD() ) ;
 
Alexey Kozitsyn:
Il semble que cela devrait fonctionner, mais je ne l'ai pas encore vérifié.)

Tout le monde ! Merci beaucoup ! Je l'ai.

script :

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   Alert ( ar.sf ());
  }

classe :

class ASD
  {
private:
  int d;
  int g   (int a_s,int a_d)  {return (d=a_s+a_d); }
public:
  void fg (int a_s,int a_d)  { g (a_s,a_d); }
  int sf  ()                 {return (d);}    
  
  };


Je vais le mâcher !

 

Je ne me souviens plus qui m'a écrit dans ce fil de discussion que le testeur est cassé, mais je peux répondre qu'il pourrait aussi bien être cassé. Soit il avale différents morceaux de temps, soit il commence à compter à partir d'un segment arbitraire (bien que toutes les citations soient là).

Je pense que ceux qui ont besoin de voir comprendront.

 
Bonjour, pourriez-vous me dire si la fonction MRoubd peut être importée depuis MSDN
?
(renvoie un nombre arrondi à un multiple d'une valeur donnée)

ou comment arrondir, par exemple, 2285.13 pour être un multiple de (0.25) 2285.00 __ 2285.25 ___ 2285.50 ___ 2285.75
 
Comment puis-je connaître l'effet de levier d'une paire, et non d'un compte ?
 
SAMER:
comment connaître l'effet de levier d'une paire plutôt que d'un compte ?

Le montant de l'effet de levier fourni :

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
Raison: