MetaTrader 4 Build 529 beta publié avec un nouveau compilateur - page 125

 
stringo:

Vous ne pouvez pas modifier les variables d'entrée !

Utilisez le mot-clé input au lieu de extern, alors le compilateur ne vous laissera pas faire ceci

On va voir ce qu'on peut faire pour garder l'ancienne fonctionnalité du quadruplet.

PS : merci beaucoup d'en avoir parlé


Il n'y avait donc aucun objectif de les changer !

Ils sont juste utilisés pour d'autres calculs. Rien de plus !

Eh bien, en principe, je vois, nous avons résolu ce problème en introduisant une variable supplémentaire.

extern int TakeProfit_= 10;
int TakeProfit;
......  
   int dig = (int)MarketInfo(Symbol(), MODE_DIGITS);
   if (dig == 5 || dig == 3)
   {
      TakeProfit  = TakeProfit_* 10;
.....
 
Night63:


Il n'y avait donc aucun intérêt à les changer !

Ils sont simplement utilisés pour d'autres calculs. Pas plus que ça !

Eh bien, en principe, nous avons résolu ce problème en introduisant une variable supplémentaire.


C'est vrai... Mais pourquoi prendre la peine de vérifier une constante immuable à chaque tic? Il suffit de le définir une fois dans init()
 
stringo:

Vous ne pouvez pas modifier les variables d'entrée !

J'utilise la valeur des variables externes (pour certaines variables) comme valeur par défaut, et je lis le reste des données pour le même paramètre dans le fichier ini.

Les conseillers experts travaillent simultanément avec plusieurs stratégies qui ont leurs propres paramètres d'entrée. Exemple :

extern int TF = 15;
int gia_TF[5];
void start()
{
    for (int li_TF = 0; li_TF < ArraySize (gia_TF); li_TF++)
    {
        TF = gia_TF[li_TF];
    }
}

Oui - le problème peut être résolu en entrant des variables supplémentaires, mais pourquoi ? Clarifiez, cette fonctionnalité sera-t-elle privée par le nouveau MT ?

 
TarasBY:
J'utilise la valeur des variables externes (pour certaines variables) comme valeur par défaut, et je lis les autres données pour le même paramètre dans le fichier ini.

Les conseillers travaillent simultanément avec plusieurs stratégies qui ont leurs propres paramètres d'entrée. Exemple :

Oui - la question peut être résolue en introduisant des variables supplémentaires, mais pourquoi ? Clarifiez, cette fonctionnalité sera-t-elle privée par le nouveau MT ?

Je vous l'avais dit. :-))

C'est redondant. Cela signifie qu'un inline avec des variables externes comme variables externes est inutile. Vous pouvez supprimer extern. Vous ne remarquerez même pas la différence. Vous initialisez à partir du fichier INI de toute façon.

 
TarasBY:
J'utilise la valeur des variables externes (pour certaines variables) comme valeur par défaut, et je lis les autres données pour le même paramètre à partir du fichier ini.

Les conseillers travaillent simultanément avec plusieurs stratégies qui ont leurs propres paramètres d'entrée. Exemple :

Oui - le problème peut être résolu en introduisant des variables supplémentaires, mais pourquoi ? ! Clarifiez, cette fonctionnalité sera-t-elle privée par le nouveau MT ?


Non, il ne sera pas privé.

Tout sera comme dans les quatre anciens. Les codes écrits depuis longtemps (même recompilés avec le nouveau compilateur) fonctionneront comme avant.

 
Zhunko:

Je te l'avais dit... :-))

C'est redondant. Cela signifie que l'inclusion avec les variables externes comme variables externes est inutile. Vous pouvez omettre extern. Vous ne remarquerez même pas la différence. Vous initialisez à partir du fichier INI de toute façon.

Vadim ! Qui est un combattant de l'universalité et de la multivariance ?! :)
 
stringo:

Non, ça ne le sera pas.

Tout sera comme dans l'ancien quadrant. Le code écrit depuis longtemps (même recompilé avec le nouveau compilateur) fonctionnera comme avant.

Merci. OK.
 
avtomat:

C'est vrai... Mais pourquoi prendre la peine de vérifier une constante immuable à chaque tic ? Il suffit de le définir une fois dans init()


Vous avez raison, c'est comme ça que ça s'est passé au départ, nous avons essayé toutes sortes de choses au stade de la résolution des problèmes.

Maintenant, revenons à l'init, merci d'avoir signalé la faille !

 
stringo:

Pouvez-vous expliquer la signification physique de votre code ?

Le symbole est déjà sélectionné, si son graphique est ouvert, sur lequel ce conseiller expert travaille.

Vous ne pouvez pas re-sélectionner un symbole déjà sélectionné. Impossible de masquer un symbole dont le graphique est ouvert.


Le point physique consiste à vérifier que le symbole dont le nom est saisi sous forme de chaîne dans les paramètres d'entrée de l'EA est disponible pour le trading. Le code identique dans MT5 fonctionne.

Le code que j'ai cité n'est qu'un exemple. C'est un peu différent là-bas, mais le sens reste le même.

P.S. Qu'en est-il de l'erreur 138 dans le testeur ?

Code :

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      string SYMBOL=Symbol();
      int digits=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
      MqlTick lasttick={0};
      if(!SymbolInfoTick(SYMBOL,lasttick))
         return;
      double ask=lasttick.ask;
      double bid=lasttick.bid;

      OrderSend(SYMBOL,OP_BUY,0.1,NormalizeDouble(ask,digits),1000,0,0,"Test",0,0,CLR_NONE);
     }
  }

Résultat :

 
Quelques anecdotes sur les objets graphiques.

Cette fois-ci OBJ_EDIT.

1) impossible d'entrer des données, quand on clique dans OBJ_EDIT rien ne se passe, les données dans le champ ne sont pas mises en évidence (avant il était impossible de sortir du champ sauf avec la touche "ENTER", maintenant il est impossible d'entrer) ;

2) OBJPROP_ANCHOR ne fonctionne pas ;

3) Lorsque OBJ_EDIT est sélectionné, un point pour déplacer l'objet apparaît dans le coin supérieur gauche, mais avec un certain décalage, bien que très faible, en fonction du coin de la carte (OBJPROP_CORNER) à partir duquel les coordonnées sont comptées.

Aucun autre problème de rendu ou de déplacement des objets graphiques. Merci pour la correction.