Пример использования функции OrderDelete()
В прошлом выпуске я рассмотрел функцию OrderDelete(). Эта функция удаляет отложенный ордер.
Рассмотрим применение этой функции на примере:
|
Предположим, что наш эксперт по какой-то логике (не будем здесь вдаваться в подробности) выставляет по одному инструменту сразу два отложенных ордера - Buy Limit и Sell Limit. Наша задача - если один из ордеров сработал, то удалить оставшийся отложенный ордер.
Предположим, что по данному инструменту работает только наш эксперт. |
Пусть в момент выставления каждого отложенного ордера было задано "магическое" число, одинаковое для каждого отложенного ордера. Предположим, что это "магическое" число хранится в переменной MyMagicNumber.
// просмотрим все открытые позиции и выставленные ордера
int pos;
for(pos=0; pos<OrdersTotal(); pos++)
{
// выделим текущий ордер, чтобы получить о нем информацию
if (OrderSelect(pos, SELECT_BY_POS))
{
// Если "магическое" число совпадает и это открытая позиция
if ((OrderMagicNumber()==MyMagicNumber) && (OrderType()<=OP_SELL))
{
// найти второй отложенный ордер
int i;
for(i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
if ((OrderMagicNumber()==MyMagicNumber) && (OrderType()>OP_SELL))
{
// ордер найден - удалим его
if (OrderDelete(OrderTicket()))
{
Print("Ордер удален");
}
else
{
Print("Ошибка ", GetLastError(), " при удалении ордера");
}
}
}
}
// выйти из цикла
break;
}
}
}
В следующем выпуске я продолжу рассмотрение торговых функций и расскажу о функции OrderClose().
Все статьи по теме "Пишем советников для MetaTrader 4".
- Механическая торговая система - миф или реальность?
- С чего начать при написании советника:
- Создаем нового советника - Настраиваем параметры. - Язык MetaQuotes Language 4: