Не видит историю ордеров при выборке функцией

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
SergeyN
352
SergeyN  

Коллеги, просьба подсказать где косяк.

Здесь есть функция нахождения последнего ордера: https://www.mql5.com/ru/forum/131859/page4#434227

Взял ее за основу. И пытаюсь узнать последний ордер является прибыльным или нет. Для этого пишу такой код:


Эта функция вызывается перед открытием нового ордера и проверяет предыдущий был прибыльным или нет. Если был убыточным - новый не открывать.

Функция вызывается перед открытием каждого ордера.

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

Тут видно, что Ордер №3 убыточный, но при этом перед открытием ордера №4 информации об этом ордере не было. Более того, видно в коде что первый Print вообще без условный - т.е должны быть выведены все ордера на покупку. Но их почему то нет.

Где косяк?

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
Konstantin Nikitin
9318
Konstantin Nikitin  

continue

break

Первое на что упал взгляд.

SergeyN
352
SergeyN  
Konstantin Nikitin:

continue

break

Первое на что упал взгляд.

Спасибо, но я так понимаю согласно хелпу что orderselect false вернет если выборка закончилась? Или там еще какие то подводные камни?
Ihor Herasko
21904
Ihor Herasko  
SergeyN:

Коллеги, просьба подсказать где косяк.

  1. Цикл по рабочим ордерам, а выбираются ордера из истории. Нужно тогда и цикл сделать по ордерам истории, т. е. OrderSelectHistory(), а не OrdersTotal().
  2. Не инициализирована переменная при объявлении. В некоторых случаях maxTime изначально может быть не равен нулю.
  3. При неудаче выбора ордера вовсе не обязательно прерывать цикл. Можно попробовать выполнить следующую итерацию, заменив break на continue.

SergeyN
352
SergeyN  
Ihor Herasko:

  1. Цикл по рабочим ордерам, а выбираются ордера из истории. Нужно тогда и цикл сделать по ордерам истории, т. е. OrderSelectHistory(), а не OrdersTotal().
  2. Не инициализирована переменная при объявлении. В некоторых случаях maxTime изначально может быть не равен нулю.
  3. При неудаче выбора ордера вовсе не обязательно прерывать цикл. Можно попробовать выполнить следующую итерацию, заменив break на continue.


Игорь, огромное спасибо. Действительно проблема была в том, что я неправильно определял количество через OrdersTotal().

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий