Очень часто перед трейдером стоит задача перебрать все открытые позиции или отложенные ордера и что-то сделать с позициями или ордерами, которые выставлены по инструменту, к которому прикреплен советник. Предположим, что нас интересуют только отложенные ордера.
Используя функцию OrderSymbol(), мы можем получить информация о выделенном с помощью функции OrderSelect() ордере или позиции.
string OrderSymbol()
Напишем кусочек кода, который просматривает все наши неудаленные отложенные ордера и производит какие-то действия с ордерами, которые выставлены по инструменту, к которому прикреплен советник.
int pos;
for (pos=0; pos=OP_BUYLIMIT)
{
// ордер оказался отложенным; проверим инструмент
if (OrderSymbol()==Symbol())
{
// делаем что-то с ордером
// ...
}
}
}
else
Print("Ошибка ", GetLastError(), " при выборе ордера номер ", pos);
В этом коде Вам могут быть непонятны два момента.
Во-первых, я как-то странно на первый взгляд провожу определение типа ордера: if (OrderType()>=OP_BUYLIMIT). На самом деле условие OrderType()>=OP_BUYLIMIT будет истинно в тех случаях, когда выбран ордер, и ложно в тех случаях, когда выбрана позиция. Дело в том, что константы, определяющие тип ордера, имеют следующие числовые значения:
Константа | Значение | Описание |
OP_BUY | 0 | Позиция на покупку |
OP_SELL | 1 | Продажа |
OP_BUYLIMIT | 2 | Отложенный ордер BUY LIMIT |
OP_SELLLIMIT | 3 | Отложенный ордер SELL LIMIT |
OP_BUYSTOP | 4 | Отложенный ордер BUY STOP |
OP_SELLSTOP | 5 | Отложенный ордер SELL STOP |
Как мы видим, во всех случаях, когда выделен отложенный ордер, значение функции OrderType() будет больше или равно OP_BUYLIMIT (т.е. больше или равно 2).
Второй непонятный момент в коде — функция Symbol(). Эта функция возвращает текстовую строку с именем финансового инструмента, к которому прикреплен советник:
string Symbol()