Торговые боты как биосистема

Я написал своего бота для торгов на бирже bittrex через API с нуля. php+MySql. В части статей опишу сложности, с которыми столкнулся, как их решил, и что осталось нерешенным.

2 бота реально торгуют. Еще 16 виртуально. В условиях без «катастроф» (типа валюта перестала существовать и теперь стоит 0, или биржа накрылась) и при той волатильности что есть сейчас — прибыль около 0,05-0,25% в день.

Полтора года я «вынашивал» безубыточный механизм торговли на бирже. Интерес возник спортивный — мой хороший друг решил «играть» на Форексе, а я начал доказывать ему, что эта затея не из лучших. Но поскольку мы были аспирантами, то весь процесс доказательства был сам по себе очень занимателен. Началась битва стратегий в модельных условиях. Вадим фанат нейронных сетей и программирует на Перле, я на то время строил модели в Экселе (потом понял, насколько это было сложно по сравнению с php). У нас были очень нестандартные алгоритмы — мы, биологи, мыслим немного не так, как технари. В итоге он продолжил обучать свою нейронную сеть, а у меня родился алгоритм «безубыточности». Почему в скобках — именно для Форекса он не подошел и сваливался в минус. Причина — драконовское правило снятия комиссии за незакрытую позицию.

Тут по-подробнее. «Биржа» Форекс и ей подобные — это вовсе не биржи, потому что на биржах совершаются покупка и продажа. После сделки покупатель имеет «товар» а продавец «деньги» и могут ими распоряжаться. На форекс-подобных «биржах» реально ничего не покупается и не продается. А открываются и закрываются позиции. То есть это как ставка на скачках: ты даешь 10 долларов дяде, ставишь на номер 3 и если пришел 3 ты получаешь назад 20 долларов; если номера 2 или 4 — дядя вернет 5 долларов; если номера 1 или 6 — он тебе ничего не вернет. Приближенно: «Дать дяде деньги» — это положить деньги на счет. «Открыть позицию» — сделать ставку. «Закрыть позицию» — это финиш, здесь сам выбираешь когда. А номера лошадей — курс валютной пары.
И вот ситуация, что «а вдруг через пару минут номер 3 вырвется вперед?». Всего-то надо подождать. И вот тут дракон-дядя говорит, что за каждые 24 часа ожидания забирает из твоей ставки 1 доллар. Поставил 10 баксов, подождал 10 дней — и сидишь гол как сокол.


«Биржи» криптовалют. Очень похожи на реальные биржи, и хотя им 100 лет в обед, я узнал о них совсем недавно и вспомнил о своем алгоритме. И он дал не только «ноль» но и маленький процент прибыли. Бот написан за 2 недели, 480 долларов вложено на биржу, честно заработал 4 доллара за несколько дней при неудачно выбранных 2х парах и при обороте в около 5500$. Что дальше? Пока что мысли биолога, которыми делюсь. Цель абсолютно прозрачна — чтоб деньги сами зарабатывались.

Аналогия биосистемы.
Имеем ЛАМП; алгоритм, который торгует, например в паре BTC-ETH, закреплен за конкретным АПИ кеем на бирже, написан на php, использует 2 собственные БД мускула, самозапускается «ссыланием» сам на себя в конце скрипта (с кроном намучился и отказался).

Имеем входные данные (набор переменных) для алгоритма, такие как например «процент изменения курса для совершения сделки», «какой процент от текущей суммы продавать/покупать», и пр.

Так вот, этот набор переменных влияет на доходность бота. И не существует «идеального набора», потому что в зависимости от рынка всегда лучше тот или другой «набор». Поэтому я решил писать «живых» ботов, которые рождаются, размножаются (причем спариванием) и умирают.

Секреты алгоритма выдавать не буду, но он основан «наоборот» — более скупает за-дешево, чем продает за-дорого. У каждого бота есть свои два начальные баланса BTC и ETH. Итога у бота два: или он скупит весь BTC или скупит весь ETH. То есть где-то баланс окажется 0.

Если бот «слил» все BTC и набрал ETH — он «умирает». Может быть сделать срок жизни ограниченным, а может и нет, и вести себя по алгоритму «спячка».
Если бот наберет все BTC а баланс ETH окажется ноль — то бот «сработал эффективно», принес прибыль и «размножается».
Размножение это когда два «успешных» бота обмениваются «набором входных данных» также как при коньюгации. То есть «набор вход. данных» — своего рода ДНК.
// Зачем «размножаться» после того как весь ETH исчерпан? ведь время сочетания «успешный набор входных данных + подходящие условия» будет упущено. «Потомство» надо давать срезу как только понятно, что бот успешен.
Балансы для новых ботов берутся за счет балансов «умерших» ботов и части «родителей».

Все! Получилась популяция. Ее жизнеспособность зависит от алгоритма (часть которого тоже может быть разной и записана в «ДНК») и набора начальных констант. «Биомасса» — это сумма всех балансов. Она, по идее, должна расти — она и есть нашей прибылью. А главное — естественный отбор и постоянная адаптация. Прям колония амёб получилась, смахивает на «Матрицу».

В заключение скажу, что принцип «новое это хорошо + естественный отбор» зарекомендовал себя наилучшим образом. Без какого-либо интеллекта, чисто механически. Миллионы лет жизни на нашей планете — тому подтверждение.

Так что, приступаю к реализации. По ходу дела буду писать статьи. Я не ищу ни помощников ни спонсоров, просто делюсь своим опытом и мыслями.
Метки:
торговые роботы, торговля на бирже, биржа криптовалюты, биоинформатика