Здравствуйте,
вопрос по генератору случайных чисел. Справка сообщает:
Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount()), так как значение GetTickCount() увеличивается с момента запуска операционной системы и не повторяется в течение 49 дней, пока не переполнится встроенный счетчик миллисекунд. Использование MathSrand(TimeCurrent()) не подходит по той причине, что функция TimeCurrent() возвращает время прихода последнего тика, которое может не меняться долгое время, например, в выходные дни.
А разве GetTickCount() изменяется в выходные дни?
Т.е. "Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount())" - тоже не годится.
А люди часто проводят оптимизацию в выходные.... мне например нужно сделать уникальные для каждого прохода оптимизатора уникальный префикс к глобальным переменным... и в выходные его не получить ((
Может есть другой способ?
На выходных или не на выходных - это не имеет значения для функции GetTickCount:
//+------------------------------------------------------------------+ //| GetTickCount.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property description "Возвращает количество миллисекунд, прошедших с момента старта системы" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { Print("TimeLocal ",TimeLocal(),"; GetTickCount ",GetTickCount()); } //+------------------------------------------------------------------+
Результат:
2015.12.12 20:36:43.667 Test (Si-12.15,H1) TimeLocal 2015.12.12 20:36:43; GetTickCount 11864234 2015.12.12 20:36:52.355 Test (Si-12.15,H1) TimeLocal 2015.12.12 20:36:52; GetTickCount 11872921
На выходных или не на выходных - это не имеет значения для функции GetTickCount:
Результат:
Спасибо!
Цитата из справки по TimeLocal()
При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().
Т.е. при оптимизации (когда все прогоны запускаются с одной и той же даты-времени) оно получится одинаковым?
Спасибо!
Цитата из справки по TimeLocal()
При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().
Т.е. при оптимизации (когда все прогоны запускаются с одной и той же даты-времени) оно получится одинаковым?
Нужно определиться: вопросы о GetTickCount или о времени?
нужно "гарантированное получение неповторяющейся последовательности MathSrand()"
В оптимизаторе получается, что все будет повторяющимся. И TimeLocal() и GetTickCount и TimeCurrent() - будут одинаковы при запусках каждого прогона (если верить справке)
Тот-же код из скрипта вставлен в советник в OnTick(). При отладке на истории (в MetaEditore "Ctrl" + "F5") получаем результат:
21:12:53.602 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:00 TimeLocal 2015.08.27 16:12:00; GetTickCount 14034171 21:12:53.671 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:05 TimeLocal 2015.08.27 16:12:05; GetTickCount 14034250 21:12:53.739 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:10 TimeLocal 2015.08.27 16:12:10; GetTickCount 14034312 21:12:53.807 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:16 TimeLocal 2015.08.27 16:12:16; GetTickCount 14034390 21:12:53.875 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:21 TimeLocal 2015.08.27 16:12:21; GetTickCount 14034453 21:12:53.944 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:27 TimeLocal 2015.08.27 16:12:27; GetTickCount 14034515 21:12:54.014 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:32 TimeLocal 2015.08.27 16:12:32; GetTickCount 14034593 21:12:54.083 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:38 TimeLocal 2015.08.27 16:12:38; GetTickCount 14034656 21:12:54.153 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:59 TimeLocal 2015.08.27 16:12:59; GetTickCount 14034734 21:12:54.221 TestEA (GAZR-12.15,H1) 2015.08.27 16:19:00 TimeLocal 2015.08.27 16:19:00; GetTickCount 14034796
Тот-же код из скрипта вставлен в советник в OnTick(). При отладке на истории (в MetaEditore "Ctrl" + "F5") получаем результат:
это в onTick - тут с каждым тиком все меняется- согласен.
А при инициализации хоть с первым тиком, хоть в onInit() для разных прогонов все будет одинаковым
это в onTick - тут с каждым тиком все меняется. А при инициализации хоть с первым тиком, хоть в onInit() для разных прогонов все будет одинаковым
Жду Ваш код, описание методики проверки и результат. Интересно, но писать пример надоело.
Добавлено: вот второй запуск:
LM 0 21:23:25.834 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:00 TimeLocal 2015.08.27 16:12:00; GetTickCount 14666406 LO 0 21:23:25.902 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:05 TimeLocal 2015.08.27 16:12:05; GetTickCount 14666484 KN 0 21:23:25.971 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:10 TimeLocal 2015.08.27 16:12:10; GetTickCount 14666546 CI 0 21:23:26.039 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:16 TimeLocal 2015.08.27 16:12:16; GetTickCount 14666609 MK 0 21:23:26.061 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:21 TimeLocal 2015.08.27 16:12:21; GetTickCount 14666640 RJ 0 21:23:26.129 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:27 TimeLocal 2015.08.27 16:12:27; GetTickCount 14666703 RD 0 21:23:26.198 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:32 TimeLocal 2015.08.27 16:12:32; GetTickCount 14666765
а это первый:
NE 0 21:12:53.602 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:00 TimeLocal 2015.08.27 16:12:00; GetTickCount 14034171 HD 0 21:12:53.671 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:05 TimeLocal 2015.08.27 16:12:05; GetTickCount 14034250 LG 0 21:12:53.739 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:10 TimeLocal 2015.08.27 16:12:10; GetTickCount 14034312 NQ 0 21:12:53.807 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:16 TimeLocal 2015.08.27 16:12:16; GetTickCount 14034390 KP 0 21:12:53.875 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:21 TimeLocal 2015.08.27 16:12:21; GetTickCount 14034453 ER 0 21:12:53.944 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:27 TimeLocal 2015.08.27 16:12:27; GetTickCount 14034515 DM 0 21:12:54.014 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:32 TimeLocal 2015.08.27 16:12:32; GetTickCount 14034593 RL 0 21:12:54.083 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:38 TimeLocal 2015.08.27 16:12:38; GetTickCount 14034656 KN 0 21:12:54.153 TestEA (GAZR-12.15,H1) 2015.08.27 16:12:59 TimeLocal 2015.08.27 16:12:59; GetTickCount 14034734 OI 0 21:12:54.221 TestEA (GAZR-12.15,H1) 2015.08.27 16:19:00 TimeLocal 2015.08.27 16:19:00; GetTickCount 14034796
Жду Ваш код, описание методики проверки и результат. Интересно, но писать пример надоело.
Попробуйте второй раз запустить тот же советник в тестере - результат будет точно таким же.
Выше вставил результат второго запуска.
Вот про GetTickCount я спрвку и не посмотрел. По названию подумал, что это с тиками связано, а оказывается это время)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
вопрос по генератору случайных чисел. Справка сообщает:
А разве GetTickCount() изменяется в выходные дни?
Т.е. "Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount())" - тоже не годится.
А люди часто проводят оптимизацию в выходные.... мне например нужно сделать уникальные для каждого прохода оптимизатора уникальный префикс к глобальным переменным... и в выходные его не получить ((
Может есть другой способ?