Как правильно выбрать последний ордер в истории? - страница 4

 
Andrei Fandeev:

Где-то год или два назад я лично читал от МетаКвоты сообщение, что с текущего билда IF прекращает дальнейшую проверку если не выполнено очередное условие.
Хотя возможно это касалось только МТ5, не помню.
Но с тех пор стараюсь именно по этой логике размещать проверки.

Поправьте, кто знает ТОЧНЫЙ ответ, пожалуйста.

Проверить самому - одна минута. #property strict...

 
Konstantin Nikitin:

Оператор continue

С ним всё понятно.
Вопрос был по составному if

 
Andrei Fandeev:

С ним всё понятно.
Вопрос был по составному if

проверить можно если сделать несколько функций и вызвать их из if(func1()>0 && func2()>0 && func3()>0) Print("3 условия")

в теле каждой функции написать: Print(___FUNCTION____);  и вернуть значение через return(1);

в принтах() будет видно какие функции были вызваны, а какие уже нет

 
Igor Makanu:

проверить можно если сделать несколько функций .....

Можно. Но всегда интересно услышать компетентное мнение )))
П.С. да и лень тоже присутствует, та, что "двигатель прогресса" говорят ))

 
Andrei Fandeev:

Где-то год или два назад я лично читал от МетаКвоты сообщение, что с текущего билда IF прекращает дальнейшую проверку если не выполнено очередное условие.
Хотя возможно это касалось только МТ5, не помню.
Но с тех пор стараюсь именно по этой логике размещать проверки.

Поправьте, кто знает ТОЧНЫЙ ответ, пожалуйста.

https://www.mql5.com/ru/docs/basis/operations/bool
 

Это МТ5.
Вопрос был по МТ4.
В документации ничего не сказано о составных выражениях в операторе if
https://docs.mql4.com/ru/basis/operators/if

 
Andrei Fandeev:

Это МТ5.
Вопрос был по МТ4.
В документации ничего не сказано о составных операторах
https://docs.mql4.com/ru/basis/operators/if

https://docs.mql4.com/ru/basis/operations/bool
 

О! Спасибо!
Значит я был прав по поводу переноса проверки ВремениЗакрытияОрдера на первое место в цикле.

 
a_universal:

Уважаемые коллеги!

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

Мне необходимо задать советнику такие условия:

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

Допустим предыдущий ордер был на BUY, значит если он получил стоп - то открыться на SELL.

Я так понимаю, мне необходимо сделать переборку ордеров из истории, я сделал это так:

for(int i=0, i<OrdersHistoryTotal(), i++)   //создаю цикл

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)  // выбираю ордер

 {

Continue;                                                                        // оператор Continue продолжает цикл перебора ордеров до тех пор пока не дойдет до последнего ордера..

 }

}

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)  // теперь, когда в переменную i записался номер последнего ордера

{

if(OrderProfit<0 && OrderType==OP_BUY)  // Проверяю, если Прибыль выбранного ордера меньше нуля и данный ордер я вляется ордером на покупку, то..

 {

 ticket=OrderSend.. OP_SELL.. и так далее..

 }

}


Вроде по моей логике все правильно, и компилятор ошибок в коде  не выдает. Но что то не работает.  

Если кому не трудно, хотя бы в кратце подскажите - что я делаю не так и как исправить код чтобы все было

У Вас цикл совсем не цикл. Вот эти две строчки не в цикле for:

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)  // теперь, когда в переменную i записался номер последнего ордера

{

if(OrderProfit<0 && OrderType==OP_BUY)  // Проверяю, если Прибыль выбранного ордера меньше нуля и данный ордер я вляется ордером на покупку, то..

 {

 ticket=OrderSend.. OP_SELL.. и так далее..

 }

}

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