Теперь можно приступить к коду нашего индикатора.
Будем рисовать индикатор в виде линии по ценам открытия, которая будет менять цвет в зависимости от прогноза на рост или снижение цены.
И здесь мы взяли входные параметры и код инициализации из кода сгенерированного эксперта.
Так как модули сигналов работают с данными как с таймсериями, применим функцию ArraySetAsSeries к буферам нашего индикатора.
В функции OnCalculate индикатора мы сначала обновляем все данные, а затем получаем взвешенные сигналы модулей и сравниваем их с пороговым значением.
В итоге получаем прогноз на увеличение или уменьшение цены.
После присоединения к графику нашего индикатора на основе модулей сигналов советника, мы увидим, как индикатор меняет цвет в зависимости от прогноза на рост или снижение цены.
Создание такого индикатора — это способ наглядно посмотреть работу советника на графике символа.
Генетические алгоритмы
Если рассматривать задачу создания самооптимизирующегося советника,
То при создании самооптимизирующегося советника, на определенном этапе его работы, требуется автоматический вызов кода, который заново оптимизирует параметры советника на истории финансового инструмента, и далее советник продолжит свою работу уже с новыми параметрами.
Так как сам советник работает на текущем баре и не использует историю символа, код оптимизации параметров советника должен опираться на код индикатора, который в свою очередь создан на основе кода советника.
Для оптимизации параметров советника, или теперь уже параметров индикатора, совпадающих с параметрами советника, можно использовать полный перебор, однако для сокращения времени оптимизации можно применить генетический алгоритм.
Для начала обратимся к терминологии.
Хромосома состоит из набора генов — набора случайно выбранных параметров советника в допустимых диапазонах.
Поколение это набор хромосом.
Фитнес функция FF это код, возвращающий значение советника, по которому производится оптимизация, например прибыль.
Значение функции фитнеса VFF используется для вычисления вероятности P воспроизведения хромосомы — члена популяции.
Начальная популяция формируется случайным образом и размер популяции (количество особей) фиксируется и не изменяется в течение работы всего алгоритма.
На основе вероятностей воспроизведения хромосом начальной популяции формируется новая популяция, и так далее пока не сработает условие завершения работы алгоритма.
Каждая следующая популяция формируется из предыдущей с помощью отбора, скрещивания и мутации.
Для отбора могут использоваться такие алгоритмы как рулетка, турнирный отбор и элитный отбор.
При применении рулетки, колесо рулетки делится на сектора, число которых совпадает с числом особей популяции.
Площадь каждого сектора пропорциональна вероятности воспроизведения особи популяции.
Отбор производится с помощью вращения колеса рулетки.
Таким образом, особь с наибольшим значением вероятности воспроизведения попадает в следующую популяцию наибольшее число раз.
Количество копий особи в следующей популяции определяется по формуле, как показано на слайде, где N — число особей в популяции.
При турнирном отборе из популяции случайно выбираются две особи, из которых остается особь с наибольшим значением вероятности воспроизведения.
При элитном отборе несколько лучших особей переходят в следующую популяцию без изменений, не участвуя в отборе и скрещивании.
После отбора идет скрещивание особей, при котором сначала выбираются две особи, затем случайно определяется точка разрыва в диапазоне числа параметров фитнес функции, после чего особи обмениваются сегментами хромосомы.
Само скрещивание производится с вероятностью ½.
При применении мутации, сначала случайно выбирается параметр фитнес функции, затем он модифицируется.
Сама мутация производится с вероятностью 0,001.
Библиотека UGAlib MQL5 Community реализации генетического алгоритма использует представление хромосомы в виде массива Chromosome, где 0 индекс это значение фитнес функции, а остальные индексы это параметры фитнес функции или гены хромосомы.
Оптимизация параметров фитнес функции ведется в одном диапазоне от RangeMinimum до RangeMaximum.
Поэтому если оптимизируемые параметры имеют разные диапазоны, их нужно привести к одному диапазону, как правило, от 0.0 до 1.0.
Популяция особей представлена двумерным массивом Population, где строки это хромосомы.
Популяция ранжируется по значению фитнес функции таким образом, что первый ее член имеет наилучшее значение фитнес функции по критерию оптимизации.
Популяция делится на две части.
Вначале вся популяция заселяется особями со случайно выбранными генами в диапазоне.
Затем для этих особей вычисляется значение фитнес функции, которое помещается в 0 индекс хромосомы.
При этом функция GetFitness расчета значения фитнес функции оперирует колонией потомков, представленной массивом Colony, имеющим размер в два раза меньший, чем размер популяции.
Таким образом, популяция заселяется двумя колониями потомков.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии