[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 667

 
artmedia70:

Mes amis, je ne comprends pas pourquoi ça ne marche pas :

Si une position avec la magie 5100 est trouvée dans la boucle, la boucle doit passer à une nouvelle itération :

... Mais cela ne se produit pas et la position sélectionnée avec un nombre magique de 5100 commence à participer aux calculs ultérieurs en tant que position la plus perdante...

C'est le verrouillage... Et puis, en conséquence, un autre verrou est posé dessus...

Aidez-moi à comprendre où le chien est caché...

C'est tout, merci, pas besoin. J'ai trouvé le chien moi-même...
 

Jusqu'à présent, j'ai travaillé avec des fonctions simples qui produisent une seule valeur de sortie.

La fonction peut-elle sortir les valeurs de plusieurs variables ? Par exemple : Time_1, High_1, Low_1, Time_2, High_2, Low_2.

Merci !

 
chief2000:

Une fonction peut-elle donner les valeurs de plusieurs variables ?


Une fonction ne peut renvoyer qu'un seul paramètre, mais personne n'interdit à une fonction de travailler avec des variables déclarées en dehors de la fonction start()(variables globales).
 
DDFedor:

La fonction ne peut renvoyer qu'un seul paramètre, mais personne n'interdit à la fonction de travailler avec des variables déclarées en dehors de la fonction start() (variables globales).


Prenons un exemple simple : si [MA_1>=Ma_2], vous devez renvoyer les valeurs Time_1, High_1 et Low_1.

pour la barre à laquelle le croisement a eu lieu. Ce module dans start() est

 
chief2000:


n'est-ce pas ?


Mais il faut tenir compte du fait que les valeurs de ces variables sont pertinentes jusqu'à ce que la fonction soit appelée à nouveau. par conséquent, les variables doivent être utilisées IMMÉDIATEMENT après l'appel de la fonction. alors les variables contiendront les valeurs calculées pour CET appel de fonction.
 
DDFedor:

Mais il faut tenir compte du fait que les valeurs de ces variables sont pertinentes jusqu'à ce que la fonction soit appelée à nouveau. par conséquent, les variables doivent être utilisées IMMÉDIATEMENT après l'appel de la fonction. alors les variables contiendront les valeurs calculées pour CET appel de fonction.

Oui, c'est compréhensible. Merci !

 
chief2000:

Jusqu'à présent, j'ai travaillé avec des fonctions simples qui produisent une seule valeur de sortie.

La fonction peut-elle sortir les valeurs de plusieurs variables ? Par exemple : Time_1, High_1, Low_1, Time_2, High_2, Low_2.

Et qu'est-ce qui vous empêche d'utiliser le passage des paramètres par référence plutôt que par valeur dans la déclaration des fonctions ? Exemple (fondements de la langue/variables/paramètres formels) :

Il est possible de passer des paramètres par référence. Dans ce cas, la modification de ces paramètres affectera les variables correspondantes dans la fonction appelée passée par référence. Vous ne pouvez pas transmettre des éléments de tableaux par référence. Les paramètres peuvent être passés par référence uniquement dans les limites d'un seul module, cette possibilité n'est pas offerte aux fonctions de bibliothèque. Pour spécifier qu'un paramètre est transmis par référence, le modificateur & doit être placé après le type de données.

Exemple :

void func(int& x, double& y, double& z[]) { double calculated_tp ; ... for(int i=0 ; i<OrdersTotal() ; i++) { if(i==ArraySize(z)) break ; if(OrderSelect(i)==false) break ; z[i]=OrderOpenPrice() ; } x=i ; y=calculated_tp ; }

Les tableaux peuvent également être transmis par référence, toutes les modifications seront reflétées dans le tableau d'origine. Contrairement aux paramètres simples, les tableaux peuvent également être transmis par référence aux fonctions de la bibliothèque.

Notez que func() est de type void, mais que son exécution modifiera les trois paramètres déclarés à l'extérieur, puisqu'ils sont tous trois pourvus du modificateur &. Y compris, d'ailleurs, le tableau z[] change complètement.
 
Mathemat:

Et qu'est-ce qui vous empêche d'utiliser le passage des paramètres par référence plutôt que par valeur dans la déclaration de la fonction ? Exemple (fondements de la langue/variables/paramètres formels) :

Notez que la fonction func() est de type void, mais que son exécution modifiera les trois paramètres déclarés en dehors d'elle, puisqu'ils sont tous trois pourvus du modificateur &. Y compris, d'ailleurs, le tableau z[] change complètement.

Merci beaucoup !

 
Comment faire ! Si la dernière transaction n'a pas été rentable, vous devez changer de lot, sinon, vous ne le faites pas) ?
 
rovlent:
Comment le faire ! Si la dernière transaction n'a pas été rentable, nous devrions changer de lot, sinon - non ?)


Par exemple, comme ceci

//=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit=true;
   int PrevTime=-1;
   double tmpLots;
   for (int i=0;i<OrdersHistoryTotal();i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderMagicNumber()!=MAGIC)                  continue;
      if (OrderCloseTime()<PrevTime)                  continue;
      PrevTime=OrderCloseTime();
      if (OrderProfit()>0) bProfit=true; else bProfit=false;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return(Res);
}

Augmenté par le pas fixé par le DC. Bien que les variantes puissent être différentes

dLots - taille de la position par défaut