Помогите с условиями if

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

Пытаюсь написать советник, но застрял на одном моменте. Есть во такой кусок кода:

string Order_Kind;
// если последние две свечи вверх
if (Open[2] < Open[1] && Close[2] < Close[1])
{
// то продаем
   Order_Kind = "SELL";
}
// если последние две свечи вниз
if (Open[2] > Open[1] && Close[2] > Close[1])
{
// то покупаем
   Order_Kind = "BUY";
}

В таком виде советник отлично открывает ордера на продажу. (при Order_Kind = "SELL"). Но, при этом, на покупку не открывает ни одного, хотя условия для покупки были и неоднократно.

Если временно убрать блок для SELL, то есть привести к такому виду:

string Order_Kind;
// если последние две свечи вниз
if (Open[2] > Open[1] && Close[2] > Close[1])
{
// то покупаем
   Order_Kind = "BUY";
}

То советник не откроет вообще ни одного ордера за все время теста.

Если в коде оставить только это:

string Order_Kind;
Order_Kind = "BUY"

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

Подскажите пожалуйста, в чем может быть проблема?

 

Засунул в скрипт

  string Order_Kind="";
  if (Open[2] < Open[1] && Close[2] < Close[1])    // если последние две свечи вверх
     Order_Kind = "SELL";  // то продаем
  if (Open[2] > Open[1] && Close[2] > Close[1])    // если последние две свечи вниз
    Order_Kind = "BUY";    // то покупаем
  Alert(Order_Kind);                               // Вывод в окно Алерт значения переменной

выдает и BUY и SELL в соответствующих ситуациях. Ищите ошибку ниже 

Видел в CodeBase аналогичный советник по трем свечам.

 

Ошибся в сообщении, точка с запятой там есть. Исправил пост.

В советнике точка с запятой есть, но ордера на покупку не открываются

 

Все уже перепроверил много раз, правки небольшие внес, но пока результат не очень.

А что означает в MQL4 символ | ?

 

В моем коде стоит  Alert() - полезная вещь. Следует поставить. Будет видно значение переменной... И вообще мой код компактнее и понятнее - а смысл тот же.  Одиночный знак | вряд ли следует использовать. Значение то же, что в c++. Двойные - т.е. || и &&  Следует навести на них курсор и нажать F1. А сообщение от 17 марта можно удалить - потеряло смысл.

 
LRA:

В моем коде стоит  Alert() - полезная вещь. Следует поставить. Будет видно значение переменной... И вообще мой код компактнее и понятнее - а смысл тот же.  Одиночный знак | вряд ли следует использовать. Значение то же, что в c++. Двойные - т.е. || и &&  Следует навести на них курсор и нажать F1. А сообщение от 17 марта можно удалить - потеряло смысл.


Много что потеряло смысл, но это не значит что все нужно удалять.

Логические цепочки теряются. 

 
fwnew:
Здравствуйте всем.

Пытаюсь написать советник, но застрял на одном моменте. Есть во такой кусок кода:

...

Подскажите пожалуйста, в чем может быть проблема?


if (Open[2] < Open[2] && Close[1] < Close[1])
 
ULAD:

if (Open[2] < Open[2] && Close[1] < Close[1])
А тебе не кажется что Open[2] ВСЕГДА РАВНО Open[2] так-же как и Close[1] = Close[1]
 

AlexeyVik:
 А тебе не кажется что Open[2]

ВСЕГДА РАВНО Open[2] так-же как и Close[1] = Close[1]

Да не обратил внимания Выделил ошибку, а не исправил.   

Надо так конечно.

if (Open[2] <  Close [2] && Close[1] < Close [1])

 
ULAD:

Да не обратил вниманияВыделил ошибку, а не исправил.   

Надо так конечно.

if (Open[2] <  Close [2] && Close[1] <Close [1])


 


И даже так не надо.

Надо так как хочет тот кто спрашивает. А ему уже был дан исчерпывающий правильный ответ.

LRA:

Засунул в скрипт

выдает и BUY и SELL в соответствующих ситуациях. Ищите ошибку ниже 

Видел в CodeBase аналогичный советник по трем свечам.

Причина обращения: