Синхронный OrderSend сообщает об успешном выполнении быстрее, чем пинг до торгового сервера - страница 3

 
TheXpert:

а в чем смысл такого переноса? я так понимаю

1. нигде кроме вышеупомянутого брокера такое не прокатит, т.к. ордер будет заморожен (т.к. цена ордера за пределами спреда)

2. вероятность срабатывания со старой ценой больше (т.к. по новой уже реджектнули)

Это просто работа синхронизатора такая. Если видит, что в виртуальном окружении лимитник исполнился, а на реале лимитник висит, то его надо как-то сделать исполненным. Очевидно, что если текущая цена лучше, то выгоднее, чтобы цена его акцепта была более выгодной - текущая. Поэтому вне зависимости от брокера, в такой ситуации синхронизатор просто попытается сделать соответствующую модификацию.


Если модификация будет отклонена на уровне Терминала или торгового сервера - тому и быть. Если нет, то логично, чтобы Терминал вел себя корректно. Тема о том, что OrderSend вернул ерунду.


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

 
Renat Fatkhullin:

Код покажете 17 роботов?

Чтобы убедить вас в том, что на каждый ордер только один OrderSend? 

Там же заведомый стресс-тест.

Вы правда думаете, что мне делать нечего, как через задницу хейтить MT5? Какой стресс-тест, если это реал, где 75% ордеров заливается?!

Мелкий лот по той причине, что бился над устранением тормозов. И сегодня, наконец, убил их все.


Если вы правы, то воспросизвести будет элементарно. Мы не воспроизвели.

На MQ-Demo не воспроизвести? Так там же тепличные условия особого вида. Для меня баг не критический, он просто есть. Но сомнения ввязывания в тему были высказаны не зря.

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

Синхронный OrderSend сообщает об успешном выполнении быстрее, чем пинг до торгового сервера

fxsaber, 2020.09.29 07:51

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

Правда, удобно, когда выкладывал много раз лаконичный код с воспроизведением какого-нибудь бага? А тут, что называется, не дожал. Не смог сходу все бросить, и попытаться для MQ написать еще один такой код. Ну а без кода, конечно, балабол. На все вопросы ответил, но, блин, без кода.

MT5 и скорость в боевом исполнении
MT5 и скорость в боевом исполнении
  • 2020.09.29
  • www.mql5.com
MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли...
 
Мы не можем воспроизвести и все перерыли в коде. Поэтому дали две гипотезы.

Будем искать дальше, но лучше с деталями.
 
Renat Fatkhullin:
Мы не можем воспроизвести и все перерыли в коде. Поэтому дали две гипотезы.

Будем искать дальше, но лучше с деталями.

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

 

Пока пытался воспроизвести, создал ситуацию, когда чарты не обновляются, а Обзор рынка тикает.

Анимационный GIF не цепляется движком, поэтому в приложении.

Файлы:
clip0083.gif  161 kb
 
И ордера пересылаются быстрее пинга, и чарты не обновляются, и гиф не цепляется движком... Это не спроста.)
 
fxsaber:

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

Воспроизвел и довольно легко.

  1. Открыть демо-счет на RannForex-Server.
  2. В обзоре рынка открыть Forex-символы и разрешить автоторговлю.
  3. На одном чарте запустить этот советник.
    #include <MT4Orders.mqh> // https://c.mql5.com/3/332/MT4Orders.mqh
    #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
    
    bool OrderScan( const string &Symb, const int Type )
    {
      bool Res = false;
      
      for (int i = OrdersTotal() - 1; (i >= 0) && !Res; i--)
        Res = OrderSelect(i, SELECT_BY_POS) && (OrderType() == Type) && (OrderSymbol() == Symb);
              
      return(Res);  
    }
    
    void OnTick()
    {
      if (OrderScan(_Symbol, OP_SELL))
        OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
      else if (OrderScan(_Symbol, OP_SELLLIMIT))
      {
        if (Bid + _Point < OrderOpenPrice())    
          OrderModify(OrderTicket(), Bid + _Point, 0, 0, 0);
        else if (Bid > OrderOpenPrice())
          OrderModify(OrderTicket(), Bid, 0, 0, 0);    
      }
      else
        OrderSend(_Symbol, OP_SELLLIMIT, 0.01, Bid + _Point, 0, 0, 0);
    }
  4. Кинуть на этот же чарт этот скрипт - клонирует советник на другие символы. Запускал с inAmount = 15.
  5. Ждать такие сообщения и смотреть лог.
    2020.09.30 21:36:07.462 Test9 (USDJPY,H1)       Alert: https://www.mql5.com/ru/forum/352254/page3#comment_18529500 - 1334673
    2020.09.30 21:36:23.972 Test9 (AUDCAD,H1)       Alert: https://www.mql5.com/ru/forum/352254/page3#comment_18529500 - 1334714
    2020.09.30 21:36:24.048 Test9 (USDCAD,H1)       Alert: https://www.mql5.com/ru/forum/352254/page3#comment_18529500 - 1334717
    2020.09.30 21:36:31.695 Test9 (EURUSD,H1)       Alert: https://www.mql5.com/ru/forum/352254/page3#comment_18529500 - 1334742
    2020.09.30 21:36:31.760 Test9 (GBPUSD,H1)       Alert: https://www.mql5.com/ru/forum/352254/page3#comment_18529500 - 1334743

  6. Например, лог первой строки - ордер 1334673.
    2020.09.30 21:36:04.834 Trades  '': order #1334673 sell limit 0.01 / 0.01 USDJPY at 105.468 done in 86.723 ms
    2020.09.30 21:36:04.941 Trades  '': modify order #1334673 sell limit 0.01 USDJPY at 105.468 sl: 0.000 tp: 0.000 -> 105.467, sl: 0.000 tp: 0.000
    2020.09.30 21:36:04.989 Trades  '': accepted modify order #1334673 sell limit 0.01 USDJPY at 105.468 sl: 0.000 tp: 0.000 -> 105.467, sl: 0.000 tp: 0.000
    2020.09.30 21:36:04.989 Trades  '': modify #1334673 sell limit 0.01 USDJPY -> price: 105.467, sl: 0.000, tp: 0.000) done in 48.779 ms
    2020.09.30 21:36:07.411 Trades  '': modify order #1334673 sell limit 0.01 USDJPY at 105.467 sl: 0.000 tp: 0.000 -> 105.468, sl: 0.000 tp: 0.000
    2020.09.30 21:36:07.423 Trades  '': modify #1334673 sell limit 0.01 USDJPY -> price: 105.468, sl: 0.000, tp: 0.000) done in 11.800 ms
    2020.09.30 21:36:14.110 Trades  '': deal #687914 sell 0.01 USDJPY at 105.468 done (based on order #1334673)
    2020.09.30 21:36:19.658 Trades  '': market buy 0.01 USDJPY, close #1334673 sell 0.01 USDJPY 105.468
    2020.09.30 21:36:19.709 Trades  '': accepted market buy 0.01 USDJPY, close #1334673 sell 0.01 USDJPY 105.468
    2020.09.30 21:36:19.710 Trades  '': market buy 0.01 USDJPY, close #1334673 sell 0.01 USDJPY 105.468 placed for execution

Похоже, я хороший спец по таким делам. Если меня замотивировать, и другие плюшки найду...

Файлы:
MT4Orders.mqh  101 kb
 
fxsaber:

...

Похоже, я хороший спец по таким делам. Если меня замотивировать, и другие плюшки найду...

Безусловно, спец, и мотивации у Вас море. Неизвестно откуда... Я например, мотивируюсь 1.творческим вдохновением. 2. коммерческим проектом (стартап). Источник же Вашего стремления - Тайна.)
 
Реter Konow:
Безусловно, спец, и мотивации у Вас море. Неизвестно откуда... Я например, мотивируюсь 1.творческим вдохновением. 2. коммерческим проектом (стартап). Источник же Вашего стремления - Тайна.)
Не ёрничайте, он давно, неоднократно и несколько раз объяснял, что работает над ВЧ торговлей и пытается минимизировать все тормоза.
 
Edgar Akhmadeev:
Не ёрничайте, он давно, неоднократно и несколько раз объяснял, что работает над ВЧ торговлей и пытается минимизировать все тормоза.
А, ну это все обьясняет.) Спасибо. Не знал и поэтому спросил.