Нужно было уникальное число в ините, различное в различных прогонах оптимизатора. Я не нашёл ни одного штатного способа добыть такое число.
Не сработали перед MathRound() : MathSrand(TimeLocal()), MathSrand(GetTickCount()) и т.п. - во всех этих случаях MathRand() генерил одну и ту же последовательность.
с этим лучше в сервисдеск.
Так не интересно. Они сделают, конечно. Достаточно этой ветки, чтоб напомнить.
Лучше поторопись пока не сделали. Есть оригинальные предложения?
Нужно было уникальное число в ините, различное в различных прогонах оптимизатора. Я не нашёл ни одного штатного способа добыть такое число.
Не сработали перед MathRound() : MathSrand(TimeLocal()), MathSrand(GetTickCount()) и т.п. - во всех этих случаях MathRand() генерил одну и ту же последовательность.
input uint x=0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { MathSrand(x);for(uint i=0;i<MathRand();i++)MathRand(); MathSrand((uint)TimeLocal()*MathRand()); return(0); } double OnTester(){return((double)MathRand());}
У меня такой номер (со счётчиком) не прокатит, ибо используется генетический алгоритм и количество оптимизируемых параметров за раз 8-10.
// Хотя он вполне рабочий, для экспертов без внешних параметров. Если же параметры брать из файла, то тады ........ тады проще счётчик или рэндом брать из файла. ;-))
Т.е. если я счётчик такой сделаю, он в режиме ген-алгоритма станет "оптимизироваться" (подползать к конкретному глючному значению и на нём фиксироваться).
Подобный случай уже грустно описан на форуме: https://www.mql5.com/ru/forum/131308/page54
// см. мой ответ Figar0
;)
- www.mql5.com
а) В функции OnInit() загружаем rand seed из файла (если файл отсутствует - инициализируем при помощи таймера), в функции OnDeinit() записываем в тот же самый файл (если файл отсутствует - создаём) новый rand seed для следующего старта советника/etc.
б) Использовать dll для генерации случайных чисел (можно прикрутить и Crypto API - http://msdn.microsoft.com/en-us/library/aa379942(v=vs.85).aspx )
- msdn.microsoft.com
Только что-то найти не могу :)
а) В функции OnInit() загружаем rand seed из файла (если файл отсутствует - инициализируем при помощи таймера), в функции OnDeinit() записываем в тот же самый файл (если файл отсутствует - создаём) новый rand seed для следующего старта советника/etc.
б) Использовать dll для генерации случайных чисел (можно прикрутить и Crypto API - http://msdn.microsoft.com/en-us/library/aa379942(v=vs.85).aspx )
Где-то даааавно, видел библиотеку, которая считывала шумы с звуковухи и генерировала случайное число. :)
Только что-то найти не могу :)
Мне тож попадалась. Помнится разборка на эту тему была на mql4 года два-три назад. Потом через год паузы кто-то и выложил таку бяку.
Правда в том топике искали "идеальный шумогенератор", а тут идеальность по условию не требуется.
Вобчем код на вашей совести. Найдёте - зачёт. ;-)
Моё решение было (есть) без файлов и dll (включая апи).
Эт я не к тому что запрещено по условию, так, выпендриваюсь просто... :)
У меня такой номер (со счётчиком) не прокатит, ибо используется генетический алгоритм и количество оптимизируемых параметров за раз 8-10.
// Хотя он вполне рабочий, для экспертов без внешних параметров. Если же параметры брать из файла, то тады ........ тады проще счётчик или рэндом брать из файла. ;-))
Т.е. если я счётчик такой сделаю, он в режиме ген-алгоритма станет "оптимизироваться" (подползать к конкретному глючному значению и на нём фиксироваться).
Подобный случай уже грустно описан на форуме: https://www.mql5.com/ru/forum/131308/page54
// см. мой ответ Figar0
;)
Владимир, я специально прикрутил возврат rand() в OnTester() чтоб по первому вызову ранда и графику тестирования даже на последовательном переборе можно было убедится что ранд инициализируется совершенно неповторимо (случайно).
Поэтому смело прикручивайте к любому оптимизируемому параметру и вы получите неповторимый ряд даже при ГА.
Два прохода ГА будут отличны друг от друга.
Вам ведь нужен целый ряд а не только первый вызов. Но по первому вызову можно судить о том, будет ли ряд похож на какой либо из предшествующих. Вот прогон на полном переборе и показывает что инициализация уникальна. Суть то в том что при одном и томже оптимизируемом параметре но вызваном в разное время локалтайм будет проинициалированы разные ряды.
ЗЫ прикручивать к оптимизируемому параметру нужно в случае если тестирование идёт так быстро что соседние вызовы попадают на один локалтайм. Иначе же если прогоны идут достаточно долго то можно обойтись просто инициализацией через локалтайм.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужно было уникальное число в ините, различное в различных прогонах оптимизатора. Я не нашёл ни одного штатного способа добыть такое число.
Не сработали перед MathRound() : MathSrand(TimeLocal()), MathSrand(GetTickCount()) и т.п. - во всех этих случаях MathRand() генерил одну и ту же последовательность.
В том числе не получилось организовать счётчик прогонов через глобальную переменную - то ли тестер их моделирует внутри себя (собственный виртуальный набор),
то ли пока с ними не работает вообще. // В четвёрке я решал подобную задачу именно так.
В результате таки проблему свою "уникальную" решил, но пришлось не на шутку извратиться.
// Как - пока не скажу, подожду свежих идей.
Итак - конкурс! Главный приз - почёт и уважуха. :-) :-) :-) :-)
Особо поощряются в решениях оригинальность подхода и чувство юмора.
// Торопитесь, пока не появились штатные средства!!
:)