| / | Форум |
|
George-on-Don
07.02.2006 13:05
День добрый)) Хочу протестировать ТС со случайным открытием
позиции (либо buy либо sell) - но вот беда)))) ни как нем огу приноровиться
к функциям mathSrand и mathRand))) - все время генерятЬ одни и те же "случайные"
последовательности))) и синхронно-одинаковые по всем парам)))
я использую следующий код в начале каждого часа - MathSrand(LocalTime()); rr = MathRand(); MathSrand(rr); rr1 = MathRand(); rr2= rr-rr1; а затем либо rr2 >0 либо <0 - исходя из которого и наступает "событие" - покупка или продажа )) Пока я добился того что по всем тестируемым парам - все пары дружно идит либо в короткую либо в длинную))- Есть у кого нибудь предложения?))) |
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
33759 |
Rosh
07.02.2006 13:23
MathSrand() нужно делать только один раз перед генерацией случайной последовательности.
Только вот как будет вести себя LocalTime() в тестере - этот вопрос
я не изучал.
|
|
George-on-Don
07.02.2006 13:24
Rosh: Поставить его в Init()? Где он будет инициализироваться только
один раз?MathSrand() нужно делать только один раз перед генерацией случайной последовательности. Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал. |
5198 |
stringo
07.02.2006 14:37
Rosh: LocalTime будет отдавать тестовое значение. Кстати, CurTime будет отдавать
то же самое значение.Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал. Отсюда вывод: при тестировании на одной и той же последовательности инициализация рандомайзера будет производиться одним и тем же значением. И последующий ряд "случайных" чисел будет каждый раз тем же самым! |
3646 |
Renat
07.02.2006 15:06
Один раз в init вызовите MathSrand( GetTickCount() ) - этого будет достаточно.
|
|
George-on-Don
07.02.2006 15:21
Renat: Спасибо)) -попробую таким образом))Один раз в init вызовите MathSrand( GetTickCount() ) - этого будет достаточно. |
33759 |
Rosh
07.02.2006 16:27
stringo: Вот эту бяку я и имел ввиду. Как получить рандомайзную инициализирующую
величину? Чтобы новые прогоны давали новую случайную последовательность.
Я на эти грабли наступил еще в МТ3.Rosh: LocalTime будет отдавать тестовое значение. Кстати, CurTime будет отдавать
то же самое значение.Только вот как будет вести себя LocalTime() в тестере - этот вопрос я не изучал. Отсюда вывод: при тестировании на одной и той же последовательности инициализация рандомайзера будет производиться одним и тем же значением. И последующий ряд "случайных" чисел будет каждый раз тем же самым! |
|
KimIV
07.02.2006 20:44
Rosh: Даю идею. Бесплатно :-).Вот эту бяку я и имел ввиду. Как получить рандомайзную инициализирующую величину? Чтобы новые прогоны давали новую случайную последовательность. Я на эти грабли наступил еще в МТ3. 1. На любой график повесить либо советника, либо зацикленный скрипт, который пишет в файл значение CurTime(). 2. В ините тестируемого советника читать содержимое этого файла. |
33759 |
Rosh
07.02.2006 21:19
Ай маладэс. Идею чтения из файла я сразу рассмотрел, но споткнулся
о необходимость как-то обновлять содержимое (вручную влом каждый
раз).
Черт, смутно вспоминаю, что папки файлов тестера и экпертов разнесены и взаимопрониконовение запрещено. Или я путаю? |
3646 |
Renat
07.02.2006 21:23
Все программисты нормально пользуются srand() и rand(), а тут проблему
развели :)
MathSrand( GetTickCount() ), а дальше сколько угодно вызовов MathRand() |
33759 |
Rosh
07.02.2006 21:56
Опа, первый раз такую вижу в МТ4, она там давно? Тогда проблем
нет вообще :)
int GetTickCount( )
Функция GetTickCount() возвращает количество миллисекунд, прошедших с момента старта системы. Ограничено разрешающей способностью системного таймера. Пример: int start=GetTickCount(); // некие серьёзные вычисления... Print("Время вычисления ", GetTickCount()-start, " миллисекунд."); |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий