Questions des débutants MQL5 MT5 MetaTrader 5 - page 969

 
Sprut112:
L'EA opère sur une couverture. Peut-être que certains contrôles devraient être ajoutés en standard ?

Est-ce que vous le testez sur un compte en cents par hasard ? Sur certains comptes centraux, le lot minimum est de 0,1 %.

 
Konstantin Nikitin:

J'échange normalement dans le testeur, construction 1960. Ce que je mets, c'est ce qu'il faut sur 12 paires en même temps.

Pourquoi le numéro 16 est un lot de 0,01 ?
 
Konstantin Nikitin:

Est-ce que vous testez sur un compte en cents par hasard ? Sur certains comptes centraux, le lot minimum est de 0,1 %.

Non, il y a des contrôles sur le minimum, le maximum et les incréments de lot.
 
Sprut112:
Et pourquoi le lot #16 0.01 ?

Si vous faites référence à ma photo, c'est la fermeture partielle de l'expert qui a fonctionné. C'est écrit proche.

Sprut112:
Non, vérifie le minimum, le maximum et les incréments de lot.
Peut-être que cette vérification cherche un minimum plus grand que le minimum actuel et le substitue.
 
Konstantin Nikitin:

Si vous faites référence à ma photo, c'est la fermeture partielle de l'expert qui a fonctionné. Il est dit que c'est proche

Peut-être que cette vérification cherche un minimum plus grand que le minimum actuel et le substitue.
On peut y penser de cette façon. Cela ne se produit pas immédiatement dans le testeur, mais environ un mois plus tard.
 
Artyom Trishkin:

Pourquoi votre code ne fonctionne-t-il pas comme vous le souhaitez dans mql4 avec #property strict ?

Quelle est la différence si fondamentale avec le code que vous a montré Vladimir :

Et il n'y a aucune différence dans ces mises en œuvre. Et il n'y a qu'une seule raison pour que votre code ne produise pas de descriptions textuelles - c'est l'absence de #property strict dans le code mql4.


Je n'ai pas compris tout de suite et j'ai pensé que cela ne fonctionnait pas pour moi à cause de l'absence de =0, =1, etc....

enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };

mais il s'est avéré que c'était la même chose...

string xx=EnumToString(Symboll_(1)) ; // résultat symbol_1

J'aurais dû prendre le NZDUSD.

  в таком варианте всё Ок но не получается добавить символ с решёткой #CL
enum  Symboll_
  {
   AUDUSD,
   NZDUSD,
   USDCAD
   //#CL
  };
string xx=EnumToString(Symboll_(1)); // результат NZDUSD

Mais la variante du tableau est juste ce dont j'avais besoin...

 
xxz:

Je n'ai pas compris tout de suite et je pensais que j'échouais parce que je n'avais pas =0, =1, etc...

mais il s'est avéré que c'était la même chose...

string xx=EnumToString(Symboll_(1)) ; // résultat symbol_1

J'aurais dû prendre le NZDUSD.

Mais cette variante du tableau est juste ce dont j'avais besoin...

Naturellement, lors de la sortie d'une énumération via EnumToString(), vous n'obtiendrez pas une description de la variable derrière le "//" mais la variable elle-même telle quelle.

Pour afficher l'énumération comme vous le souhaitez, vous devez créer une fonction analogue à EnumToString(), qui l'imprimera.

Pour une énumération comme celle-ci :

enum ENUM_SYMBOL_NAMES
  {
   SYMBOL_NAME_AUDUSD,     // AUDUSD
   SYMBOL_NAME_NZDUSD,     // NZDUSD
   SYMBOL_NAME_USDCAD,     // USDCAD
   SYMBOL_NAME_USDCHF,     // USDCHF
   SYMBOL_NAME_USDJPY,     // USDJPY
   SYMBOL_NAME_EURJPY,     // EURJPY
   SYMBOL_NAME_EURUSD,     // EURUSD
   SYMBOL_NAME_GBPUSD,     // GBPUSD
   SYMBOL_NAME_SHARP_CL,   // #CL
  };
input ENUM_SYMBOL_NAMES InpNames; // Instrument

Comme ça :

//+------------------------------------------------------------------+
string InstrumentToString(void)
  {
   string enm=EnumToString(InpNames);
   int index=StringFind(enm,"SHARP_");
   int shift=(index>WRONG_VALUE ? index+6 : 12);
   string name=StringSubstr(enm,shift);
   return(index>0 ? "#"+name : name);
  }
//+------------------------------------------------------------------+

Et appelez :

Print(InstrumentToString());
 
double get_lot(int pair, double input_lots) {
   if(input_lots<min_lot[pair]) return(min_lot[ir]);
   return(input_lots);
 
Konstantin Nikitin


:

Si vous faites référence à ma photo, c'est la fermeture partielle de l'expert qui a fonctionné. C'est écrit proche.

Peut-être que cette vérification cherche à savoir si le minimum est plus grand que le minimum actuel et le remplace.
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

Je ne pense pas que ce soit juste.

 
Vladimir Karputov:

Mieux encore, indiquez clairement ce que vous voulez atteindre. Je vais probablement vous donner un exemple complet.

Il était une fois, en 2010, en hiver. J'ai également demandé à filtrer dans un indicateur dont l'essence est de dessiner la HLine Mach & Min avec PERIOD_MN1 pour iBars....))))

Je l'ai compris tout seul. Maîtrise de MT4.

Lentement, pas immédiatement, je maîtrise MT5.

...."Exposez clairement ce que vous voulez obtenir" FORMULE : Je convertis (moi-même) ce que j'ai programmé (moi-même) et en même temps je maîtrise (moi-même) MT5 ))))


MAIS ce que vous m'avez montré avec des exemples (visuellement) n'a PAS disparu.


SI C'EST LE cas, j'y retournerai ;)))

Si SHO, j'y retournerai






 
Artyom Trishkin:

Naturellement, lorsque vous imprimez une énumération à l'aide de EnumToString(), vous n'obtiendrez pas une description de la variable, qui se trouve derrière "//", mais la variable elle-même telle qu'elle est.

Pour l'imprimer comme vous le souhaitez, vous devez créer une fonction analogue à EnumToString(), qui l'imprimera.


C'est là que le bât blesse, car pour résoudre la tâche la plus simple, il faut créer une fonction et cela représente un tas de code dont personne n'a besoin,

au lieu d'une ligne de dix...

J'essaie d'être aussi succinct que possible ....

A l'origine, je pouvais contourner ce problème en ajoutant une seule ligne au code

            xx=iClose(Symbol_(i),0,50);
xx=iClose("#CL",0,50);

mais je ne l'ai pas aimé juste à cause de la ligne supplémentaire dans le code...

Je n'aime pas le code "sale"...