Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 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);
}

При невыполнении первого условия имеем алерт: "а=2"

При невыполнении второго условия имеем алерт: "а=1"

При невыполнении третьего условия имеем алерт: "а=0"

Мда, вначале было неожиданно вообще неожиданно))

 
ALXIMIKS:

ни какого Алерта от данного скрипта. Else относится к условию " if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;} "

Подтверждения :

имеем Алерт: "а=0".

Результат - обработка невыполнения условия возможно только для последнего условия при неиспользовании фигурных скобок "{" во время перечисления определенного ряда условий.

Все правильно, логика действует, только не нужно все в один ряд ставить:

int start(){
 int a=0;
 if (3>3)
    if (5>3)
       if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
       else Alert ("a=", a);
}
тогда станет более понятно. Фигурные скобки нужны в том случае, если if истинно: {оператор1;оператор2;операторN}. Если оператор всего один, то фигурные скобки можно опустить, а т.к. оператор является тоже условием, то все повторяется.
 
artmedia70:

Т.е., скобки нужны для организации логических ветвлений. Без них первое условие является основным. Если оно не верно, то не будут исполнятся остальные условия.

Попробуйте вот с этим разобраться:

А после, разберитесь к чему else относится:


else относится к " if (b>c)"
 

Здравствуйте.

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)
  {...

Суть такая: если в такой-то день в такое-то время свеча бычья, то sell = true, если медвежья, то false. Затем в такой-то день в такое-то время продаем, если sell=true и покупаем, если наоборот.

Но условие почему-то не работает, все сделки открываются на продажу. Тестирую на M1.

 
ALXIMIKS:

else относится к " if (b>c)"

Правильно.

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

А вот теперь попробуйте без фигурных скобок сделать логику:

Если (a>b), то выполняются строчки if (b>c) Alert();

Иначе если (d>e), то выполняются строчки if (e>f) Alert();

Иными словами: сделайте так, чтобы else относилось к самому первому условию. Без использования фигурных скобок.

 
Antonius:

Здравствуйте.

Суть такая: если в такой-то день в такое-то время свеча бычья, то sell = true, если медвежья, то false. Затем в такой-то день в такое-то время продаем, если sell=true и покупаем, если наоборот.

Но условие почему-то не работает, все сделки открываются на продажу. Тестирую на M1.

Уверены, что на этом участке кода собака порылась? Из того, что вы показали сложно сделать выводы - много неизвестных переменных и не видно самого открытия.

Чтобы найти причину самостоятельно, принтуйте или выводите на экран комментариями значения переменных. Тогда сможете видеть их значения в любой момент времени.

 
Antonius:

Здравствуйте.

Суть такая: если в такой-то день в такое-то время свеча бычья, то sell = true, если медвежья, то false. Затем в такой-то день в такое-то время продаем, если sell=true и покупаем, если наоборот.

Но условие почему-то не работает, все сделки открываются на продажу. Тестирую на M1.

А так можно сравнивать? что-то мне не нравится правая часть ( там же преобразование типов все в строку забьет с значением "yyyy.mm.dd "TimeTradeIf"")???
 TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf
 
ALXIMIKS:
А так можно сравнивать? что-то мне не нравится правая часть ( там же преобразование типов все в строку забьет с значением "yyyy.mm.dd "TimeTradeIf"")???

Видно же, что значение TimeTradeIf прибавляется к рассчитываемому значению. Кто вам сказал и показал, что именно содержится в TimeTradeIf ?

Я и написал человеку, что много неизвестных и непонятных значений для того, чтобы искать проблему в его коде.

 
artmedia70:

Правильно.

А вот теперь попробуйте без фигурных скобок сделать логику:

Если (a>b), то выполняются строчки if (b>c) Alert();

Иначе если (d>e), то выполняются строчки if (e>f) Alert();

Иными словами: сделайте так, чтобы else относилось к самому первому условию. Без использования фигурных скобок.


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

Таки сделал, оно не очень удобно для чтения логики, если без оформления будет, и компилятор еще немного ругает " ';' - semicolon unexpected "

но все же алерт " условие if (d>e && e>f) выполнено" при невыполнении a>b выдает. (если так понял задание).


 
Antonius:

Здравствуйте.

Суть такая: если в такой-то день в такое-то время свеча бычья, то sell = true, если медвежья, то false. Затем в такой-то день в такое-то время продаем, если sell=true и покупаем, если наоборот.

Но условие почему-то не работает, все сделки открываются на продажу. Тестирую на M1.


На мой взгляд, расчет начинается в начале нулевого бара, когда открытие еще равно закрытию и, естественно, разница равна 0. Надо проверять предыдущий бар.
Причина обращения: