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

 

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

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

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

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

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

;)

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

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

;)


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

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

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);
}

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


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

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

 
avatara:

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

;)

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

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

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


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

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

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