Очень часто перед трейдером стоит задача перебрать все открытые
позиции или отложенные ордера и что-то сделать с позициями или ордерами,
которые выставлены по инструменту, к которому прикреплен советник.
Предположим, что нас интересуют только отложенные ордера.
Используя функцию 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()