Ну как я понял MathSrand() это установка seed рандомизации. В OnTesterInit() дергаю этот метод. Но он влияет на воспроизводимость дальнейшей рандомизации, а дальше дергаю MathRand() или rand() и вот они уже ведут себя необычно.
Ну как я понял MathSrand() это установка seed рандомизации. В OnTesterInit() дергаю этот метод. Но он влияет на воспроизводимость дальнейшей рандомизации, а дальше дергаю MathRand() или rand() и вот они уже ведут себя необычно.
А что если MathSrand перенести в начало OnTester() ?
Но вообще кластеризация исходов как будто говорит что отдельные прогоны идут с одним сидом.
Ну как я понял MathSrand() это установка seed рандомизации. В OnTesterInit() дергаю этот метод. Но он влияет на воспроизводимость дальнейшей рандомизации, а дальше дергаю MathRand() или rand() и вот они уже ведут себя необычно.
только не GetTickCount(), который не факт что в оптимизаторе в любом билде, тем паче в агентах, работает. Создать временный файл, прочесть системную метку времени и её отправить уже в MathSrand.
И даже этого недостаточно, чем-то ещё надо разбовлять seed, потому что всё остальное псевдо-виртуальное окружение слишком одинаково.
Тут впору делать большое исследование, достойное нормальной статьи. Получать рандомный рандом, это крайне важная вещь.
только не GetTickCount(), который не факт что в оптимизаторе в любом билде, тем паче в агентах, работает. Создать временный файл, прочесть системную метку времени и её отправить уже в MathSrand.
И даже этого недостаточно, чем-то ещё надо разбовлять seed, потому что всё остальное псевдо-виртуальное окружение слишком одинаково.
Тут впору делать большое исследование, достойное нормальной статьи. Получать рандомный рандом, это крайне важная вещь.
используйте СБ, в ней все давно есть:
- 2019.10.10
- www.mql5.com
GetTickCount() должен и в тестер разные значения выдавать, если метаквоты не накосячили как обычно.
Как накосячили ?
void OnInit() {
tick=GetTickCount(); // должен давать близкие (вообще идентичные) значения в проходах оптимизатора.
}
вот если он сильно разный и действительно в оптимизаторе показывает "кол-во тиков (мсек) со старта запустившей программы" - вот это будет косяк.
Как накосячили ?
void OnInit() {
tick=GetTickCount(); // должен давать близкие (вообще идентичные) значения в проходах оптимизатора.
}
вот если он сильно разный и действительно в оптимизаторе показывает "кол-во тиков (мсек) со старта запустившей программы" - вот это будет косяк.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть стратегия, у нее есть параметры и есть некоторое поле - в файле эксперта у меня класс стратегии и это поле этого класса, в файле эксперта создается объект класса стратегии и инициируется это поле. Инициируется рандомизатором. MathRand() пробовал, rand() пробовал. Это поле в моей импровизированной стратегии отвечает за максимальное кол-во сделок, которое стратегия может сделать, назовем его maxTrades. В данной стратегии нет специальных условий для входа, вхожу а каждой свече, поэтому кол-во сделок у прохода будет равно maxTrades.
Далее делаю оптимизацию (полный перебор) по некоторым параметрам стратегии. Эти параметры в стратегии не на что не влияют, просто нужны чтобы организовать множество проходов.
Почему-то всегда если сортировать по id прохода кол-во трейдов (которое, напомню, равно срандомленному maxTrades) сгруппировано в кластеры, т.е. идут прогоны с кол-вом сделок 5,5,5,5 потому, например, 7,7,7,7,7,7 потом 3,3,3 и т.д., ожидал что будет что-то типа 1,2,6,4,10,4,7,3. Как будто рандомизатор то ли одно число рандомит несколько раз, то ли файл советника не запускается заново на каждом прогоне, а только при каком-то доп. условии. В общем не до конца понимаю как это работает. А может и я где-то накосячил, конечно, хотя не понятно где тут можно накосячить. В общем хочется понять причины чтобы либо это починить (если баг), либо учесть (если фича) и т.д.