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

 
Vitaly Muzichenko #:

Pouvez-vous me dire comment raccourcir la construction?

Il s'agit de couper les paires qui contiennent déjà un symbole.

J'ai une position sur USDCHF

===

Il y a une position sur l'EURGBP, le signal provient de l'AUDUSD - comment pouvons-nous détecter qu'il n'y a pas de position sur l'AUD ou l'USD ?

Valery a une façon correcte de penser. Mais je ne comprends pas pourquoi nous devrions identifier la devise que nous recherchons dans les devises d'ordre à chaque itération du cycle ? Et il me semble 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 des devises... Je ferais ceci

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);
 }/******************************************************************/
 
Valeriy Yastremskiy #:

StringFind

Je pense qu'il devrait y avoir 2 lignes, cherchant à la fois les positions 0 et 3. Pour couper une correspondance aléatoire au milieu.

SZ

Idiot, il y a 4 conditions.

Non égal à A B et non égal à C D

condition A==C ou A==D ou B==C ou B==D

Je pense que personne ne pourrait l'écrire)))

Muet au deuxième essai. Apparemment, le moment est venu dans la soirée.

 
Vitaly Muzichenko #:

Pouvez-vous me dire comment raccourcir la construction?

Il s'agit de couper les paires qui contiennent déjà un symbole.

J'ai une position sur USDCHF

===

Il y a une position sur l'EURGBP, le signal provient de l'AUDUSD - comment détecter qu'il n'y a pas de position sur l'AUD ou l'USD ?

Je rassemblerais toutes les devises à ordre ouvert dans un tableau et je passerais par ce tableau à la réception du signal.

 
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 le ferais ainsi

Je le vérifierai demain.


Taras Slobodyanik #:

Je rassemblerais toutes les devises à ordre ouvert dans un tableau et je regarderais dans le tableau dès que je recevrais un signal.

L'idée est la même, mais vous avez également besoin d'un tableau

 

vous pouvez également définir une magie 1 = AUD, 2 = EUR.... pour chaque devise et comparer les magies,

à propos des tableaux, je pense qu'il est rationnel, maintenant 3 paires de devises 4 conditions, demain 33 paires de devises 34 conditions ?

 
Vitaly Muzichenko #:

Je vérifierai demain.


Le principe est le même, mais vous avez également besoin d'un tableau.

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.
/********************Script program start function*******************/
void OnStart()
 {

  Comment(SymbolInfoString(_Symbol, SYMBOL_CURRENCY_PROFIT), "\n",
          SymbolInfoString(_Symbol, SYMBOL_CURRENCY_MARGIN)
         );
 }/******************************************************************/
Je n'ai pas tout vérifié avant d'écrire, mais je n'ai pas trouvé de correspondance...
 
Vitaly Muzichenko #:

La signification est la même, mais vous avez également besoin d'un tableau

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

 

Aide avec le code. J'ai besoin que l'ordre en attente se déplace avec l'ouverture d'une nouvelle barre sur la ligne de tendance.

C'est-à-dire qu'il s'agirait d'un franchissement permanent de l'ordre et de la ligne.

Il faut connaître le point de passage de la ligne de tendance et le moment pour la faire évoluer. comment le calculer ?

 
Zalevsky1234 ordre en attente se déplace avec l'ouverture d'une nouvelle barre le long de la ligne de tendance.

C'est-à-dire qu'il s'agirait d'un franchissement permanent de l'ordre et de la ligne.

Il faut connaître le point de passage de la ligne de tendance et le moment pour la faire évoluer. comment le calculer ?

Voici la fonction permettant de calculer le point d'intersection
 

Question sur la 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 ?


class X {
public:
   void doJob() {
      static int var = 0;
   }
};

class U {
private:
   X *x;
public:
   U(){

   }
   ~U() {
      delete x;
   }
   void U::dojob(){
      x = new X();
      x.doJob();
      delete x;
   }
};