Comments 24
И видимо, речь идёт не о нейронных сетях, прогнозирующих работу рынка. А о некой экспертной системе, принимающей решения на основе явно выраженных правил, формируемых списком функций и их комбинациями. И Ваша система тестирования перебирает варианты функций, генерирует программы, комбинирует функции и правила вывода, которые дадут наилучший результат. Программа, пишущая программы (а не программа, подбирающая коэффициенты для нейронной сети). Интересный подход.
Из Вашего опыта также выделю полезные знания о фитнес функции. Сложном критерии оценки качества алгоритма.
Функция отражает некое правило, которое влияет на решение покупать или нет (результат типа BOOL, согласно статье). И как происходит скрещивание, какие типы или виды возможны?
Предполагаю, что если есть два робота, принимающие решение покупать акции ОАО Тыква или нет, то скрещивание может быть таким.
Первый робот:
— Есть свободные деньги?
— ОАО Тыква является прибыльной компанией согласно последнему отчёту?
— Лето было урожайным в регионе-поставщике?
Второй робот:
— Есть свободные деньги?
— ОАО Тыква является прибыльной компанией согласно последнему отчёту?
— Была засуха в регионе-покупателе?
Результат скрещивания:
— Есть свободные деньги?
— ОАО Тыква является прибыльной компанией согласно последнему отчёту?
— Лето было урожайным в регионе-поставщике или была засуха в регионе-покупателе?
Скрещивание — процесс случайный, поэтому в результате могут получиться такие варианты:
— Есть свободные деньги?
— ОАО Тыква является прибыльной компанией согласно последнему отчёту?
— Лето было урожайным в регионе-поставщике или была засуха в регионе-покупателе?
И еще, я бы рассмотрел варианты где правил становится больше или меньше:
— Есть свободные деньги?
— Была засуха в регионе-покупателе?
— Есть свободные деньги?
— ОАО Тыква является прибыльной компанией согласно последнему отчёту?
— Лето было урожайным в регионе-поставщике и
— Была засуха в регионе-покупателе?
Кроме и/или можно включить not, xor, тогде вариантов станет больше.
Если функции небольшие, как в примере, 2-4 переменных, то результат скрещивания близок к результату мутаций.
Еще я использовал скрещивание на уровне модулей, а не функций, там это более эффективно, потому что идея скрещивания в том, чтоб оставить части программы нетронутой. Это когда два разных модуля принимают различные решения и они взяты с разных родителей.
Пример:
— Первый модуль — покупать или нет?
— Второй модуль — сколько покупать?
2. можно ли использовать QUIC от сбербанка? или с этим какие то технические проблемы
- Никак не обхожу.
- Можно скорее всего, но MT удобнее для моих целей.
Цель в том, чтоб убедиться, что можно заставить машину создать алгоритм
2. По ответу автора я бы предположил, что он не имел дел с QLua и, тем более, QPILE.
Ни конкретно на каких инструментах тестировался робот.
Только голый текст, из серии «вот я попробовал и получилось».
А «метатрейдер» вообще используют на лохотроне, под названием Форекс
Если мы разобьем его на множество элементарных функций получится огромная простыня кода, очень чувствительная к нарушениям. Попытки случайным образом впихнуть сюда куски какого-либо другого кода скорее всего приведут к неработоспособности алгоритма или даже вообще к арифметическим ошибкам типа взятия вещественного корня с отрицательного числа.
Как вы думаете, возможно ли создание такими методами принципиального нового улучшения данного алгоритма в разумное время (которое исчисляется не миллионами лет)? Теоретически это возможно, но на практике мне почему-то кажется что роботам нужно будет «Показать, рассказать, а потом самому за них все сделать»
Мне бы хотелось чтобы это было возможно. Думаю так и есть.
Вот такой план получения новых алгоритмов:
- Воспроизвести создание такого алгоритма через ГА
- Менять начальные условия, что даст доступ к созданию всего класса алгоритмов этого типа
- Расширять базу и условия, что расширит класс находимых алгоритмов.
Первый пункт вызывает много вопросов. Попробую ответить.
Если алгоритм довольно сложный, и интуитивно непонятно как его создать в одночасье, занимаемся декомпозицией. Далее выстраиваем такие условия, чтоб можно было воссоздать самые мелкие функции, затем из них посложнее и так далее. Это и есть "показать и рассказать", от этого не уйти.
Принципиально новый алгоритм не возникнет в вакууме, поэтому мы должны постоянно вбрасывать туда новые и новые задачи.
По аналогии с эволюцией первого порядка, эволюция второго порядка тоже должна быть способна на многое. Но это все манипуляции с синтаксисом. Семантику в результаты таких генераций прийдется вкладывать человеку. И когда человек найдет семантически что-то новое для себя, это можно считать успехом.
По сути вопроса могу сказать вот что: я несколько лет занимался чем-то подобным, тоже было построение правил стратегии торговли при помощи ГП, только довел это до практического применения на реальной бирже на реальных деньгах. То есть это (иногда) действительно работает, но есть огромное количество нюансов. Мне было интересно это прочитать, публикации на эту тему относительно редки, отчасти видимо из-за коммерческой тайны.
Если это открытый проэкт с удовольствием бы поучаствовал
Спасибо за статью!
https://www.mql5.com/ru/forum/192255
Как создать торгового робота с помощью генетического программирования