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

 
Yurij Kozhevnikov:

Merci, j'ai pensé à cette mise en œuvre, mais ce n'est pas tout à fait la même chose en raison de l'absence de Value1 lui-même. C'est-à-dire que l'exemple que j'ai créé est, bien sûr, extrêmement simplifié, mais il est sous-entendu que ce n'est pas la valeur principale de la classe, qu'il peut y avoir un certain nombre de valeurs de ce type et que pour chacune d'entre elles, une construction peut être décrite.

Ou bien, pour une telle implémentation, est-il possible de ne décrire qu'une classe ou une structure distincte dans laquelle on implémente la surcharge, et dans cette classe de décrire les variables du type créé ? Mais, si d'autres variables de la classe sont impliquées dans l'opération d'affectation, là encore, le compte n'y est pas.

En fait, je voulais implémenter quelque chose de similaire aux méthodes Let/Set/Get en vbs.

Je ne comprends pas bien la question mais C++ / MQL n'a pas de propriété clé Propriété

Vous avez peut-être besoin d'une classe modèlehttps://www.mql5.com/ru/docs/basis/oop/class_templates


UPD : Voici un article sur Habra qui traite de la même chosehttps://habr.com/ru/post/121799/ , mais je doute qu'il s'applique "directement" à MQL.

 

Merci beaucoup !

C'est un peu au-delà de mes connaissances, car je n'ai jamais étudié le C++, mais il semble que ce soit exactement ce que je voulais. Je vais essayer de trouver une solution.

 
Yurij Kozhevnikov:

Merci beaucoup !

C'est un peu au-delà de mes connaissances, car je n'ai jamais étudié le C++, mais il semble que ce soit exactement ce que je voulais. Je vais essayer de trouver une solution.

Essayez de formuler brièvement votre question dans ce fil: https://www.mql5.com/ru/forum/85652.

il y a des programmeurs vraiment cool là-bas et ils font des trucs comme ça... Eh bien, peut-être que ceci vous aidera à comprendre plus rapidement.

 

Oui, merci.

Je me suis souvenu que j'en avais utilisé un, mais j'avais oublié qu'il s'agissait d'une propriété et j'ai été obtus en expliquant ce que je voulais.

Il a été mentionné dans les commentaires de l'article que vous pouvez utiliser la substitution de macro, cela m'a fait penser que peut-être en adoptant un accord syntaxique strict avec moi-même, vous pouvez mettre en œuvre un cas pas si commun beaucoup plus facilement.

 
class TestClass
{
  private:
    double cValue1;
    double cValue2;
    double cValue3;
    int cIndex;
    void _Set(double mValue);
  public:
    TestClass():cIndex(-1){}
    double Value1()
    {return cValue1;}

    TestClass* Value(int param)
    {
      cIndex=param;
      return &this;
    }
    void operator =(double mValue) {_Set(mValue);}
};
//---------------------------------------------
void TestClass::_Set(double mValue){
   switch(cIndex){
      case 1:  cValue1=mValue; break;
      case 2:  cValue2=mValue; break;
      case 3:  cValue3=mValue; break;
   }
   cIndex=-1;
}

void TestFunction()
{
  TestClass test;
  test.Value(1)=0.5;
  Print(test.Value1());
}

void OnStart(void)
  {
   TestFunction();
  }
Une telle béquille peut être dépeinte).
 
Vladimir Simakov:
C'est le genre de béquille que l'on peut fabriquer).

Merci, cette béquille est évidemment beaucoup plus simple, même si, même avec celle-ci, je ne comprends toujours pas tout.

Est-il impossible de mettre n'importe quel ensemble de caractères dans une macro-substitution ? Quelque chose comme ça :

#define .<один любой набор символов>()=<второй любой набор символов> Set<один любой набор символов>(<второй любой набор символов>)
#define .<один любой набор символов>(par1)=<второй любой набор символов> Set<один любой набор символов>(par1,<второй любой набор символов>)
 
Aleksey Mavrin:

surcharger simplement DoubleToString, s'il retourne la chaîne "EMPTY_VALUE". sinon, appelez ::DoubleToString

Je ne comprends pas.

 
Fast235:

Je ne comprends pas.

mais autrement

#define DoubleToString(value,digits)  (value!=EMPTY_VALUE?DoubleToString(value,digits):"EMPTY_VALUE") 
 
Aleksey Mavrin:

mais autrement

dans un cas rare, faire et supprimer la source pour ne plus la voir)


si le tampon était un tampon indicateur, vous pourriez le remplacer par EMPTY_VALUE

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE) ;

mais le nombre de tampons est inconnu
 

Après-midi. J'essaie d'attacher un stop loss lu depuis un indicateur atr à mon EA. Les variables d'entrée sont les suivantes.

  extern   ENUM_TIMEFRAMES   PeriodForWork_sl        =  PERIOD_H4;           // ТФ РАСЧЁТА ЗНАЧЕНИЙ СТОП ЛОСА ПО АТР
  extern double sl= 14; // ПЕРИОД АТR СТОП ЛОССА

J'ajoute les valeurs atr à une variable pour un stop loss.

sl=iATR( NULL,PeriodForWork_sl,sl,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

Ensuite, j'essaie d'ouvrir des commandes comme ceci.


OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl*Point,Bid+tp*Point,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

Mais rien ne fonctionne. J'imprime la valeur de la variable Stop Loss mais je constate que sa valeur est 0. Qu'est-ce que je fais de mal ? Où dois-je le corriger et le modifier pour qu'il fonctionne ?