
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А может проще попросить разрабов добавить функцию где можно выбирать диапозон? :) я когда искал в сети интернет эту функцию, то очень много таких тем, значит пользуется популярность rand()
Зачем? От rand() требуется просто быть надежным источником энтропии (случайности) а привести результат к нужному диапазону не сложно.
Вот такой код у меня родился. Сорри за растянутость, но так удобнее читается.
Да, у меня получился попроще)
Странное дело.. но 64-битная версия без лишних припарок даёт практически идеальное распределение (верхний - с хвостом)
Если тестер с облаками не нужен, то, на мой взгляд, проще написать на стороне, чем мастерить все эти велосипеды. Взять плюсовую https://en.cppreference.com/w/cpp/numeric/random (сомневаюсь, что в мкл появится что-то такого уровня), всё вылизано, без багов. А если хочется, то можно подсунуть свой источник случайности (чего-нибудь из сети дёрнуть, а у некоторых на борту есть ГСЧ), который будет работать с желаемым адаптером обеспечивающим нужное распределение.
Как показали предварительные тесты у MQL-шного rand() очень хорошее распределение.
Да, у меня получился попроще)
Но тут встаёт вопрос об эффективности. На малых диапазонах будет слишком медленно работать, т.к. всегда запрашивает 5 случайных чисел, что избыточно. Хотя на больших диапазонах наоборот быстрее за счёт сокращения числа проверок. Но с другой стороны, как правило, диапазон мы задаём константами, поэтому все лишние проверки вырезаются на стадии компиляции.
Прошлый мой код оказался некорректный. Перемудрил с разрядами. Вот правильный вариант, а заодно и более лаконичный:
Но тут встаёт вопрос об эффективности. На малых диапазонах будет слишком медленно работать, т.к. всегда запрашивает 5 случайных чисел, что избыточно. Хотя на больших диапазонах наоборот быстрее за счёт сокращения числа проверок. Но с другой стороны, как правило, диапазон мы задаём константами, поэтому все лишние проверки вырезаются на стадии компиляции.
Совершенно верно. И эффективности, и здравого смысла. Ведь в подавляющем большинстве случаев применения ГПСЧ, хватит и 15-ти бит стандартного rand(). А теперь, после чистки "хвостов", он совершенно безопасен.
Но иметь под рукой, наготове, такой 64-битный KING SIZE, в нашем деле совершенно не будет лишним.
С Наступающим, господа Исследователи неслучайных случайностей!
Как показали предварительные тесты у MQL-шного rand() очень хорошее распределение.
Это хорошо, конечно. Но не всегда нужно равномерное распределение, к источнику случайности необходима куча адаптеров, может понидобится такое:
Нужна будет единичка с вероятностью 23.57%, и начнутся велосипеды, баги.
ЗЫ: не подумайте, что я не знаю как написать на базе голого rand().
Бумс...
Вроде не ошибся?
А вот два варианта long (просто long без диапазона):
Подыму ветку, ибо вижу тут умных людей.
Ситуация такая, нужно мне при инициализации рандомить настройки - выяснилось, что комбинации очень сильно повторяются, т.е. допустим мне нужно получить случайное значение от 0 до 99, при этом получаю 6 раз его, и из 1000 случаев в 11 я имею одинаковую комбинацию выпадания последовательно этих 6 значений - как сделать реальный рандом при инициализации? Может как то привязаться к локальным часам или ещё как? Использовал разные тут предложенные функции (нужна без dll).
Визуализация повторений
Прикладываю код советника, который при оптимизации выдает значение случайных генераторов.
Интересно, если средствами MQL получение случайного числа не устраивает, то почему бы ни сделать функцию на другом языке программирования, воткнуть её в dll и подключить длл-ку к коду советника/индикатора/скрипта?
Мне когда не хватает возможностей MQL, я так и делаю. Работает на ура.
Интересно, если средствами MQL получение случайного числа не устраивает, то почему бы ни сделать функцию на другом языке программирования, воткнуть её в dll и подключить длл-ку к коду советника/индикатора/скрипта?
Мне когда не хватает возможностей MQL, я так и делаю. Работает на ура.
Мне для маркета надо - там нельзя dll использовать. Ну и не умею я на другом языке то ваять, увы.