Выбор ордера или позиции с помощью OrderSelect()
В прошлом выпуске я привел полный перечень торговых функций, которые можно использовать в эксперте. Как Вы уже, наверное, успели заметить, подавляющее большинство этих функций позволяет получить какую-то информацию об ордере или позиции, которые были предварительно выбраны с помощью функции OrderSelect().
Формат функции OrderSelect():
bool OrderSelect ( int index, int select, int pool=MODE_TRADES )
Как мы видим, функция возвращает значение логического типа: true - когда ордер или позиция были успешно выбраны, false - в случае какой-то ошибки. Код этой ошибки можно получить впоследствии с помощью функции GetLastError().
Ордер/позицию можно выбрать двумя способами:
- по номеру тикера;
- по порядковому номеру ордера/позиции в списке.
Если Вы знаете тикер ордера или позиции, то в качестве параметра select надо передать значение SELECT_BY_TICKET, а в качестве параметра index - номер тикера ордера или позиции. Третий параметр в этом случае не используется и его можно опустить.
Пример выбора по тикеру:
//---- выбираем ордер/позицию с тикером 77777 if ( OrderSelect (77777, SELECT_BY_TICKET) == true) Print("Ордер #77777 выбран успешно"); else Print("OrderSelect() вернул ошибку - ",GetLastError());
Если Вы не знаете тикера, то существует другой способ выбрать ордер или позицию. Для этого Вам надо выбрать ордер или позицию из списка открытых позиций или неудаленных отложенных ордеров (значение параметра pool равно MODE_TRADES) или из списка закрытых позиций или удаленных ордеров (параметр pool равен MODE_HISTORY). В обоих случаях параметр select должен быть равен SELECT_BY_POS. В параметре index Вы должны указать порядковый номер этой позиции или ордера в списке открытых позиций или неудаленных отложенных ордеров (pool равен MODE_TRADES) или в списке закрытых позиций и удаленных отложенных ордеров (pool равен MODE_HISTORY).
Этот способ очень полезен, когда Вам нужно "пробежаться", например, по всем открытым позициям:
int pos; int total = OrdersTotal(); for ( pos = 0; pos<total; pos++ ) { if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true) { Print("Выбран ордер номер ", pos, " в списке открытых позиций"); // делаем что-то с этой позицией } else Print("Ошибка ", GetLastError(), " при выборе ордера номер ", pos); }
В этом примере для нас новой является функция OrdersTotal(). Эта функция выводит количество открытых позиций и неудаленных отложенных ордеров. Ее, а также функцию HistoryTotal(), я рассмотрю в следующих выпусках.
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "Выбор ордера или позиции с помощью OrderSelect()"
На ресурсе alladinsauna.ru Вы можете найти необходимую информацию о том, где находятся сауны, их описание с фотографиями, контактные сведения. Причины, по которым следует ходить в сауны. Сауна на Кутузовском. VIP сауна на Кольской 12 в Свиблово. Сауна на Алексеевской. Сауна на Севанке. Сауна "Сельга" на улице Краснодонская. Сауна "Арокан" на Кунцевской. Сауна на Пироговке. Сауна на Бауманской.
Новая VIP сауна "Щипок" на Серпуховской.
Автор: alladinsauna.ru | 18.04.2008 05:03