Скачать MetaTrader 5

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

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

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

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

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

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

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

;)

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

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

;)


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

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

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


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

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

Alexey Subbotin
4999
Alexey Subbotin  
avatara:

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

;)

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

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

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


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

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

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