Новая версия платформы MetaTrader 5 build 2530: Сортировка в Обзоре рынка и удобная работа с результатами оптимизации - страница 5

 
Nikolai Semko:

Билд 2523 
В эксперте чуть быстрее, но тоже не увидел обещанных считанных микросекунд. Всё теже миллисекунды.
И это при том, что не происходит события CHARTEVENT_CHART_CHANGE, а лишь происходит движение мышки. Т.е. запрашиваемые параметры не изменяются.

Код эксперта прилагаю

Для экспертов и скриптов доступ радикально ускорен к 45 свойствам чарта из 58ми, по остальным существенных изменений нет.

Ваш код (после стайлера):

   if(id==CHARTEVENT_MOUSE_MOVE)
     {
      int i = s1%5;
      if(i==0)
         lr=0;
      t0=GetMicrosecondCount();
      switch(i)
        {
         case 0:
            lr += (ulong)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR, 0);
         case 1:
            lr += (ulong)ChartGetInteger(0,CHART_SCALE, 0);
         case 2:
            lr += (ulong)(100000*ChartGetDouble(0,CHART_PRICE_MAX, 0));
         case 3:
            lr += (ulong)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS, 0);
         case 4:
            lr += (ulong)ChartGetInteger(0,CHART_WIDTH_IN_BARS, 0);
            t0=GetMicrosecondCount()-t0;
            ch[i].a[ch[i].n]=t0;
            if(ch[i].max<t0)
               ch[i].max=t0;
            if(ch[i].min>t0)
               ch[i].min=t0;
            ch[i].sum+=t0;
            ch[i].n++;
            if(ch[i].n==10000)
               ch[i].n=0;
        }
      s1++;
      if(s1%5==0)
         ss=lr;
      BildChart(ch);
     }

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

 
fxsaber:

Просьба пояснить, как архитектурно устроено, что в OnTick может возникать следующая ситуация?

Это лаги ОС, кривое железо или что?

Вы все еще используете Windows 7? ЦПУ 4х ядерное?  Уточните сколько конкурирующих потоков вызывают SymbolInfoTick одновременно.

 
MetaTrader 5 x64 build 2530 started for MetaQuotes Software Corp.
Windows 10 build 19041, Intel Core i7-9750H  @ 2.60GHz, 25 / 31 Gb memory, 1695 / 1861 Gb disk, IE 11, UAC, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Мультисимвольный советник. Открывает четыре позиции по разным символам (при этом тест идёт по пятому символу). 

Тестер в окне 'Trade' отображает все четыре позиции (по разным символам), но не отображает все четыре окна символов.

Настройки редактора:


Результат (gif анимация, для воспроизведения кликнуть):


Файлы:
 
Anton:

Вы все еще используете Windows 7? ЦПУ 4х ядерное?

Windows 7 Service Pack 1 build 7601, Intel Core i7-2700K  @ 3.50GHz, 3 / 15 Gb memory, 5 / 29 Gb disk, IE 11, Admin

Четыре физических ядра, восемь - HT. В Тестере восемь локальных Агентов.

Уточните сколько конкурирующих потоков вызывают SymbolInfoTick одновременно.

В Терминале открыт один чарт, на нем запущен только один безындикаторный советник. Индикаторы на чарте отсутствуют, скрипты - аналогично. Сервисов с SymbolInfoTick нет.

Советник обращается только к символу своего чарта. Бары не используются.


Этот скрипт у кого-нибудь что-либо выводит в лог?


Сегодня.

2020.07.13 11:09:03.583 Alert: Time[::SymbolInfoTick(_Symbol,Tick)] = 185 ms.
 

нашел баг в этой версии, (возможно тянется давно), научитесь уже работать с будущими барами как в МТ4 :)

1

 
fxsaber:

Четыре физических ядра, восемь - HT. В Тестере восемь локальных Агентов.

В Терминале открыт один чарт, на нем запущен только один безындикаторный советник. Индикаторы на чарте отсутствуют, скрипты - аналогично. Сервисов с SymbolInfoTick нет.

Советник обращается только к символу своего чарта. Бары не используются.


Этот скрипт у кого-нибудь что-либо выводит в лог?


Сегодня.

Ваш тестовый скрипт показывает отсутствие тормозов.

1) Что у вас происходит и как реально нагружен компьютер в моменты тормозов?

2) Какие показатели дисков, какой тип и скорость?


На компьютерах с HDD легко рандомно ловятся 50-100 мс задержки на любых самых легких обращениях к диску. В любых программах и в любых условиях.

Достаточно какой-то базе(тики, чарты) под локом что-либо писать или читать с диска, как остальные потоки(получение тика) вынуждены ждать.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Хотелки 1".
 
Renat Fatkhullin:

Ваш тестовый скрипт показывает отсутствие тормозов.

1) Что у вас происходит и как реально нагружен компьютер в моменты тормозов?

2) Какие показатели дисков, какой тип и скорость?


На компьютерах с HDD легко рандомно ловятся 50-100 мс задержки на любых самых легких обращениях к диску. В любых программах и в любых условиях.

Достаточно какой-то базе(тики, чарты) под локом что-либо писать или читать с диска, как остальные потоки(получение тика) вынуждены ждать.

На компе нет HDD, только SSD. Просил объяснить, как архитектурно устроен SymbolInfoTick.

Казалось бы, если в Обзоре рынка уже есть тик, то почему бы его не отдать без каких-либо задержек? Судя по логам, так не всегда происходит.


Возможно, использование CopyTicks каким-то образом влияет на SymbolInfoTick. Могу только выдвигать гипотезы. Архитектуры не знаю.


Тормоза вылавливаются, когда на компе нет никакой CPU-активности, кроме Терминала. И такие же тормоза случаются, когда Локальные Агенты другого Терминала часами пашут, работает активно торрент-качалка и прочее.


ЗЫ Стоит ли попробовать Терминал разместить на RAM-drive?

 

еще ошибка - при смене периода, iBarShift возвращает значение -1, хотя символ "синхронизирован" и имеет 5000 баров.

согласно справки, iBarShift должен возвращать ближайший по времени бар:

 Возвращаемое значение, если бар на указанное время не найден. При значении exact=false iBarShift возвращает индекс ближайшего бара, у которого время открытия меньше указанного (time_open<time). Если такой бар не найден (нет истории раньше указанного времени), то функция вернет -1. Если exact=true, то ближайший бар не ищется и функция iBarShift сразу возвращает -1.

1


код индикатора:

#property version   "1.00"
#property indicator_chart_window
#property indicator_plots 0

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(!SymbolIsSynchronized(_Symbol) || !SeriesInfoInteger(_Symbol,_Period,SERIES_SYNCHRONIZED) ||
      rates_total<=0 || rates_total-prev_calculated<0) 
         
         return(0);
   
   if(prev_calculated==0 || rates_total-prev_calculated>1)
      {
      datetime find_time=D'2020.07.13';   //сегодня
      int bar=iBarShift(_Symbol,_Period,find_time);
   
      Print("rates_total=",rates_total," bar=",bar);
      }
   
   
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Окно работы с логами.

Когда открываешь, то строка фильтра выделена, но фокуса на ней нет.

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

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