Тестируем 'CopyTicks' - страница 21

 
Network 'xxx': authorized on Alpari-MT5 through mt5.nl.3 (ping: 64.15 ms)

Почти на пустом маркетвотче Альпари тормоза копитикс не меньше, чем на БКС.

На робо все более, чем на порядок, быстрее. 

 

Результаты на USDCHF M1, CalcLength из индикатора https://www.mql5.com/ru/code/16537:

  • RoboForexEU -  23 мс   (стакана в трансляции нет, только bid/ask)
  • MetaQuotes-Demo - 15-30 мс (стакан с объемами есть в трансляции)


Результаты постоянно плавают + не соблюдено правило единых потоков - на одном без стакана потоки (где не надо выборок и слияний делать для CopyTicks),на другом со стаканом. На БКС демо не открывается, но главное, что на Робофорексе нет стаканов

Странный код замера. Меряли кучу лишнего, но никак не время запроса CopyTicks:

virtual void Visual( void ) const
  {
    const ulong StartTime = ::GetMicrosecondCount();

    int X0;
    int Y0;

    BARS bars(this.Chart);

    TICKSPICTURE TicksPicture(this.Chart, &bars, X0, Y0);

    this.SetProperty(::OBJPROP_XDISTANCE, X0);
    this.SetProperty(::OBJPROP_YDISTANCE, Y0);

    TicksPicture.Fill(ColorBid, ::BID);
    TicksPicture.Fill(ColorAsk, ::ASK);
    TicksPicture.Fill(ColorSpread, ::AVG);

    TicksPicture.SendToResource(this.Resource);

    ::Comment("LastCalcTime = " + (string)::TimeLocal() +
              ", Ticks = " + (string)bars.GetAmountTicks() +
              ", CalcLength = " + (string)((::GetMicrosecondCount() - StartTime) / THOUSAND) + " ms.");

    ::ChartRedraw(this.Chart);

    return;
  }

В любом случае, вызов копирования тиков оптимизируем. Много занимают.
Тиковый индикатор Ticks
Тиковый индикатор Ticks
  • голосов: 15
  • 2016.10.14
  • //www.mql5.com/ru/users/fxsaber">
  • www.mql5.com
Показывает тиковую ценовую историю (Bid/Ask) внутри всех видимых баров.
 
Renat Fatkhullin:

Результаты на USDCHF M1, CalcLength из индикатора https://www.mql5.com/ru/code/16537:

  • RoboForexEU -  23 мс   (стакана в трансляции нет, только bid/ask)
  • MetaQuotes-Demo - 15-30 мс (стакан с объемами есть в трансляции)

Проблемы на Альпари-реал и БКС-реал. Реал элементарно открыть

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

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

pivomoe, 2016.08.25 15:15

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


 

Результаты постоянно плавают + не соблюдено правило единых потоков - на одном без стакана потоки (где не надо выборок и слияний делать для CopyTicks),на другом со стаканом. На БКС демо не открывается, но главное, что на Робофорексе нет стаканов

Странный код замера. Меряли кучу лишнего, но никак не время запроса CopyTicks:

Это не ко мне. Замеряется все вместе. Единственное отличие - торговый сервер. Так что тормоза только с копитикс связаны.

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

Копитикс в текущем виде очень неудобен. Например, совершенно непонятно, как получить тик, который был перед from.

Почему нельзя возвращать индекс на массив базы и работать с базой, как с массивом? Проблемы дописывания в базу полностью возлагать на пользователя. Пусть сам разруливает, если что-то не получается. Сейчас работа с копитикс ну очень неудобна. Я, похоже, один из немногих, кто очень активно его использует. И могу говорить об этом довольно ответственно.

 
Renat Fatkhullin:

Результаты на USDCHF M1, CalcLength из индикатора https://www.mql5.com/ru/code/16537:

  • RoboForexEU -  23 мс   (стакана в трансляции нет, только bid/ask)
  • MetaQuotes-Demo - 15-30 мс (стакан с объемами есть в трансляции)


Результаты постоянно плавают + не соблюдено правило единых потоков - на одном без стакана потоки (где не надо выборок и слияний делать для CopyTicks),на другом со стаканом. На БКС демо не открывается, но главное, что на Робофорексе нет стаканов

Странный код замера. Меряли кучу лишнего, но никак не время запроса CopyTicks:

virtual void Visual( void ) const
  {
    const ulong StartTime = ::GetMicrosecondCount();

    int X0;
    int Y0;

    BARS bars(this.Chart);

    TICKSPICTURE TicksPicture(this.Chart, &bars, X0, Y0);

    this.SetProperty(::OBJPROP_XDISTANCE, X0);
    this.SetProperty(::OBJPROP_YDISTANCE, Y0);

    TicksPicture.Fill(ColorBid, ::BID);
    TicksPicture.Fill(ColorAsk, ::ASK);
    TicksPicture.Fill(ColorSpread, ::AVG);

    TicksPicture.SendToResource(this.Resource);

    ::Comment("LastCalcTime = " + (string)::TimeLocal() +
              ", Ticks = " + (string)bars.GetAmountTicks() +
              ", CalcLength = " + (string)((::GetMicrosecondCount() - StartTime) / THOUSAND) + " ms.");

    ::ChartRedraw(this.Chart);

    return;
  }

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

Поясните, пожалуйста, что Вы имеете ввиду про единые потоки? 

Еще вопрос, чтобы тики приходили как можно быстрее, нужно, чтобы стакан не был открыт в терминале и не было подписки на событие обновления стакана из эксперта/индикатора?

Из справки:

Скорость выдачи: терминал хранит по каждому символу 4096 последних тиков в кеше для быстрого доступа (для символов с запущенным стаканом – 65536 тиков), запросы к этим данным выполняются быстрее всего. 

Повторюсь, для быстрого доступа стакан должен быть скрыт и не должно быть подписки на обновление стакана по символу? Или наличие стакана (скрытого/открытого) - это уже гарантия замедленной работы?
 
Alexey Kozitsyn:

Поясните, пожалуйста, что Вы имеете ввиду про единые потоки?

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

Тестируем 'CopyTicks'

fxsaber, 2016.10.13 10:18

 есть MT-нюанс с тиками, когда сама история тиков переписывается задним числом из-за нескольких источников получения тиков.


 
fxsaber:
Благодарю, а про стакан и скорость получения не в курсе?
 
Alexey Kozitsyn:
Благодарю, а про стакан и скорость получения не в курсе?
Нет, к сожалению. Ренат утверждал, что стакан постоянно стримится на весь маркетвотч. Но это не целесообразное (расточительно) решение для большинства ситуаций.
 
fxsaber:
Нет, к сожалению. Ренат утверждал, что стакан постоянно стримится на весь маркетвотч. Но это не целесообразное решение для большинства ситуаций.
Логичнее бы было на свой символ - свой стакан.
 

Вот как надо тестировать CopyTicks:

MqlTick ExtArr[2048];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   ulong from   =(TimeTradeServer()-1200)*1000;
   ulong ticks  =GetMicrosecondCount();
   int   records=CopyTicks(_Symbol,ExtArr,COPY_TICKS_INFO,from,2048);

   ticks=GetMicrosecondCount()-ticks;
   Print("Time: ",ticks," msc for ",records," records");
  }

Вот вывод в микросекундах: 95 микросекунд на выборку 2048 INFO тиков за прошлые 20 минут

2016.10.18 14:15:38.673 TEST (USDCHF,M1)        Time: 95 msc for 1206 records
Это кардинально отличается от заявленных вами десятком миллисекунд. Потому что вы меряли не CopyTicks.
 
Alexey Kozitsyn:

Поясните, пожалуйста, что Вы имеете ввиду про единые потоки? 

Потоr bid/ask  и поток полного стакана с объемами и last/traded ценами - это две большие разницы.

Кардинально большие разницы.


Еще вопрос, чтобы тики приходили как можно быстрее, нужно, чтобы стакан не был открыт в терминале и не было подписки на событие обновления стакана из эксперта/индикатора?

Открытость в терминале или подписка в эксперте не имеют значения.

Если символ есть в маркетвотче, значит терминал получает весь полный тиковый поток со стаканами безусловно.


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

Причина обращения: