« Предыдущий пост | На главную страницу | Следующий пост »

OrderSymbol() - инструмент выделенного ордера

Очень часто перед трейдером стоит задача перебрать все открытые позиции или отложенные ордера и что-то сделать с позициями или ордерами, которые выставлены по инструменту, к которому прикреплен советник. Предположим, что нас интересуют только отложенные ордера.

Используя функцию OrderSymbol(), мы можем получить информация о выделенном с помощью функции OrderSelect() ордере или позиции.

   string OrderSymbol()

Напишем кусочек кода, который просматривает все наши неудаленные отложенные ордера и производит какие-то действия с ордерами, которые выставлены по инструменту, к которому прикреплен советник.

   int pos;
   for (pos=0; pos<OrdersTotal(); pos++)
     {
       // выделим ордер
       if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES) == true)
         {
           // ордер выбран; проверим является ли этот ордер отложенным
           if (OrderType()>=OP_BUYLIMIT)
             {
               // ордер оказался отложенным; проверим инструмент
               if (OrderSymbol()==Symbol())
                 {
                   // делаем что-то с ордером
                   // ...
                 }               
             }
         }
       else
           Print("Ошибка ", GetLastError(), " при выборе ордера номер ", pos);

В этом коде Вам могут быть непонятны два момента.

Во-первых, я как-то странно на первый взгляд провожу определение типа ордера: if (OrderType()>=OP_BUYLIMIT). На самом деле условие OrderType()>=OP_BUYLIMIT будет истинно в тех случаях, когда выбран ордер, и ложно в тех случаях, когда выбрана позиция. Дело в том, что константы, определяющие тип ордера, имеют следующие числовые значения:

КонстантаЗначениеОписание
OP_BUY0Позиция на покупку
OP_SELL1Продажа
OP_BUYLIMIT2Отложенный ордер BUY LIMIT
OP_SELLLIMIT3Отложенный ордер SELL LIMIT
OP_BUYSTOP4Отложенный ордер BUY STOP
OP_SELLSTOP5Отложенный ордер SELL STOP

Как мы видим, во всех случаях, когда выделен отложенный ордер, значение функции OrderType() будет больше или равно OP_BUYLIMIT (т.е. больше или равно 2).

Второй непонятный момент в коде - функция Symbol(). Эта функция возвращает текстовую строку с именем финансового инструмента, к которому прикреплен советник:

   string Symbol()

Все остальное Вы уже на данный момент знаете:

В следующем выпуске я продолжу рассмотрение торговых функций.



Все статьи по теме "Пишем советников для MetaTrader 4".

« Предыдущий пост | На главную страницу | Следующий пост »

Комментарии по теме "OrderSymbol() - инструмент выделенного ордера"

Аффтар жжот!
Бу-га-га!!!

Жгу :-D

Уважаемый автор!

Подскажите пожалуйста...
Если эксперт используется на нескольких инструментах, то как можно определить, что на данном конкретном инструменте количество открытых позиций = 0?

if (OrderSymbol()==Symbol()&& (OrdersTotal<1))
{

???
таким образом не получается, не пойму где ошибка...

Уважаемый автор!

Подскажите пожалуйста...
Если эксперт используется на нескольких инструментах, то как можно определить, что на данном конкретном инструменте количество открытых позиций = 0?

if (OrderSymbol()==Symbol()&& (OrdersTotal<1))
{

???
таким образом не получается, не пойму где ошибка...

if (OrderSymbol()==Symbol()&& (OrdersTotal<1))

{

почему-то запостилось без скобок вконце...

Если эксперт используется на нескольких инструментах, то как можно определить, что на данном конкретном инструменте количество открытых позиций = 0?

int num = 0;
int i;
for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i, SELECT_BY_POS))
{
Print("Ошибка при выделении ордера");
num = -1;
break;
}
if ((Symbol()==OrderSymbol())&&(OrderType()<=OP_SELL)) num++;
}

Получаем:

если num=-1 - была ошибка

если num не равно -1, то оно содержит кол-во открытых по этому инструменту позиций

почему-то запостилось без скобок вконце...

Подправил Ваши комментарии - теперь все нормально. Проблема была в том, что Ваш знак "меньше" движок блога воспринял как начало HTML тэга.

Здравствуйте, Андрей!

Все получилось : )
поставил условие
if (num<2)
{
и по каждому инструменту эксперт открывает по 1 сделке, не зависимо от общего количества.

Спасибо Вам! : )

Отлично!

P.S. Хороших выходных!

Разместите свой комментарий по теме "OrderSymbol() - инструмент выделенного ордера"

Подписаться на мою рассылку



Размещение статьи "OrderSymbol() - инструмент выделенного ордера" на Вашем сайте

Размещение статьи "OrderSymbol() - инструмент выделенного ордера" на Вашем сайте возможно при условии выполнениия следующих условий:

  • Запрещается изменение оригинального текста без согласия автора - Андрея Ведихина.
  • Должен быть указан первоисточник. В случае публикации в интернете Вы должны разместить следующий код гиперссылки без изменений:
  • Запрещается коммерческое использование материалов, взятых с блога "Интернет-трейдинг на форекс / forex". Доступ к ним должен быть свободным, без взимания какой-либо платы, без обязательной регистрации и/или заполнения опросного листа (анкеты) и т.д.

В случае выполнения данных условий не требуется согласия автора блога "Интернет-трейдинг на форекс / forex" на размещение статьи "OrderSymbol() - инструмент выделенного ордера" на Вашем сайте.

Журнал FOREX MAGAZINE:



Архив номеров FOREX MAGAZINE
Котировки Forex:

Счетчики:

Авторские права © 2005-2006 Андрей Ведихин

Условия использования материалов блога "Интернет-трейдинг на форекс / forex"

Контакты с автором:


Движок сайта:
Movable Type 3.31