Параметры функции OrderSend()
В прошлом выпуске я рассказал о функции OrderSend(). В этом выпуске я хотел бы остановиться на параметрах этой функции более подробно.
В параметре cmd мы передаем тип приказа:
Константа | Значение | Описание |
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 |
Таким образом, для того, чтобы открыть позицию на продажу в качестве параметра cmd надо указать OP_SELL. Для открытия позиции на покупку - OP_BUY. Для установки отложенного ордера надо использовать значения OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP или OP_SELLSTOP в зависимости от типа размещаемого отложенного ордера.
При открытии позиции в качестве параметра price надо использовать текущий Bid (если cmd равен OP_SELL) или текущий Ask (если cmd равен OP_BUY):
- функция Bid возвращает текущий Bid по инструменту, к которому "прикреплен" эксперт;
- функция Ask возвращает текущий Ask по инструменту, к которому "прикреплен" эксперт;
- функция MarketInfo(string symbol, int type) c параметром type, равным MODE_BID или MODE_ASK, возвращает текущий Bid или Ask по инструменту, который передан ей в качестве параметра symbol.
Важно:
Ни в коем случае нельзя использовать цену, которую Вы рассчитали по какой-то формуле, или цену, которую Вы не привели (нормализовали) к тому количеству знаков после запятой, сколько должно быть у данного инструмента.
Для того, чтобы "нормализовать" цену, надо использовать функцию NormalizeDouble():
double NormalizeDouble ( double value, int digits )
Эта функция округляет вещественное число value с точностью до digits знаков после запятой. Число цифр после десятичной точки должно быть в диапазоне 0 .. 8.
В случае использования "неправильной" цены в параметре price будут выданы следующие коды ошибок:
- ERR_INVALID_PRICE (129) - если цена не была "нормализована" или такой цены вообще не было в потоке;
- ERR_REQUOTE (138) - если цена сильно устарела (независимо от значения параметра slippage);
Если же цена устарела, но еще присутствует в потоке, то будет совершена сделка по текущей цене, если текущая цена находится в диапазоне price +/- slippage.
В следующем выпуске я расскажу об оставшихся параметрах функции OrderSend().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: