Получение типа ордера с помощью OrderType()
В прошлых выпусках мы научились получать информацию о выделенном с помощью функции OrderSelect() ордере или позиции:
- Stop Loss (функция OrderStopLoss);
- Цену закрытия (функция OrderClosePrice).
В этом выпуске я расскажу о функции OrderType().
int OrderType()
Функция OrderType() возвращает значение, которое определяет тип операции ордера, который предварительно выбран с помощью OrderSelect():
- OP_BUY - позиция на покупку,
- OP_SELL - позиция на продажу,
- OP_BUYLIMIT - отложенный ордер Buy Limit,
- OP_BUYSTOP - отложенный ордер Buy Stop,
- OP_SELLLIMIT - отложенный ордер Sell Limit,
- OP_SELLSTOP - отложенный ордер Sell Stop.
В предыдущем выпуске я поместил пример, которые определял, как была закрыта позиция - по Stop Loss ордеру или по Take Profit. Вместе с тем в этом примере есть небольшая ошибка: если выделенный ордер является отложенным ордером, то этот кусочек кода будет ошибочно считать, что позиция закрылась по Take Profit. Изменим наш пример, чтобы исключить эту ошибку:
//---- выбираем ордер/позицию с тикером 77777 if ( OrderSelect (77777, SELECT_BY_TICKET) == true) { if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL)) { // позиция выбрана успешно if ( ((OrderClosePrice() <= OrderStopLoss()) && (OrderType() == OP_BUY)) || ((OrderClosePrice() >= OrderStopLoss()) && (OrderType() == OP_SELL)) ) { // позиция закрылась по Stop Loss // ... } else { // позиция закрылась по Take Profit // ... } } else Print("Ошибка: это не закрытая позиция, а отложенный ордер"); } else Print("OrderSelect() вернул ошибку - ",GetLastError());
Путем добавления дополнительной проверки, нам удастся отделить закрытые позиции от отложенных ордеров:
if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))
Наш исправленный пример все равно имеет несколько недостатков. Один из них - неправильная работа, если была выделена открытая позиция, а не закрытая. Как устранить этот недостаток я расскажу в следующем выпуске, который будет посвящен функции OrderCloseTime().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4:
Комментарии по теме "Получение типа ордера с помощью OrderType()"
Здраствуйте Андрей! Пытаюсь модернизировать советник, мне необходимо получить число открытых ордеров на продужу и покупку по отдельносте а не общее число ордеров. Кто может подсказать как это можно реализовать.
Пробовал этот код но ничего не вышло:
int buy=0;
int sell=0;
bool flag=false;
int t=OrdersTotal();
int i=0;
while(i==t){
i++;
OrderSelect(i,SELECT_BY_POS);
if (OrderType()==OP_SELL)sell++);
}
if (sell
if(sell==0)flag=false;
if(flag==true){ OpenSell()}
За ранее спасибо!
Автор: maxICUS | 19.03.2008 10:37