Особенности языка mql5, тонкости и приёмы работы - страница 89
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пока вижу только один упомянутый недостаток GetTickCount - то что он ограничен разрешающей способностью системного таймера, это да, серьёзная проблема. А остальное - не имеет особой практической пользы. То что вы проводите ультра-короткие тесты длительностью в 15 миллисекунд - так никто не делает. Такие результаты нестабильны. Нужно чтоб хотя бы полсекунды длился тест, тогда уже можно о чём-то говорить.
То что вы проводите ультра-короткие тесты длительностью в 15 миллисекунд - так никто не делает. Такие результаты нестабильны. Нужно чтоб хотя бы полсекунды длился тест, тогда уже можно о чём-то говорить.
Ошибаетесь. За эти 15 миллисекунд функция GetTickCount() вызывается более 6 000 000 раз.
Мой расчет верен. Смена значения GetTickCount() каждые 1/(2^6)=1/64 секунды (15625 микросекунды).
Разработчики, подтвердите пожалуйста.
Ошибаетесь. За эти 15 миллисекунд функция GetTickCount() вызывается более 6 000 000 раз.
Когда замеряется производительность рабочего кода (а не сферического коня в вакууме), то он гоняется на достаточном промежутке времени (сотни миллисекунд и выше). Это обусловлено тем, что производительность и загруженность системы постоянно меняется. В один миг она одна, а в другой - уже другая. И на коротких интервалах результаты будут сильно разниться от теста к тесту. Поэтому необходим более длительный интервал, а там микросекунды уже не играют роли.
Далее. Котировки у нас в миллисекундах. Пинги тоже исчисляются в миллисекундах. Поэтому куда тут присунуть микросекунды - я пока не вижу. Впрочем это не суть.
Сейчас нужно придумывать решение, как выкручиваться из ситуации, чтобы обойти недостатки обоих функций. На разработчиков надежды мало.
Сейчас нужно придумывать решение, как выкручиваться из ситуации, чтобы обойти недостатки обоих функций. На разработчиков надежды мало.
я думаю это возможно с помощью типа такой формулы в первом приближении:
Пока это просто мысль вслух.
Некоторые места, где использую микросекунды
Некоторые места, где использую микросекунды
Так таймер же, во-первых, миллисекундный. Во-вторых, его погрешность такая же, как и GetTickCount(), т.е. 15 миллисекунд. Поэтому какой смысл тут от микросекунд - не очень понятно. Допустим вычислили вы интервал с точностью до микро, а по факту оно придёт на несколько МИЛЛИсекунд позже или раньше.
Так таймер же, во-первых, миллисекундный. Во-вторых, его погрешность такая же, как и GetTickCount(), т.е. 15 миллисекунд. Поэтому какой смысл тут от микросекунд - не очень понятно. Допустим вычислили вы интервал с точностью до микро, а по факту оно придёт на несколько МИЛЛИсекунд позже или раньше.
а еще команды становятся в очередь и выполнение по очереди может быть и через 5 секунд..
Сейчас нужно придумывать решение, как выкручиваться из ситуации, чтобы обойти недостатки обоих функций. На разработчиков надежды мало.
Увы.
могу предложить лишь такой вариант функции:
Почему Увы?
Потому что в случае изменения локального времени или просто программного подвисания в функцию RealMicrosecondCount может добавляться погрешность до 16 миллисекунд. И это никак не обойти.
Но зато фатальных последствий не будет при переходе на зимнее (летнее) время, смене поясов, обновлении времени по интернету.
Увы.
могу предложить лишь такой вариант функции:
Почему Увы?
Потому что в случае изменения локального времени или просто программного подвисания в функцию RealMicrosecondCount может добавляться погрешность до 16 миллисекунд. И это никак не обойти.
Но зато фатальных последствий не будет при переходе на зимнее (летнее) время, смене поясов, обновлении времени по интернету.
Пока не проверял, но вот насчёт 16 мс не очень уверен. Когда я гуглил по этой теме, обычно приводится погрешность системного таймера около 10 мс, либо 10-16.
Вот вариант с использованием winapi-таймера высокого разрешения, дающего точность 3.8e-07 секунды.