вопрос по генератору случайных чисел

 

Здравствуйте,

вопрос по генератору случайных чисел. Справка сообщает:

Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount()), так как значение GetTickCount() увеличивается с момента запуска операционной системы и не повторяется в течение 49 дней, пока не переполнится встроенный счетчик миллисекунд. Использование MathSrand(TimeCurrent()) не подходит по той причине, что функция TimeCurrent() возвращает время прихода последнего тика, которое может не меняться долгое время, например, в выходные дни.

А разве  GetTickCount() изменяется в выходные дни?

Т.е. "Для гарантированного получения неповторяющейся последовательности используйте вызов MathSrand(GetTickCount())" - тоже не годится.

А люди часто проводят оптимизацию в выходные.... мне например нужно сделать уникальные для каждого прохода оптимизатора уникальный префикс к глобальным переменным... и в выходные его не получить ((
Может есть другой способ?

 
elibrarius:

Здравствуйте,

вопрос по генератору случайных чисел. Справка сообщает:

Для гарантированного получения неповторяющейся последовательности используйте вызов 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
Файлы:
Test.mq5  1 kb
 
Karputov Vladimir:

На выходных или не на выходных - это не имеет значения для функции GetTickCount:

 

Результат:

Спасибо!
Цитата из справки по TimeLocal()

При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().

Т.е. при оптимизации (когда все прогоны запускаются с одной и той же даты-времени) оно получится одинаковым?

 
elibrarius:

Спасибо!
Цитата из справки по TimeLocal()

При работе в тестере стратегий локальное время TimeLocal() всегда равно моделируемому серверному времени TimeCurrent().

Т.е. при оптимизации (когда все прогоны запускаются с одной и той же даты-времени) оно получится одинаковым?

Нужно определиться: вопросы о GetTickCount или о времени? 
 
Karputov Vladimir:
Нужно определиться: вопросы о 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
 
Karputov Vladimir:

Тот-же код из скрипта вставлен в советник в OnTick(). При отладке на истории (в MetaEditore "Ctrl" + "F5") получаем результат:

это в onTick - тут с каждым тиком все меняется- согласен.

А при инициализации хоть с первым тиком, хоть в onInit() для разных прогонов все будет одинаковым

 
elibrarius:

это в 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
 
Karputov Vladimir:
Жду Ваш код, описание методики проверки и результат. Интересно, но писать пример надоело.
Попробуйте второй раз запустить тот же советник в тестере - результат будет точно таким же.
 
elibrarius:
Попробуйте второй раз запустить тот же советник в тестере - результат будет точно таким же.
Выше вставил результат второго запуска.
 
Karputov Vladimir:
Выше вставил результат второго запуска.
Спасибо, теперь есть чем генерить случайное число.
Вот про  GetTickCount я спрвку и не посмотрел. По названию подумал, что это с тиками связано, а оказывается это время)))