Пользовательские символы. Ошибки, баги, вопросы, предложения. - страница 26

 
Roman:

Спасибо, теперь понятно в чём причина.
Шаг изменения системного таймера, всё равно кратен 15.625

Добавлено.
Но я изменил период системного таймера вин апи функцией timeBeginPeriod(1)
т.е. по идее теперь системный таймер разогнан до 1 миллисекунды.
И шаг системного таймера должен быть 1 миллисекунда, ведь так?
Почему тогда всё равно наблюдается подвисание счётчика в комменте?
https://rsdn.org/forum/winapi/4159851.1
 
А на Linux из под Wine, счётчик в комменте бежит без подвисаний, даже с EventSetMillisecondTimer(1);
Но нагрузка на процессор возрастает до 40%, при восьми потоках процессора.
В общем закрыли тему, не по теме ))
 
Roman:
А на Linux из под Wine, счётчик в комменте бежит без подвисаний, даже с EventSetMillisecondTimer(1);
Но нагрузка на процессор возрастает до 40%, при восьми потоках процессора.

О том и речь...
Почему 64 раз в секунду? 
Думаю для того, чтобы можно было выводить на экран любую информацию. Этой частоты достаточно. Чаще нет смысла, да и накладно.
Интересно, а OnChartEvent, OnCalculate и OnTick тоже герерируются не чаще 64 раз в секунду? - Думаю, да.

 
Nikolai Semko:

О том и речь...
Почему 64 раз в секунду? 
Думаю для того, чтобы можно было выводить на экран любую информацию. Этой частоты достаточно. Чаще нет смысла, да и накладно.
Интересно, а OnChartEvent, OnCalculate и OnTick тоже генерируются не чаще 64 раз в секунду?

Тут как бы не в нагрузке был смысл, а в возможностях обработчика OnTimer()
Получается виндовс эти возможности ограничивает, линукс нет.

На вопрос, OnChartEvent, OnCalculate и OnTick тоже генерируются не чаще 64 раз в секунду?
Наверно лучше дождаться ответа от разработчика.

 
Roman:

На вопрос, OnChartEvent, OnCalculate и OnTick тоже генерируются не чаще 64 раз в секунду?
Наверно лучше дождаться ответа от разработчика.

Проверил OnChartEvent с помощью мышки.
Максимальная частота получилась 124 герц. Больше никак. Странно, почему не 128.

Файлы:
 
Nikolai Semko:

Проверил OnChartEvent с помощью мышки.
Максимальная частота получилась 124 герц. Больше никак. Странно, почему не 128.

изменил чуть алгоритм. Не учел что коммент сжирает много времени. Получил уже 127 Гц. 
Это уже логично. Погрешность в 1 Гц уже можно объяснить работой самой программой, поэтому чуть -чуть не дотягивает до 128.

Значит максимальная частота OnChartEvent 128 Гц.

Файлы:
 
есть ли возможность средствами MQL5 получить спрэд синтетика?
В самом терминале на синтетиках спрэд имеется.
 
Aidas Geguzis:
есть ли возможность средствами MQL5 получить спрэд синтетика?
В самом терминале на синтетиках спрэд имеется.

Для сторонних программ кастомные символы минимально отличаются от оригинальных. Так что не должно быть препятствий.

 
Если пользовательский инструмент создаётся через интерфейс терминала, и у кастомного символа получается отрицательное значение
В интерфейсе кастомного символа необходимо Разрешить отрицательные цены.
Если не указать(забыл) эту настройку, то по созданному инструменту не рассчитывается история, и график отображается только с текущего момента.
Долго не мог понять причину почему не рассчитывается история, так как в журнал не выводится предупреждение, что необходимо Разрешить отрицательные цены.
Было бы не плохо выводить в журнал такое предупреждение.
 

Добавление тиков "один в один" (в частности из EURUSD на MQ Demo) в пустой новый кастом-символ дает ошибку 5310 (не сразу, но в цикле прохода от произвольной даты).

input int Limit = 10000;
input datetime Start = D'2020.06.01';

int fillArray(ulong &_start)
{
  MqlTick array[];
  int size = CopyTicks(_Symbol, array, COPY_TICKS_ALL, _start, Limit);
  if(size > 0)
  {
    _start = array[size - 1].time_msc + 1;
    if(CustomTicksAdd(symbolName, array) == -1)
    {
      Print("Error:", GetLastError());
      return -1;
    }
  }
  return size;
}

...
{
  ulong startMsc = (ulong)Start * 1000;
  while(fillArray(startMsc) > 0);
}

Что не так? Как узнать, на какие именно тики ругается? Выводил массивы в лог - там нет нарушения хронологии.

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