Pull to refresh

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

Я написал своего бота для торгов на бирже 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 исчерпан? ведь время сочетания «успешный набор входных данных + подходящие условия» будет упущено. «Потомство» надо давать срезу как только понятно, что бот успешен.
Балансы для новых ботов берутся за счет балансов «умерших» ботов и части «родителей».

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

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

Так что, приступаю к реализации. По ходу дела буду писать статьи. Я не ищу ни помощников ни спонсоров, просто делюсь своим опытом и мыслями.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.