Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 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);
}

Se la prima condizione non è soddisfatta, abbiamo un avviso: "a=2"

Se la seconda condizione non è soddisfatta, abbiamo un avviso: "a=1"

Quando la terza condizione non è soddisfatta, abbiamo un avviso: "a=0".

Sì, all'inizio era inaspettato))

 
ALXIMIKS:

nessun allarme da questo script. Else si riferisce alla condizione " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Ringraziamenti:

avere anAlert: "a=0".

Il risultato è che la gestione delle non condizioni è possibile solo per l'ultima condizione quando le parentesi graffe "{" non sono usate durante l'enumerazione di una certa serie di condizioni.

Esatto, la logica funziona, basta non mettere tutto in una riga:

int start(){
 int a=0;
 if (3>3)
    if (5>3)
       if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
       else Alert ("a=", a);
}
allora diventerà più chiaro. Le parentesi sono necessarie se if è vero: {operatore1;operatore2;operatoreN}. Se c'è solo un operatore, le parentesi graffe possono essere omesse, e poiché l'operatore è anche una condizione, tutto viene ripetuto.
 
artmedia70:

Cioè, le parentesi sono necessarie per organizzare i rami logici. Senza di loro, la prima condizione è fondamentale. Se non è vero, le altre condizioni non saranno soddisfatte.

Cercate di risolvere il problema:

E dopo questo, capire a cos'altro si riferisce:


else si riferisce a " if (b>c)".
 

Salve.

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'idea è questa: se una candela è rialzista in un tale giorno in un tale momento, allora vendere = vero, se ribassista, allora falso. Poi in tale e talaltro giorno a tale e talaltro orario vendiamo, se vendere=vero e compriamo, se viceversa.

Ma la condizione non funziona per qualche motivo, tutti i trade sono aperti per la vendita. Lo sto testando su M1.

 
ALXIMIKS:

else si riferisce a " if (b>c) ".

Corretto.

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) выполнено");

Ora provate a fare la logica senza parentesi graffe:

Se (a>b), allora vengono eseguite le linee if (b>c) Alert();

Altrimenti se (d>e), allora vengono eseguite le linee se (e>f) Alert();

In altre parole: fate riferimento alla prima condizione. Senza usare le parentesi graffe.

 
Antonius:

Salve.

L'idea è questa: se una candela è rialzista in un tale giorno in un tale momento, allora vendere = vero, se ribassista, allora falso. Poi in tale e talaltro giorno a tale e talaltro orario vendiamo, se vendere=vero e compriamo, se viceversa.

Ma la condizione non funziona per qualche motivo, tutti i trade sono aperti per la vendita. L'ho testato su M1.

Sono sicuro che è questa parte del codice. Da quello che hai mostrato è difficile trarre conclusioni - ci sono molte variabili sconosciute e l'apertura stessa non è visibile.

Per trovare la ragione da soli, stampate o visualizzate i valori delle variabili con i commenti. Poi puoi vedere i loro valori in qualsiasi momento.

 
Antonius:

Salve.

L'idea è questa: se una candela è rialzista in un tale giorno in un tale momento, allora vendere = vero, se ribassista, allora falso. Poi in tale e talaltro giorno a tale e talaltro orario vendiamo, se vendere=vero e compriamo, se viceversa.

Ma la condizione non funziona per qualche motivo, tutti i trade sono aperti per la vendita. Lo sto testando su M1.

Non mi piace la parte giusta ("la conversione del tipo metterà tutto in una stringa con il valore "yyyy.mm.dd "TimeTradeIf")?
 TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf
 
ALXIMIKS:
Non mi piace la parte giusta (il valore "yyyy.mm.dd "TimeTradeIf" sarà convertito in una stringa)?

Potete vedere che il valore di TimeTradeIf viene aggiunto al valore calcolato. Chi vi ha detto e mostrato esattamente ciò che è contenuto in TimeTradeIf?

Questo è quello che ho scritto alla persona che ci sono molti valori sconosciuti e poco chiari per cercare il problema nel suo codice.

 
artmedia70:

Corretto.

Ora provate a fare la logica senza parentesi graffe:

Se (a>b), allora vengono eseguite le linee if (b>c) Alert();

Altrimenti se (d>e), allora vengono eseguite le linee se (e>f) Alert();

In altre parole: fate riferimento alla prima condizione. Senza parentesi graffe.


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'ha fatto, non è molto comodo per leggere la logica, se senza parentesi graffe, e il compilatore strofina ancora un po' ";' - punto e virgola inaspettato "

ma avvisa ancora "la condizione se (d>e && e>f) è soddisfatta" quando a>bnon è soddisfatta .(se è così che ho capito il compito).


 
Antonius:

Salve.

L'idea è questa: se una candela è rialzista in un tale giorno in un tale momento, allora vendere = vero, se ribassista, allora falso. Poi in tale e talaltro giorno a tale e talaltro orario vendiamo, se vendere=vero e compriamo, se viceversa.

Ma la condizione non funziona per qualche motivo, tutti i trade sono aperti per la vendita. Lo sto testando su M1.


Secondo me, il calcolo inizia all'inizio della barra zero, quando l'apertura è ancora uguale alla chiusura e naturalmente la differenza è 0. Devo controllare la barra precedente.