У кого есть корректный "датчик случайных чисел")) -поделитесь

 
День добрый)) Хочу протестировать ТС со случайным открытием позиции (либо buy либо sell) - но вот беда)))) ни как нем огу приноровиться к функциям mathSrand и mathRand))) - все время генерятЬ одни и те же "случайные" последовательности))) и синхронно-одинаковые по всем парам)))
я использую следующий код
в начале каждого часа -
MathSrand(LocalTime());
rr = MathRand();
MathSrand(rr);
rr1 = MathRand();
rr2= rr-rr1;
а затем либо rr2 >0 либо <0 - исходя из которого и наступает "событие" - покупка или продажа ))
Пока я добился того что по всем тестируемым парам - все пары дружно идит либо в короткую либо в длинную))-
Есть у кого нибудь предложения?)))
 
MathSrand() нужно делать только один раз перед генерацией случайной последовательности. Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал.
 
Rosh:
MathSrand() нужно делать только один раз перед генерацией случайной последовательности. Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал.
Поставить его в Init()? Где он будет инициализироваться только один раз?
 
Rosh:
Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал.
LocalTime будет отдавать тестовое значение. Кстати, CurTime будет отдавать то же самое значение.
Отсюда вывод: при тестировании на одной и той же последовательности инициализация рандомайзера будет производиться одним и тем же значением. И последующий ряд "случайных" чисел будет каждый раз тем же самым!
 
Один раз в init вызовите MathSrand( GetTickCount() ) - этого будет достаточно.
 
Renat:
Один раз в init вызовите MathSrand( GetTickCount() ) - этого будет достаточно.
Спасибо)) -попробую таким образом))
 
stringo:
Rosh:
Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал.
LocalTime будет отдавать тестовое значение. Кстати, CurTime будет отдавать то же самое значение.
Отсюда вывод: при тестировании на одной и той же последовательности инициализация рандомайзера будет производиться одним и тем же значением. И последующий ряд "случайных" чисел будет каждый раз тем же самым!
Вот эту бяку я и имел ввиду. Как получить рандомайзную инициализирующую величину? Чтобы новые прогоны давали новую случайную последовательность. Я на эти грабли наступил еще в МТ3.
 
Rosh:
Вот эту бяку я и имел ввиду. Как получить рандомайзную инициализирующую величину? Чтобы новые прогоны давали новую случайную последовательность. Я на эти грабли наступил еще в МТ3.
Даю идею. Бесплатно :-).
1. На любой график повесить либо советника, либо зацикленный скрипт, который пишет в файл значение CurTime().
2. В ините тестируемого советника читать содержимое этого файла.
 
Ай маладэс. Идею чтения из файла я сразу рассмотрел, но споткнулся о необходимость как-то обновлять содержимое (вручную влом каждый раз).
Черт, смутно вспоминаю, что папки файлов тестера и экпертов разнесены и взаимопрониконовение запрещено. Или я путаю?
 
Все программисты нормально пользуются srand() и rand(), а тут проблему развели :)
MathSrand( GetTickCount() ), а дальше сколько угодно вызовов MathRand()
 
Опа, первый раз такую вижу в МТ4, она там давно? Тогда проблем нет вообще :)
int GetTickCount( )

Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. Ограничено разрешающей способностью системного таймера.

Пример:

int start=GetTickCount();
// некие серьёзные вычисления...
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");
Причина обращения: