Скачать MetaTrader 5

ORDER_PRICE_OPEN & ORDER_PRICE_CURRENT - загадка

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

Мини-задачка. 

Не прибегая к запуску следующего кода:

 

    if(PositionSelect(_Symbol) && HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER)))    
      Print("HistoryOrdersTotal: ", HistoryOrdersTotal());       
      for (int _= HistoryOrdersTotal() - 1; _>= 0; _--) {
         ulong ticket = HistoryOrderGetTicket(_);
         if (ticket > 0) {
            Print(_, ": PRICE_CURRENT: ", HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT));
            Print(_, ": PRICE_OPEN:", HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN));
         }
      } 

выяснить, что этот код выведет для позиции, сформированной следующими ордерами:

 

исходя из того, что в справке написано (англ.):

ORDER_PRICE_OPEN    - Price specified in the order
ORDER_PRICE_CURRENT - The current price of the order symbol

(рус.):

ORDER_PRICE_OPEN    - Цена, указанная в ордере
ORDER_PRICE_CURRENT - Текущая цена по символу ордера
Valerii Mazurenko
3486
Valerii Mazurenko  

Забыл добавить, что все buy - это бывшие buy limit с ценой, которая в последней колонке.

 Раз никого не заинтересовало, тогда вопрос к разработчикам - что на самом деле значит ORDER_PRICE_OPEN и ORDER_PRICE_CURRENT? 

Sergey Chalyshev
5455
Sergey Chalyshev  

Что возвращает ORDER_PRICE_CURRENT? Никогда не пользовался этим параметром.

По идее (как написано в справке) должен возвращать текущую цену Bid или Ask в зависимости от направления ордера. 

Valerii Mazurenko
3486
Valerii Mazurenko  

Вопрос снят, ORDER_PRICE_OPEN - цена ордера при выставлении, ORDER_PRICE_CURRENT - цена исполнения ордера.

Вопрос появился из-за того, что лимитники, оказывается (!), исполнялись по цене, которая лучше указанной (что ж с демки взять :) хотя теоретически знаю о такой возможности, но почему-то её проигнорировал), а я не мог понять, что за ахинею получаю при ORDER_PRICE_OPEN.

Ну и соответственно, те, кто копается в истории, чтобы вычислить какие-то там цены позиции - нужно использовать ORDER_PRICE_CURRENT, а не ORDER_PRICE_OPEN 

Sergey Chalyshev
5455
Sergey Chalyshev  
notused:

Вопрос снят, ORDER_PRICE_OPEN - цена ордера при выставлении, ORDER_PRICE_CURRENT - цена исполнения ордера.

Вопрос появился из-за того, что лимитники, оказывается (!), исполнялись по цене, которая лучше указанной (что ж с демки взять :) хотя теоретически знаю о такой возможности, но почему-то её проигнорировал), а я не мог понять, что за ахинею получаю при ORDER_PRICE_OPEN.

Ну и соответственно, те, кто копается в истории, чтобы вычислить какие-то там цены позиции - нужно использовать ORDER_PRICE_CURRENT, а не ORDER_PRICE_OPEN 

Чтобы вычислить цены позиции, по моему, лучше использовать сделки а не ордера как у вас. Ордера могут вообще не исполниться.
Valerii Mazurenko
3486
Valerii Mazurenko  
Serj_Che:
Чтобы вычислить цены позиции, по моему, лучше использовать сделки а не ордера как у вас. Ордера могут вообще не исполниться.
if(PositionSelect(_Symbol) && HistorySelectByPosition(PositionGetInteger(POSITION_IDENTIFIER)))    

Выбираем только те ордера, которые приняли участие в формировании позиции (с моей точки зрения). По идее, отменённые сюда не попадут (проверено для удалённых вручную лимитников). С ходу, не могу представить ситуацию, когда неисполненный ордер попадёт в этот HistorySelect.

Но, конечно, можно и через Deal, но так сложнее (как по мне ибо нужно бегать по сделкам и считать, когда был первый Deal для данной позиции) 

Sergey Chalyshev
5455
Sergey Chalyshev  
notused:

Выбираем только те ордера, которые приняли участие в формировании позиции (с моей точки зрения). По идее, отменённые сюда не попадут (проверено для удалённых вручную лимитников). С ходу, не могу представить ситуацию, когда неисполненный ордер попадёт в этот HistorySelect.

Но, конечно, можно и через Deal, но так сложнее (как по мне ибо нужно бегать по сделкам и считать, когда был первый Deal для данной позиции) 

Если вмешивается (роловер, клиринг) в формирование позиции или в позиции участвуют несколько стратегий, то с вашим подходом никак не получится учесть все нужные ордера или сделки.
Valerii Mazurenko
3486
Valerii Mazurenko  
Serj_Che:
Если вмешивается (роловер, клиринг) в формирование позиции или в позиции участвуют несколько стратегий, то с вашим подходом никак не получится учесть все нужные ордера или сделки.
возможно, не проверял ролловер и клиринг, но несколько стратегий - не помеха, т. к. магик + комент всё поправят. Мне пока неважны ролловеры и клиринги - тут бы с упрощёнными условиями получить то, что задумал :)
Vasiliy Sokolov
28013
Vasiliy Sokolov  
notused:

...

Вопрос появился из-за того, что лимитники, оказывается (!), исполнялись по цене, которая лучше указанной (что ж с демки взять :) хотя теоретически знаю о такой возможности, но почему-то её проигнорировал), а я не мог понять, что за ахинею получаю при ORDER_PRICE_OPEN.

...

Странно, почему Вы так удивлены исполнением лимитных ордеров. Лимитный ордер обязан исполниться по лучшей цене, если есть такая возможность. Это стандарт биржевого исполнения и одно из самых замечательных свойств лимитных ордеров. Скажем выставляя лимитный ордер можно регулировать предельную величины проскальзывания не прибегая к странному deviation в МТ5.
Valerii Mazurenko
3486
Valerii Mazurenko  
C-4:
Это стандарт биржевого исполнения
Как раз на бирже и не может лимитник исполниться по цене лучше, чем указано (стоит стакан, хочу купить по 10, кто-то решил шмальнуть по рынку - пока мою заявку на 10 не исполнят полностью - бид ниже не опустится) - исключаем аукционы открытия\закрытия. А проскальзывания в "+" на лимитниках на форексе - либо игра в поддавки для заманухи, либо брокер настолько ленив, что даже не берёт своих законных  шаровых пару пипсов, а всё выводит дальше. Сильно склоняюсь к первой версии.
Taras Gonchar
8669
Taras Gonchar  
notused:
Как раз на бирже и не может лимитник исполниться по цене лучше, чем указано (стоит стакан, хочу купить по 10, кто-то решил шмальнуть по рынку - пока мою заявку на 10 не исполнят полностью - бид ниже не опустится) - исключаем аукционы открытия\закрытия. А проскальзывания в "+" на лимитниках на форексе - либо игра в поддавки для заманухи, либо брокер настолько ленив, что даже не берёт своих законных  шаровых пару пипсов, а всё выводит дальше. Сильно склоняюсь к первой версии.

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

Наведу Вам пример:
Я выставляю лимитник на покупку 0.01 по цене 1.35777
По этой цене больше лимитников нет.
Другой трейдер продает 1000 лотов.


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

p.s.
какая цена будет открытия 1000 лотов я и сам не знаю, но никогда не видил рваного открытия (чтоб цена была типа 1.357766666666)

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