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

 
jaffer wilson:

Это не работает на моей стороне.

Это мои подробности версии MT5.


Попробуйте изменить погрешность системного времени.

//+------------------------------------------------------------------+
//|                                           SpeedupSystemTimer.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "Уменьшает погрешность системного таймера до 1 ms"

#import "winmm.dll"
   int timeBeginPeriod(uint per);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
{
   timeBeginPeriod(1);
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
   ExpertRemove();
}
//+------------------------------------------------------------------+
 
Roman :


Попробуйте изменить погрешность системного времени.

Я пытался. Пожалуйста, проверьте файл. И видео. Вы узнаете. Даже я прошу модератора увидеть прикрепленный файл.

То же самое происходит и с пользовательским символом.

Файлы:
 
jaffer wilson:

Я пытался. Пожалуйста, проверьте файл. И видео. Вы узнаете. Даже я прошу модератора увидеть прикрепленный файл.

То же самое происходит и с пользовательским символом.

Прочитай в документации про TimeCurrent()

 
Roman :

Прочитай в документации про TimeCurrent()

Я полагаю, вы не запустили файл. Пожалуйста, вы можете запустить его один раз на вашей стороне. Моя программа использует TimeCurrent (), чтобы получить текущее время, когда секунды становятся равными нулю или меньше. Это вызовет функцию SetTime ().

Тогда, если оставшееся время составляет 50 секунд, тогда он не будет проверять TimeCurrent (), он будет уменьшать секунды. Я думаю, это должно быть видно, когда вызывается OnTimer (). Но это не видно. Пожалуйста, проверьте это один раз.

 
jaffer wilson:

Я полагаю, вы не запустили файл. Пожалуйста, вы можете запустить его один раз на вашей стороне. Моя программа использует TimeCurrent (), чтобы получить текущее время, когда секунды становятся равными нулю или меньше. Это вызовет функцию SetTime ().

Тогда, если оставшееся время составляет 50 секунд, тогда он не будет проверять TimeCurrent (), он будет уменьшать секунды. Я думаю, это должно быть видно, когда вызывается OnTimer (). Но это не видно. Пожалуйста, проверьте это один раз.

Я запускал ваш файл, но обработчики в вашем коде выставил по приоритету.
Эти два индикатора работают почти одинаково, с учётом специфики функции TimeCurrent()


Добавлено.
Я бы лучше обратил внимание разработчиков, на задержку OnTimer() из этого поста.

Файлы:
 
Roman:

Я бы лучше обратил внимание разработчиков, на задержку OnTimer() из этого поста.

Точность таймера до миллисекунд не гарантирована. И не будет гарантирована из-за аппаратных ограничений.
 
Roman:

Я бы лучше обратил внимание разработчиков, на задержку OnTimer() из этого поста.

16 миллисекунд - точность у всего, где фигурируют милисекунды. Где-то это уже обсуждалось.
С микросекундами точность нормальная, но скорость медленее.
 
Nikolai Semko:
16 миллисекунд - точность у всего, где фигурируют миллисекунды. Где-то это уже обсуждалось.
С микросекундами точность нормальная, но скорость медленнее.

Это понятно, что системная точность ~16 миллисекунд.
В примере было выставлено больше 16, EventSetMillisecondTimer(20);
То есть обработчик OnTimer(), бежит с шагом 20 миллисекунд.
Но счётчик выводимый в коммент, как бы подвисает на несколько миллисекунд.
Вот и не понятно из за чего, или обработчик OnTimer() подтормаживает, или очередь обработки событий графика.

 
Roman:

Это понятно, что системная точность ~16 миллисекунд.
В примере было выставлено больше 16, EventSetMillisecondTimer(20);
То есть обработчик OnTimer(), бежит с шагом 20 миллисекунд.
Но счётчик выводимый в коммент, как бы подвисает на несколько миллисекунд.
Вот и не понятно из за чего, или обработчик OnTimer() подтормаживает, или очередь обработки событий графика.

нашел

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

Как создать функцию обработки каждой миллисекунды?

Nikolai Semko, 2018.09.13 04:45

Да, так и есть. (только не частота, а период. Максимальная частота = 64 Гц)

Только добавлю уточнение:

шаг изменения периода для таймера = 15.625 миллисекунды. 

Т.е. при команде EventSetMillisecondTimer(1) и при команде EventSetMillisecondTimer(10) реальный период будет 15.625 мс.

       при команде EventSetMillisecondTimer(21) и при команде EventSetMillisecondTimer(30) реальный период будет 31.25 мс.

       при команде EventSetMillisecondTimer(95) и при команде EventSetMillisecondTimer(105) реальный период будет 109.375 мс.

и т.д.

Смена значения GetTickCount() каждые 1/(2^6)=1/64 секунды (15625 микросекунды).
 
Nikolai Semko:

нашел

Смена значения GetTickCount() каждые 1/(2^6)=1/64 секунды (15625 микросекунды).

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

Добавлено.
Но я изменил период системного таймера вин апи функцией timeBeginPeriod(1)
т.е. по идее теперь системный таймер разогнан до 1 миллисекунды.
И шаг системного таймера должен быть 1 миллисекунда, ведь так?
Почему тогда всё равно наблюдается подвисание счётчика в комменте?