Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подыму ветку, ибо вижу тут умных людей.
Ситуация такая, нужно мне при инициализации рандомить настройки - выяснилось, что комбинации очень сильно повторяются, т.е. допустим мне нужно получить случайное значение от 0 до 99, при этом получаю 6 раз его, и из 1000 случаев в 11 я имею одинаковую комбинацию выпадания последовательно этих 6 значений - как сделать реальный рандом при инициализации? Может как то привязаться к локальным часам или ещё как? Использовал разные тут предложенные функции (нужна без dll).
Визуализация повторений
Прикладываю код советника, который при оптимизации выдает значение случайных генераторов.
Реальный-то вот так и работает. А нужен, значит, нереальный. А если сгенерировать массив со всеми вариантами, перемешать его и последовательно выбирать наборы?
Ну или сохранять в файле последнюю 1000 наборов, а при получении нового случайного набора смотреть, чтобы его не было в файле.
Хы, идея возникла. Берём текущую котировку на любом торговом инструменте. Из неё извлекаем последние 2 цифры после запятой. Превращаем их в целое число. Это можно сделать через операции со строками - сначала дубль в строку, затем в другую переменную 2 последние цифры, затем строку в инт. Получим случайное двухразрядное число.
это смотря что, как, и зачем потом ты с ним делаешь. Вообще привычный MathRand() годен только для генерации идентификаторов.
в качестве источника энтропии для (не к ночи упомянуто) нейронок - вообще не подходит
Да по сути то и делаю, что в коде показано - по цифрам случайным произвожу настройку советников из сохраненных комбинаций. Генерируется номер настройки, потом номер комбинации - первых 30, вторых по разному - в пределах 200 штук.
Не может быть такого.
Если найдете ошибку - буду признателен!
что за функцией ranвlong вы пользуетесь? Какое то горе от ума.
но случайный long - это явный перебор.это будет попроще, правильнее и побыстрее.
Вполне достаточно использовать :
в этой функции будет генерироваться случайное число от 0 до 1073741824
Функцию тут и взял - ранее предложил участник. Это не важно - пробовал разные варианты, исход тот же.
Реальный-то вот так и работает. А нужен, значит, нереальный. А если сгенерировать массив со всеми вариантами, перемешать его и последовательно выбирать наборы?
Ну или сохранять в файле последнюю 1000 наборов, а при получении нового случайного набора смотреть, чтобы его не было в файле.
Не знаю, на сколько это реально будет рассчитать все комбинации - даже не знаю, как это сделать.
А перемешивать каким способом предлагаете?
Не сохранять в файл не хотелось бы, так как используется это в оптимизации с кучей удаленных агентов.
А вот два варианта long (просто long без диапазона):
Хе, неправильные у меня функции тут - https://www.mql5.com/ru/forum/296430/page5#comment_10070081
На 15 надо сдвигать, а не на 16. Потому что 32767 - это сумма по всем 15 битам, а не 32768, что есть только один 16-ый бит..
Надеюсь, доставил всем участникам этой темы несказанное удовольствие))
Не знаю, на сколько это реально будет рассчитать все комбинации - даже не знаю, как это сделать.
А перемешивать каким способом предлагаете?
Не сохранять в файл не хотелось бы, так как используется это в оптимизации с кучей удаленных агентов.
Диапазоны изменения всех параметров определены, шаги изменения каждого параметра тоже известны. Дальше придумать можно, если нужно. Можно даже не генерировать массив, а вычислять N-ый набор. Что-то типа календаря Майя.
Массив перемешать - это вообще не проблема - менять местами два случайных элемента массива.
---
Разумеется, не прямо в файл сохранять, а через фрейм возвращать данные, потом их сохранять. Но все равно будет дублирование вариантов, потому что агенты параллельно работают.
---
А почему бы просто не оптимизировать эксперта, используя генетический алгоритм тестера?
Да по сути то и делаю, что в коде показано - по цифрам случайным произвожу настройку советников из сохраненных комбинаций. Генерируется номер настройки, потом номер комбинации - первых 30, вторых по разному - в пределах 200 штук.
тогда привычного MathRand вам за глаза и с лихвой :-)
-----
кстати про настройку советников, если советник не лютый ночной скальпер, то все настройки и оптимизации сводится всего-то к сравнению с картинкой:
вариантов собственно немного:
- картина почти в точности совпадает. Робота придётся выбросить
- более глубокие и резкие впадины - у вас в руках потенциальный (контр)трендовый личный грааль. Входы/выходы близки к оптимальным
- смещено и искажено (или впадины стали нечёткими, что побочный эффект смещений)- используются сильно опаздывающие сигналы, скорее всего не лечится
- пики и впадины инвертированы - офигенный флетовый скальпер
Если найдете ошибку - буду признателен!
попробуйте в начале OnInit поставить MathSrand(GetTickCount());