Проект на обсуждение (Торговля + ГА)

Здравствуйте. Долгое время увлекаюсь торговлей и все это время изучаю всякие механизмы и алгоритмы для создания автоматического торгаша. )))
В последнее время меня наконец то осенила простота генетических алгоритмов. Посмотрел тут очень впечатляющий ролик на эту тему и вот такая пришла мысля:

Так вот создаю популяцию ботов-торгашей.
Каждый бот имеет генотип в виде параметров для индикаторов.
Набор для открытия и набор для закрытия.
Выглядит это так:

int[] genOpen = new int[]{a,b,c}
int[] genClose = new int[]{a1,b1,c1}

Дополнительно добавляю n элементов которые будут определять направление индикаторов.

int[] open = new int[]{q,w,e}
int[] close = new int[]{q1,w1,e1}

в итоге получаем общий генотип бота как массив из 12 чисел.

Далее я им устанавливаю “жизнь” в виде денежного баланса и скармливаю исторические данные.
Каждый убыток уменьшает жизнь. Когда она меньше нуля или не хватает на новую сделку считается что бот умер.

В итоге из выживших я отбираю самаых приспособленных по разным признакам.
И вот тут нужно их скрестить между собой.

Я не понял скрещивать мне нужно именно парами или можно из разных комбинаций выбирать параметры??
И второе я правильно понимаю что при скрещивании я должен просто взять часть генотипа от одного болта и часть от другого, сформировать новый генотип и новый бот-потомок готов??

А новых ботов добавлять туда рандомно чтобы популяцию поддерживать на определенном уровне??

Прошу прощения что так громоздко получилось, но старался максимально подробно и по простому расписать.
Ну вот пока это основные вопросы. Как думаете в правильном направлении иду по части создания генетической модели??

1 лайк

Как-то больше похоже на обучение нейронки или идею Савельева с его зверьком в затончике. На торговлю как-то не очень похоже.
Автоматическую торговлю себе представляю примерно так:
https://www.youtube.com/watch?v=dzdGWZrA9oI

С какой целью производится скрещивание? Если брать только какую то часть от выживших, тогда мутант получится.
Может просто клонировать лучших?

Про скрещивание ничего не слышал. Обычно отбирают наиболее жизне способных и добавляют случайные мутации. Плюс вливание свежей крови. Плюс предотвращение вырождения, некоторые особи должны сохранятся в неизменно виде. Мутации они быстро идут 12 мутаций и ваша особь будет не узнаваемая при таком подходе скрещивание никак не повлияет.

Как думаете в правильном направлении иду по части создания генетической модели??

Так все начинают. Суть проблемы вырождения в том что длина генома слишком маленькая и обучение идет скачками. Считаю что нужно увеличить геном 100 раз и пропускать через свёртку которая уменьшит количество выходных параметров. Под свёрткой я понимаю НС или СЛ. Геном выступает коэффициентами НС и СЛ
НС - Нейронная Сеть.
ЛС - Случайный Лес.

А скрещивание сделал бы как экстраполяцию коэффициентов от одного зверька к другому. Как более плавный механизм улучшения нежели чем случайная мутация.

Задача найти зверка который будет максимально правильно давать сигналы входа и выхода в рынок.
Либо консилиум из нескольких зверьков. ))

А я вот это видел.
image
Да и в примерах в сети на это акцент сделан.

Вот в целом у меня есть еще вопрос. Насколько генетический алгоритм лучше брутфорса? Ведь в данном случае можно поставить перебор всех возможных вариантов индикаторов и потом из общей таблицы найти лучший вариант либо вывести зависимость профита от параметров.
Времени хоть так хоть так занимает тьму.

Эффективен в пространстве большой размерности. Суть в том, что поддерживается одновременный поиск из разных локальных точек. Если говорить именно про скрещивание, то проще когда гены имеют смешанное влияние. Например, набор применяемых или неприменяемых эвристик.

Я писал о том что теория расходится с практикой.

Да и в примерах в сети на это акцент сделан.

Я таких примеров не видел. Но если у Вас есть хороший пример, то следует использовать его. Мой опыт таков, что можно долго пытаться что-то изобрети или повторить. Но так и не добиться нужного результат, когда как проще взять готовый пример с github где уже много налажено и работает как надо.

Сам делал алгоритм отжига. Есть геном состоящий из нескольких коэффициентов.
Случайным образом выбирается интервал и инвертируется порядок коэффициентов. Если тест показывает улучшение то оставляем мутацию. Если нет то возвращаем в исходное. С течением времени допуск на размер интервала уменьшается.

Тем самым алгоритм находи оптимум.

А как Вы 12 коэффициентов переберёте? Я полный перебор делал для 15 бит. Для перебора 12 int это много. Можно МНК или SVM использовать.

Перебор возможен далеко не всегда. Перебрать то не достаточно Ваша задача научиться предсказывать для наперед неизвестных входных данных.Как говорят у Вас задаче на регрессию, а не на классификацию.
Ваш алгоритм должен предсказывать результат на неизвестных данных.
Поэтому датасет делят на 3 выборки: обучающая тестовая и проверочная.
На тестовый Вы проверяете качество предсказания и корректируют коэффициенты метода, а на проверочной уже сдаете окончательный результат.

Если Вы будете уменьшать количество коэффициентов, до малого числа то Вы придете к неспособности различить классы.Не различая события Вы не сможете верно предсказывать. Поэтому ограничивать коэффициенты 4 штуками не следует. И много брать нет смысла но теории нет и это устанавливается опытным путём.

П.С. Мои переводы https://yadi.sk/d/npKThHMUl13tWg

Ну немного не соглашусь. Как бы индикаторы это отображение текущей ситуации. Они сами порождают события типа пересечений или уход в какую либо зону. От этого и срабатывает триггер.
Предсказания это что то из области магии ))) В современных реалиях сложно спрогнозировать такую систему как рынок. На нашем уровне нету доступной и актуальной информации.

Так тут очевидно что параметры допустим скользящих средних не сильно оказывают влияние при изменении на 1. А при размерах в 1000 уже практически прямая линия. Так что диапазон для них достаточно небольшой. А если перебирать с шагом 3 или 5 то еще меньше.
За пару суток я думаю переберет все возможные результаты. Ну даже если и за неделю. ГА ведь тоже достаточно долгие по времени. К тому же если им историю задать за год хотя бы то это вообще невероятно долго.

Вообще у меня еще теплится идея что возможно состряпать систему которая сама будет подстраиваться под входные данные. Чтобы сам рынок определял точки входа и выхода.
Сейчас паралельно НС ковыряю … но там ничего путного не выходит. Сколько бы долго они не учились и какие бы конфигурации я не собирал. (((

ПС. Спасибо за ваши коды. Но RandomForest сказал что не хватает памяти. На компе с 28 Гб оперативы. Печалька…