Скачать MetaTrader 5

Как узнать кем был ордер до того как стал позицией?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
jhon
186
jhon 2012.08.07 20:23 

Здравствуйте уважаемые форумчане.

Подскажите пожалуйста как узнать Тип ордера имея уже позицию. То есть... Есть активная позиция с типом OP_BUY, как узнать кем она была до того ка стала позицией? Была она OP_BUYSTOP или OP_BUYLIMIT???

Заранее Благодарен

Alexey Subbotin
4998
Alexey Subbotin 2012.08.07 20:42  
Думаю, единственный вариант - для каждого отложенника запоминать его тип непосредственно при отдаче приказа. Т.е. хранить в памяти пары (тикет, тип приказа). Поскольку тикет при срабатывании не изменяется, то для любой открытой позиции не составит труда определить, кем она была в прошлой жизни.
Алексей Тарабанов
7286
Алексей Тарабанов 2012.08.07 20:51  
Это верно лишь для случая, когда анализируются собственные торговые приказы :)
Mikhail Dovbakh
4436
Mikhail Dovbakh 2012.08.07 20:52  

проще в коммент запихнуть. Типа кодов SS SL BS BL

;)

Владимир Тезис
4266
Владимир Тезис 2012.08.07 20:53  
Есть ещё вариант - посмотреть тренд, предшествующий времени открытия ордера (анализировать можно по хай/лоу свеч). Если тренд ехал сверху-вниз, то сработал бай-лимит, если снизу-вверх, то бай-стоп. Хотя, действительно, проще запоминать. И можно даже в текстовый документ (во избежание аварийного отключения электропитания).
Владимир Тезис
4266
Владимир Тезис 2012.08.07 20:55  
avatara:

проще в коммент запихнуть. Типа кодов SS SL BS BL

;)


Это плохой способ - есть операции над ордерами, в результате которых коммент ордера менятется - терминал вносит в коммент данные.
Alexey Subbotin
4998
Alexey Subbotin 2012.08.07 21:04  

Код, кажись, будет примерно такой

int _tickets[],_types[];

int init()
{
   ...
   ArrayResize(_tickets,0);
   ArrayResize(_types,0);
   ArraySetAsSeries(_tickets,false);
   ArraySetAsSeries(_types,false);
   ...
}

int deinit()
{
   ...
   //прибираемся
   ArrayResize(_tickets,0);
   ArrayResize(_types,0);
   ...
}

int start()
{
   ...

   int ticket;

   ...

   ticket = OrderSend(...);

   //сразу после открытия отложенника надо запомнить его тип и тикет:
   OrderSelect(ticket,SELECT_BY_TICKET);
   ArrayAppend(_tickets,ticket);
   ArrayAppend(_types,OrderType());

   ...

   //пусть теперь есть некая открытая позиция с тикетом some_ticket, узнаем ее изначальный тип:
   int initial_type = OrderInitialType(some_ticket);
   if(initial_type!=EMPTY)
   {
      //делаем что задумали
      ...
   }
}

void ArrayAppend(int &a[], int value = 0)
{
   bool series = ArrayGetAsSeries(a);
   ArraySetAsSeries(a,false);
   ArrayResize(a,ArraySize(a)+1);
   a[ArraySize(a)-1]=value;
   ArraySetAsSeries(a,series);
}

//функция вернет начальный тип ордера, если он был ранее занесен в базу, или EMPTY в противном случае 
int OrderInitialType(int ticket)
{
   int i, sz = ArraySize(_tickets);
   for(i=0;i<sz;i++)
   {
      if(tickets[i]==ticket) return(_types[i]);
   }
   return(EMPTY);
}

jhon
186
jhon 2012.08.07 21:06  
alsu:
Думаю, единственный вариант - для каждого отложенника запоминать его тип непосредственно при отдаче приказа. Т.е. хранить в памяти пары (тикет, тип приказа). Поскольку тикет при срабатывании не изменяется, то для любой открытой позиции не составит труда определить, кем она была в прошлой жизни.


То есть можно просто найти текущую позицию изъять из неё тикет и порыться в истории?

Спасибо большое! Так и буду пробовать!

Alexey Subbotin
4998
Alexey Subbotin 2012.08.07 21:06  
avatara:

проще в коммент запихнуть. Типа кодов SS SL BS BL

;)

Тогда уж лучше в магик: каждому типу дать свой Magic number
jhon
186
jhon 2012.08.07 21:07  
drknn:

Это плохой способ - есть операции над ордерами, в результате которых коммент ордера менятется - терминал вносит в коммент данные.

Какие это операции? Конкретно если можно! Потому что парень довольно неплохое решение предложил, просто, не затратно и не мудрено.
Alexey Subbotin
4998
Alexey Subbotin 2012.08.07 21:07  
jhon:


То есть можно просто найти текущую позицию изъять из неё тикет и порыться в истории?

Спасибо большое! Так и буду пробовать!

Нет, не выйдет: историю надо записывать самостоятельно, как в вышеприведенном коде. Ну, или действительно, воспользоваться магиками, это проще))
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий