Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 236

 
int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
 else Alert ("a=", a+1);
 else Alert ("a=", a+2);
}

Si la première condition n'est pas remplie, nous avons une alerte : " a=2 ".

Si la deuxième condition n'est pas remplie, nous avons une alerte : "a=1".

Lorsque la troisième condition n'est pas remplie, nous avons une alerte : "a=0".

Oui, au début, c'était inattendu ;))

 
ALXIMIKS:

pas d'alerte de ce script. Else se réfère à la condition " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAA") ; a=5;} "

Remerciements :

avoir une Alerte : "a=0".

Le résultat est que le traitement des non-conditions n'est possible que pour la dernière condition lorsque les accolades "{" ne sont pas utilisées pendant l'énumération d'une certaine série de conditions.

C'est vrai, la logique fonctionne, il suffit de ne pas tout mettre sur une seule ligne :

int start(){
 int a=0;
 if (3>3)
    if (5>3)
       if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
       else Alert ("a=", a);
}
alors cela deviendra plus clair. Les parenthèses sont nécessaires si if est vrai : {opérateur1;opérateur2;opérateurN}. S'il n'y a qu'un seul opérateur, les accolades peuvent être omises, et comme l'opérateur est aussi une condition, tout est répété.
 
artmedia70:

C'est-à-dire que les parenthèses sont nécessaires pour organiser les branches logiques. Sans eux, la première condition est fondamentale. Si elle n'est pas vraie, les autres conditions ne seront pas remplies.

Essayez de vous en sortir :

Et après ça, trouvez à quoi d'autre il fait référence :


else se réfère à " if (b>c) ".
 

Bonjour.

if (DayOfWeek()==DayOfWeekIf
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)+Duration)
   {
    if  (iClose("XAUUSD",PERIOD_H1,0)-iOpen("XAUUSD",PERIOD_H1,0)>=0)
    Sell = true;
    if  (iOpen("XAUUSD",PERIOD_H1,0)-iClose("XAUUSD",PERIOD_H1,0)>0)
    Sell =false;
   }
  if (DayOfWeek()==DayOfWeekOpen
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)+Duration)
  {...

L'idée est la suivante : si une bougie est haussière tel jour à tel moment, alors vendre = vrai, si elle est baissière, alors faux. Puis, tel jour à telle heure, on vend, si vente=vrai et on achète, si vice versa.

Mais la condition ne fonctionne pas pour une raison quelconque, tous les échanges sont ouverts à la vente. Je le teste sur M1.

 
ALXIMIKS:

else se réfère à " if (b>c) ".

Correct.

if (a>b)
   if (b>c) 
      Alert(" условие if (a>b && b>c) выполнено ");
   else if (d>e) 
      if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

Essayez maintenant de faire de la logique sans les accolades :

Si (a>b), alors les lignes if (b>c) Alert() sont exécutées ;

Sinon, si (d>e), alors les lignes si (e>f) Alert() sont exécutées ;

En d'autres termes : faites en sorte que else se réfère à la toute première condition. Sans utiliser d'accolades.

 
Antonius:

Bonjour.

L'idée est la suivante : si une bougie est haussière tel jour à tel moment, alors vendre = vrai, si elle est baissière, alors faux. Puis, tel jour à telle heure, on vend, si vente=vrai et on achète, si vice versa.

Mais la condition ne fonctionne pas pour une raison quelconque, tous les échanges sont ouverts à la vente. Je l'ai testé sur M1.

Je suis sûr que c'est cette partie du code. À partir de ce que vous avez montré, il est difficile de tirer des conclusions - il y a beaucoup de variables inconnues et l'ouverture elle-même n'est pas visible.

Pour trouver la raison vous-même, imprimez ou affichez les valeurs des variables avec des commentaires. Vous pouvez alors voir leurs valeurs à tout moment.

 
Antonius:

Bonjour.

L'idée est la suivante : si une bougie est haussière tel jour à tel moment, alors vendre = vrai, si elle est baissière, alors faux. Puis, tel jour à telle heure, on vend, si vente=vrai et on achète, si vice versa.

Mais la condition ne fonctionne pas pour une raison quelconque, tous les échanges sont ouverts à la vente. Je le teste sur M1.

Est-il possible de comparer comme ça ? je n'aime pas la partie droite ("conversion de type là mettra tout dans une chaîne avec la valeur "yyyy.mm.dd "TimeTradeIf")???
 TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf
 
ALXIMIKS:
Je n'aime pas la partie droite (la valeur "yyyy.mm.dd "TimeTradeIf" sera convertie en une chaîne de caractères)?

Vous pouvez voir que la valeur TimeTradeIf est ajoutée à la valeur calculée. Qui vous a dit et montré exactement ce que contient le site TimeTradeIf ?

C'est ce que j'ai écrit à la personne qu'il y a beaucoup de valeurs inconnues et peu claires pour chercher le problème dans son code.

 
artmedia70:

Correct.

Essayez maintenant de faire de la logique sans les accolades :

Si (a>b), alors les lignes if (b>c) Alert() sont exécutées ;

Sinon, si (d>e), alors les lignes si (e>f) Alert() sont exécutées ;

En d'autres termes : faites en sorte que else se réfère à la toute première condition. Sans crochets.


if (a>b)
   if (b>c) Alert(" условие if (a>b && b>c) выполнено ");
   else; 
else 
   if (d>e) 
      if (e>f)Alert(" условие if (d>e && e>f) выполнено");

Taki l'a fait, ce n'est pas très pratique pour lire la logique, si sans accolades, et le compilateur frotte encore un peu ";' - point-virgule inattendu " .

mais alerte toujours "condition if (d>e && e>f) is satisfied" lorsque a>bn'est pas satisfait.(si c'est ainsi que j'ai compris la tâche).


 
Antonius:

Bonjour.

L'idée est la suivante : si une bougie est haussière tel jour à tel moment, alors vendre = vrai, si elle est baissière, alors faux. Puis, tel jour à telle heure, on vend, si vente=vrai et on achète, si vice versa.

Mais la condition ne fonctionne pas pour une raison quelconque, tous les échanges sont ouverts à la vente. Je le teste sur M1.


A mon avis, le calcul commence au début de la barre zéro, quand l'ouverture est encore égale à la fermeture et bien sûr la différence est 0. Je dois vérifier la barre précédente.
Raison: