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

 
Alexey Viktorov #:
Pourquoi attendre jusqu'à demain ? Si vous êtes trop paresseux pour consulter les spécifications, exécutez le script sur tous les symboles qui vous intéressent et trouvez une correspondance pour la monnaie de marge et la monnaie de profit.
Je n'ai pas tout vérifié avant d'écrire, mais je n'ai trouvé aucune coïncidence...

Un peu occupé aujourd'hui.


Taras Slobodyanik #:

Eh bien, le point est rapide - j'ai pris le code de la devise, j'ai fait une recherche sur un tableau prêt qui est mis à jour quand une transaction est ouverte.

Il est difficile de tout noter dans un tableau une seule fois.

 
Yevhenii Levchenko variable statique var de la méthode X::doJob(). Il existe une classe U qui crée un objet de type X, effectue un travail et le détruit. Et cela arrive périodiquement. Question : quand la variable var est-elle supprimée ?


Il vivra pour toujours.

 
Koldun Zloy #:

Il vivra pour toujours.

Tant que l'objet U est en vie ? Ou jusqu'à ce que le terminal soit redémarré ? En gros, après quoi il est supprimé ?

 
Yevhenii Levchenko #:

Tant que l'objet U est vivant ?

Non, l'instance de la classe ne sera peut-être même pas créée, mais le champ statique de la classe se verra allouer de la mémoire et sera initialisé..... D'ailleurs, votre exemple, à mon avis, ne devrait pas compiler, l'initialisation des champs statiques devrait être en dehors de la description

Yevhenii Levchenko #:

Jusqu'à ce que le terminal soit surchargé ? Grosso modo, après quoi il est retiré ?

Le terminal n'a rien à voir avec cela, la durée de vie est la même que pour les variables déclarées globalement ou pour les variables statiques ordinaires - la mémoire est allouée lorsque vous chargez le programme MQL et libérée lorsque vous déchargez le programme MQL.

 
Igor Makanu #:

Non, l'instance de la classe ne sera peut-être même pas créée, mais le champ statique de la classe se verra allouer de la mémoire et sera initialisé..... D'ailleurs, votre exemple, à mon avis, ne devrait pas compiler, l'initialisation des champs statiques devrait être en dehors de la description.

Ok ! Ça semble compiler...

Igor Makanu #:

Le terminal n'a rien à voir avec cela, la durée de vie est la même que pour les variables décrites globalement ou les variables statiques ordinaires - la mémoire est allouée au moment du chargement du programme MQL et est libérée lors du déchargement du programme MQL.

C'est-à-dire que si tout est à l'intérieur de l'EA, la variable restera en mémoire jusqu'à OnDeinit() de l'EA ?

 
Yevhenii Levchenko #:

Norm ! semble compiler...

Donc, si tout est dans EA, la variable reste en mémoire jusqu'à OnDeinit() de EA ?

Les variables statiques sont détruites après OnDeinit().

 
Koldun Zloy #:

Les variables statiques sont détruites après OnDeinit().

Ok ! Merci :)

 
Une aide pour choisir un courtier, le meilleur endroit pour négocier et le retrait ne devrait pas être un problème.
 
dryun777 #:
Aide pour choisir un courtier, où il est préférable de trader et où le retrait ne serait pas un problème... Merci.

Sur cette ressource, nommer un courtier équivaut à une discussion. Et la berceuse ne dort pas et menace de représailles. Alors, regardez par vous-même...

 
Alexey Viktorov #:

Valeri a le bon sens de la pensée. Mais je ne comprends pas pourquoi nous devons définir la devise que nous recherchons dans les devises d'ordre à chaque itération du cycle ? Et je pense qu'il est plus facile de prendre la devise de la marge et la devise du profit au lieu de regarder dans la ligne. Regardez la spécification pour les devises ... Je l'aurais fait.

bool Search(string _sy)
 {
  int OT = OrdersTotal();
  string curencyProfit = SymbolInfoString(_sy, SYMBOL_CURRENCY_PROFIT),
         currencyMargin = SymbolInfoString(_sy, SYMBOL_CURRENCY_MARGIN);
  for(int i = 0; i < OT; i++)
   {
    if(OrderSelect(i, SELECT_BY_POS))
     {
      bool res = StringFind(OrderSymbol(), curencyProfit) >= 0 ||
                 StringFind(OrderSymbol(), currencyMargin) >= 0;
      if(res)
        return(true);
     }
   }
  return(false);
 }

Je l'ai vérifié, il fonctionne correctement.

Merci !