Ошибки, баги, вопросы - страница 2219

 
fxsaber:

В общем, ждем ответа от MQ. По-моему, это баг, когда ордер есть на торговом сервере, а после синхронной OrderSend на Терминале об этом ни духом.

Я скажу больше, надо просить разработчиков обеспечить полную синхронность OrderSend, как на терминале, так и на сервере.  В противном случае, если синхронность исполнения не гарантированна, то зачем нужна эта функция?  Для этих целей уже есть OrderSendAsync.

 
Dmitriy:

Здравствуйте. Сегодня обновился до версии 1860 и при оптимизации советника столкнулся вот с такой проблемой:

задержка между проходами составляет 1 минуту! Подскажите пожалуйста, в чем может быть дело?

p.s. до обновления все работало как часики.

Часом функцию Bars не используете?
Если да, то см. вот это.

 

Просто вопрос:

Может есть смысл сделать общие файлы? Сейчас пишу коды универсальные, без правок работают и в мт 4 и в мт 5, единственное что напрягает это постоянное переименовывание mq4 и mq5 пришла мысль в связи с проектами может сделать общее расширение типа mq ?

И просто можно код копировать из терминала в терминал без правок расширений... 

 
Vladimir Pastushak:

Просто вопрос:

Может есть смысл сделать общие файлы? Сейчас пишу коды универсальные, без правок работают и в мт 4 и в мт 5, единственное что напрягает это постоянное переименовывание mq4 и mq5 пришла мысль в связи с проектами может сделать общее расширение типа mq ?

И просто можно код копировать из терминала в терминал без правок расширений... 

А кто запрещает эти коды прописать в файлы mqh и подключать их с помощью (#include). Что я и делаю уже довольно давно.

 
Konstantin Nikitin:

А кто запрещает эти коды прописать в файлы mqh и подключать их с помощью (#include). Что я и делаю уже довольно давно.

вы подключаете, я меняю расширения ...  соседи...

 
Alexey Navoykov:

Я скажу больше, надо просить разработчиков обеспечить полную синхронность OrderSend, как на терминале, так и на сервере.  В противном случае, если синхронность исполнения не гарантированна, то зачем нужна эта функция?  Для этих целей уже есть OrderSendAsync.

Уточню. Синхронность выставления ОРДЕРА в торговую систему платформы и сам Терминал.

 
1861 - невозможно открыть демо на Альпари. Выбор брокера не прокатывает.
 
fxsaber:

По-моему, это баг, когда ордер есть на торговом сервере, а после синхронной OrderSend на Терминале об этом ни духом.

Решил проверить, как долго длятся такие ситуации фантомных ордеров, когда ордер есть в системе, но нет в Терминале.

// Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических

#define TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

bool OrderIsExist( const ulong &OrderTicket )
{
  return(OrderTicket ? OrderSelect(OrderTicket) || HistoryOrderSelect(OrderTicket) : true);
}

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest&, const MqlTradeResult& )
{
  static bool PrevIsExist = true;
  static ulong StartTime = 0;
  static ulong MaxInterval = 0;
  
  const ulong NowTime = GetMicrosecondCount();
  const bool IsExist = OrderIsExist(Trans.order);
    
  if (!IsExist)
  {
    Print(TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order)));       
  
    if (PrevIsExist) 
      StartTime = NowTime;
  }
  else if (!PrevIsExist)
  {
    const ulong Interval = NowTime - StartTime;
    
    Print(TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order)));       
    
    if (Interval > MaxInterval)
    {
      MaxInterval = Interval;
      
      Comment(TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs.
    }
  }
          
  PrevIsExist = IsExist;
}


Результат

2018.06.21 00:10:31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE (2)
2018.06.21 00:10:31.047 Trans.order = 2210967406
2018.06.21 00:10:31.047 OrderSelect(Trans.order) = false
2018.06.21 00:10:31.047 HistoryOrderSelect(Trans.order) = false
2018.06.21 00:10:31.047 
2018.06.21 00:10:31.080 Interval = 32643
2018.06.21 00:10:31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD (3)
2018.06.21 00:10:31.080 Trans.order = 2210967406
2018.06.21 00:10:31.080 OrderSelect(Trans.order) = false
2018.06.21 00:10:31.080 HistoryOrderSelect(Trans.order) = true


32 миллисекунды ордер есть, но его в Терминале нет! Только представьте себе, какие это может нести последствия, если в этом интервале выполнялась торговая логика...


Интересно, что фантомные ордера чаще всего присутствуют только при TRADE_TRANSACTION_ORDER_DELETE и при TRADE_TRANSACTION_DEAL_ADD (значительно реже) типах транзакций.


Очень нехороший нюанс платформы.


ЗЫ Сомнительное быстродействие торговых операций на пятерке, к сожалению.

Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
  • 2016.09.13
  • MetaQuotes Software Corp.
  • www.mql5.com
Многие трейдеры зачастую не задумываются над тем, как быстро доходит их заявка до биржи, как долго она там исполняется и когда торговый терминал трейдера узнает о результате. В результате они не знают, что легко могут улучшить качество исполнения своих сделок за счет более быстрой реакции и скорости проведения транзакций. 12 сентября 2016 года...
 
fxsaber:

Решил проверить, как долго длятся такие ситуации фантомных ордеров, когда ордер есть в системе, но нет в Терминале.


Результат


32 миллисекунды ордер есть, но его в Терминале нет! Только представьте себе, какие это может нести последствия, если в этом интервале выполнялась торговая логика...

Да, непорядок.  Как видно, эти результаты транзакций шлются в разных пакетах.  А должны быть в одном.

 
Alexey Navoykov:

Да, непорядок.  Как видно, эти результаты транзакций шлются в разных пакетах.  А должны быть в одном.

Оказалось, что может сразу после OrderSend ордер быть фантомным, при этом параллельный советник с OnTradeTransaction это состояние не всегда может поймать. Т.е. OnTradeTransaction сама иногда подтормаживает.


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