как узнать, какая позиция закрылась?

 
всем привет! ;-)
вопрос такого рода: мне нужно узнать, какая позиция закрылась.
я пробовал перебирать позиции ордера по-тиково( int i,accTotal = OrdersHistoryTotal(), OrderSelect(0, SELECT_BY_POS, MODE_TRADES)). но этот способ не всегда правильно работает :-(
есть ли в МТ событие, которое могло бы мне сообщить, какой ордер сработал Buy или Sale закрылся последний?
 
События в МetaТrader 4 [ en ]

Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL4.

 

Рано или поздно этот вопрос возникает перед каждым трейдером-программистом.

Посмотрите здесь:
Статья Учёт ордеров в большой программе.
Подраздел Учёт ордеров в параграфе Учебник по MQL4 Простые программы на MQL4 Простой эксперт .
Параграф Учебник по MQL4 Создание обычной программы Учёт ордеров .

 
komposter:
События в МetaТrader 4 [ en ]

Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL4.

пасиб, дружище. ;-)
щаз посмотрим...
 
SK. писал (а):

Рано или поздно этот вопрос возникает перед каждым трейдером-программистом.

Посмотрите здесь:
Статья Учёт ордеров в большой программе.
Подраздел Учёт ордеров в параграфе Учебник по MQL4 Простые программы на MQL4 Простой эксперт .
Параграф Учебник по MQL4 Создание обычной программы Учёт ордеров .

очевидно меня неправильно понимают :-)))
проблема не в том, чтобы написать код, а в том, что например, OrderType() = SELL, но на самом деле был закрыт BUY- ордер!!!
т.е. система неправильно отслеживает события...
that is the question ;-)

но, в любом случае, всем пасиб за участие!
 
lexx67:
проблема не в том, чтобы написать код, а в том, что например, OrderType() = SELL, но на самом деле был закрыт BUY- ордер!!!
т.е. система неправильно отслеживает события...

Когда всплывают подобные сообщения, хочется ответить: не нужно тянуть пух на систему - отнесите всё неполучающееся к области своего непонимания.

Можно только ещё раз сказать: любая сколько-нибудь интеллектуальная программа должна содержать блок учёта ордеров. Для этого нужно один раз разобраться как такой блок устроен, на чём базируется, какие данные обрабатывает, и разобравшись сделать и использовать.

 
lexx67:
SK. писал (а):

Рано или поздно этот вопрос возникает перед каждым трейдером-программистом.

Посмотрите здесь:
Статья Учёт ордеров в большой программе.
Подраздел Учёт ордеров в параграфе Учебник по MQL4 Простые программы на MQL4 Простой эксперт .
Параграф Учебник по MQL4 Создание обычной программы Учёт ордеров .

очевидно меня неправильно понимают :-)))
проблема не в том, чтобы написать код, а в том, что например, OrderType() = SELL, но на самом деле был закрыт BUY- ордер!!!
т.е. система неправильно отслеживает события...
that is the question ;-)

но, в любом случае, всем пасиб за участие!
Вчера только разбирался с сообщением о "баге" в тестере. Был приложен код, в котором была некая переменная Order. В цикле OrderSelect() при каждом удачном выборе ордера проверялось раенство этой переменной (Order) на OP_BUY и на OP_SELL. Само значение Order в присланном куске кода никак не инициализировалось. И вот при обработке очередного ордера на продаже (OrderType=OP_SELL) проверка Order==OP_BUY (напомню, что значение предопределенной константы OP_BUY равно нулю) код выводил в лог притестировании, что ордер типа OP_SELL оказывается является ордером в покупку. Ну и, естественно, человек прислал письмо о "найденном баге". Хотя знаю по себе, что глаз может так замылиться в своем коде, что не видишь бревна в своем исходнике.
 
lexx67:
всем привет! ;-)
вопрос такого рода: мне нужно узнать, какая позиция закрылась.
я пробовал перебирать позиции ордера по-тиково( int i,accTotal = OrdersHistoryTotal(), OrderSelect(0, SELECT_BY_POS, MODE_TRADES)). но этот способ не всегда правильно работает :-(
есть ли в МТ событие, которое могло бы мне сообщить, какой ордер сработал Buy или Sale закрылся последний?

Если в истории торгового счета нет удаленных отложек, то ответ на Ваш вопрос можно узнать с помощью нижеприведенного кода

int total = OrdersHistoryTotal(); // total - количество закрытых и удаленных ордеров в истории счета
OrderSelect(total - 1, SELECT_BY_POS, MODE_HISTORY); // выбираем последний закрытый или удаленный ордер из истории счета
if (OrderType() == OP_BUY) { // Cмотрим тип ордера
	Print ("Последней была закрыта длинная поза");
} else {
	Print ("Последней была закрыта короткая поза");
}