Статистика проскальзываний лимитных ордеров на бирже - страница 5

 

Не стал создавать лишнюю ветку, т.к. тема обсуждения касается сабжа. Однако подведу красную черту, чтобы сразу было понятно, что читать ДО нее не надо.

ДИСКУССИЯ ДО ЭТОГО МЕСТА НЕ ИМЕЕТ ОТНОШЕНИЯ К ТОЙ, ЧТО ПОСЛЕ.

 
В СД была подана заявка с воспроизведением бага - скольжение в тестере биржевого лимитного ордера

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.04.07 17:21

Советник для тестера (Metaquotes-Demo)
#include <MT4Orders.mqh>

// Скольжение лимитника на RTS-6.17
void OnTick()
{
  MqlTick Tick;    
  SymbolInfoTick(_Symbol, Tick);

// 2017.04.06 10:00:00                [time]   [bid]   [ask]  [last] [volume]    [time_msc] [flags]  
// 2017.04.06 10:00:00   2017.04.06 10:00:00  114200  114260  114200        2 1491472800335      56  
  if (Tick.time_msc == 1491472800335)
    OrderSend(_Symbol, OP_BUYLIMIT, 1, 114250, 0, 0, 0);
}

Результат

2017.04.07 18:18:45.366 RTS-6.17 : real ticks begin from 2017.04.06 00:00:00
2017.04.07 18:18:45.778 2017.04.06 10:00:00   buy limit 1.00 RTS-6.17 at 114250 (114200 / 114260 / 114200)
2017.04.07 18:18:46.051 2017.04.06 10:00:00   order [#2 buy limit 1.00 RTS-6.17 at 114250] triggered
2017.04.07 18:18:46.051 2017.04.06 10:00:00   deal #2 buy 1.00 RTS-6.17 at 114240 done (based on order #2)
2017.04.07 18:18:46.051 2017.04.06 10:00:00   deal performed [#2 buy 1.00 RTS-6.17 at 114240]
2017.04.07 18:18:46.051 2017.04.06 10:00:00   order performed buy 1.00 at 114240 [#2 buy limit 1.00 RTS-6.17 at 114250]

Скольжение лимитника на биржевом символе - БАГ!

 Ниже приведу разговор
Support Team 2017.04.10 18:04

fxsaber

Скольжение лимитника на биржевом символе - БАГ!

На основании чего такие выводы?

Пусть текущий рынок - 114300 / 114280

Вы ставите лимитный ордер buy limit 114250. Кто то на рынке решил продать с гарантированной ценой и поставил sell limit 114200, как результат он собрал все ордера buy limit в диапазоне от рынка до 114200.

Это вполне нормальная ситуация на биржевом рынке.

Support Team 2017.04.11 09:58

fxsaber

  1. Речь шла про тестер.
  2. При таком раскладе положительное проскальзывание будет только у того, кто выставил sell limit хуже рынка. А зафиленные соответствующие buylimits будет исполнены без проскальзываний.

1. Это понятно.

2. Что значит "только"? Те кто торгуют на бирже будут мягко говоря несогласны. Кстати уже были несогласны.

Support Team 2017.04.11 11:00

fxsaber

Данное обсуждение предлагаю вынести в паблик. Т.к. у Вас одни знания и опыт, у меня - другие. Как они коррелируют с остальными возможно выснить только в паблике. Поддерживаете?

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

А что касается сабжа, то в тестере проскальзываний лимитников быть не должно. Думаю, здесь Вы со мной согласитесь.
Не соглашусь - см. предыдущие ответы.

Вот такой разговор.


Разработчики утверждают, что если на бирже отправить sell limit по цене хуже текущей, то лучшие buy limits будут исполнены с положительным проскальзыванием. С этим не согласен.

Не понятно, на основании какой логики разработчиками делается вывод, что скольжение лимитных ордеров (не хуже рынка) в ТЕСТЕРЕ - это нормально.


Очевидно, что одна из точек зрения ошибочна. Был бы благодарен, если бы люди конструктивно высказались на эту тему.

 

тут? https://www.metatrader5.com/ru/terminal/help/general_concept#order_type

В режиме биржевого исполнения цена, указываемая при выставлении лимитных ордеров, не проверяется. Ее можно указать выше текущей цены Ask

(для ордеров на покупку) и ниже цены Sell (для ордеров на продажу). При выставлении ордера с такой ценой он практически сразу срабатывает и превращается в рыночный. Однако в отличие от рыночных ордеров, где трейдер фактически соглашается на сделку по неуказанной текущей рыночной цене, лимитный ордер будет исполнен по цене не худшей, чем указанная.

т.е. в данном случае sell limit не исполнится хуже 114200, и соберет все buy limit выше, но он же превращается в рыночный ордер,почему он влияет на buy limit? тот находится на лучшей цене для sell limit,что укладывается в определение лимитного ордера (по цене не худшей, чем указанная)по ней sell limit  и исполнится.

 
 Ниже приведу разговор
Support Team 2017.04.10 18:04

fxsaber

Скольжение лимитника на биржевом символе - БАГ!

На основании чего такие выводы?

Пусть текущий рынок - 114300 / 114280

Вы ставите лимитный ордер buy limit 114250. Кто то на рынке решил продать с гарантированной ценой и поставил sell limit 114200, как результат он собрал все ордера buy limit в диапазоне от рынка до 114200.

Это вполне нормальная ситуация на биржевом рынке.

Биржевые лимитные ордера не могут скользить ни в плюс ни в минус. В приведенном примере присутствует логическая ошибка. То, что контрагент выставил лимитный sell ордер по цене 114200 (хуже рынка) не означает, что buy limit способен исполнится не по 114250 а по 114240. В данном случае, контрагент получит более выгодную цену от нас по 114250 и пойдет дальше вниз по стакану заявок набирая необходимый объем и ухудшая свою среднюю цену. Но наш ордер будет исполнен бес проскальзывания.
 
Vasiliy Sokolov:
 Ниже приведу разговор
Биржевые лимитные ордера не могут скользить ни в плюс ни в минус. В приведенном примере присутствует логическая ошибка. То, что контрагент выставил лимитный sell ордер по цене 114200 (хуже рынка) не означает, что buy limit способен исполнится не по 114250 а по 114240. В данном случае, контрагент получит более выгодную цену от нас по 114250 и пойдет дальше вниз по стакану заявок набирая необходимый объем и ухудшая свою среднюю цену. Но наш ордер будет исполнен бес проскальзывания.
Соглашусь с предыдущим оратором. Единственно, со словом "бес" не согласен)
 
 
Vasiliy Sokolov:
 Ниже приведу разговор
Биржевые лимитные ордера не могут скользить ни в плюс ни в минус. В приведенном примере присутствует логическая ошибка. То, что контрагент выставил лимитный sell ордер по цене 114200 (хуже рынка) не означает, что buy limit способен исполнится не по 114250 а по 114240. В данном случае, контрагент получит более выгодную цену от нас по 114250 и пойдет дальше вниз по стакану заявок набирая необходимый объем и ухудшая свою среднюю цену. Но наш ордер будет исполнен бес проскальзывания.

Согласен. Поторопился с примером.

Рассмотрим такой случай:

Вот такой эксперт:

//+------------------------------------------------------------------+
//|                                               MarketBuyLimit.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>

int ExtLastHour=0;
int ExtOverMarket=1000;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   MqlDateTime dt;
   TimeTradeServer(dt);
//---
   if(dt.hour!=ExtLastHour)
     {
      CTrade  trade;
      MqlTick tick;
      double  point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
      //--- получим тик
      SymbolInfoTick(Symbol(),tick);
      //--- есть позиции?
      if(!PositionsTotal())
        {
         if(!trade.BuyLimit(1.0,tick.ask+ExtOverMarket*point,Symbol()))
           Print("BuyLimit setup failed");
        }
      else
        {
         if(!trade.SellLimit(1.0,tick.bid-ExtOverMarket*point,Symbol()))
           Print("BuyLimit setup failed");
        }
      ExtLastHour=dt.hour;
     }
  }

Т.е. открываем закрываем лимитными ордерами на 1000 пунктов лучше рынка (цена выше ask для Buy Limit, и цена ниже bid для Sell Limit).

Вот как будет выглядеть график сделок при исполнении без проскальзывания:

А вот так при исполнении с проскальзыванием:


Попробуем подумать, как совместить корректную работу обоих вариантов.

 

Внесли необходимые изменения для того чтобы корректно обрабатывать оба случая лимитных ордеров в биржевом режиме - лучше рынка и хуже рынка.

Будет доступно после обновления MetaQuotes-Demo в течении ближайших нескольких дней.

 
MQ Alexander:

Внесли необходимые изменения для того чтобы корректно обрабатывать оба случая лимитных ордеров в биржевом режиме - лучше рынка и хуже рынка.

Будет доступно после обновления MetaQuotes-Demo в течении ближайших нескольких дней.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

ФОРТС. Вопросы по исполнению

fxsaber, 2017.02.22 23:32

Есть два "вида" лимитников - котировочный и execution. Котировочный - не хуже текущей цены (и не равный). Остальные - Execution.

Котировочные лимитники должны в тестере исполняться ровно по заявленной цене.

Execution-лимитники - по цене тика, на котором выставлен (SellLimit - Bid, BuyLimit - Ask), как будто это не лимитники, а маркеты.


Такая логика будет?

 
fxsaber:

Котировочные лимитники должны в тестере исполняться ровно по заявленной цене.

Да

Execution-лимитники - по цене тика, на котором выставлен (SellLimit - Bid, BuyLimit - Ask), как будто это не лимитники, а маркеты.
Точнее - для биржевых инструментов Limit ордера выставленные по цене лучше рынка (больше Ask для BuyLimit и меньше Bid для SellLimit) будут исполняться (активироваться) сразу после выставления (не дожидаясь следующей цены) по цене текущего рынка (Ask для BuyLimit, Bid для SellLimit).