ROBO_Trading

Ботоводам про BitMEX

Обучение
ROBO_Trading Обновлено   
BITMEX:XBTUSD.P   Bitcoin
Идея может быть полезна только для тех кто разрабатывает робота.

Сделал робота на своей стратегии Fast RSI 1.6, теперь стабильно работает наконец. При этом наступал много, и могу поделиться координатами граблей.

Тестнет

Гораздо лучше делать робота сначала для testnet.bitmex.com. Там всё ровно тоже самое, но это как "демо-счет". Про создании аккаунта даром дают 0.1 фейковых BTC, что достаточно. После того как бот готов и не глючит, достаточно просто поменять в коде адрес testnet.bitmex.com на www.bitmex.com - и всё сразу работает. Прием позволяет тестировать не теряя денег на глюках. Для того и сделано по сути.

Спам

Если размер ордера меньше 0.0025 BTC, то сервер помечает аккаунт как "спамер", и не дает создавать ордера. Удалить и создать новые ключи - не поможет. Ярлык "спамер" будет держаться сутки. И на тестнете тоже. Поэтому в коде для теста я указывал размер ордера 100 долларов или более. Ордеры меньше 100 долларов не должны появляться. Спам-фильтр не срабатывает если маленьких ордеров было мало, только когда много. Отсюда ложное впечатление якобы "можно и по баксу". Не можно.

Свечи

Команда GET /trade/bucketed

Ей можно получать свечи разного заданного ТФ. ИМХО лучше взять 5м свечи, так как на ТФ меньше 5м всё равно ничего нормально работать не будет. Нельзя получить свечи 15м, но можно их собрать самому. Тут вроде не сложно даже. Хотим 15м свечки, значит надо выбрать 3 свечи, посмотреть открытие первой и закрытие последней - получается 15м свеча. Можно и 45м так собрать. Максимум 15м-свечи - это максимум из максимумов 3 свечек. Так же с минимумом. Но для стратегии что я кодил минимумы/максимумы не нужны.

RSI

Закодить его сложно. В мануалах в сети описывают формулу расчета либо с EMA, либо со SMA. Тогда как и встроенный индикатор RSI на TradingView и моя версия используют RMA. Она же Rolling Moving Average. Следующая грабля еще забавнее - в мануале TradingView описана формула расчета RMA и она неправильная там! :) По идее можно использовать EMA вместо RMA, так как в итоге значения почти одинаковые, но вот для точности я всё же сделал на RMA.

Котировки

Котировки на Bitmex и Testnet отличаются. Котировки на Bitmex и на TradingView с биржи BitMEX тоже (!) слегка отличаются. Поэтому нельзя проверить правильно ли делается расчет индикатора по сайту TradingView. Зато на самом сайте бирже можно включить индикатор RSI и поменяв ему период на 7 сравнивать результаты - так совпадает у меня. Отличаются котировки очень редко, получается TW иногда "пропускает" некоторые трейды и цена закрытия свечи может быть на пару баксов меньше/больше чем на бирже.

Антикомиссия

Чтобы всегда получать антикомиссию нужно сделал ордеру "пассивный режим", тогда он либо получает антикомиссию, либо вообще не сработает. А так как он может не сработать, значит надо его перевыставлять. Так же лучше использовать команду, которая меняет цену ордеры (двигает его в стакане), а не отменять и создавать новый каждый раз, что было бы медленнее:

PUT /order
Amend the quantity or price of an open order.

Алгоритм

Пробовал несколько алгоритмов как делать, идеально и без сбоев стал работать вот такой. От языка кода это не зависит.

1) Должна быть переменная типа ПозицияПлан и переменная ПозицияФакт. То есть какая позиция планируется в долларах (может быть отрицательная, значит шорт), и какая сейчас есть. Один модуль бота отвечает за сигналы и делает расчет позиции, типа какая она должна быть сейчас с учетом сигналов. Этот модуль не реагирует на фактическую позицию. Это важно так как прошлый ордер мог не сработать до сих пор - в этом случае цифры разойдутся, далее какой-нибудь сбой. И второй модуль бота, который приводит ПозицияФакт и ПозицияПлан в соответствие.
Комментарий:
Второй модуль запускается если если позицияФакт и позицияПлан не равны. Он работает до тех пор пока они не станут равны. Рассчитывается сколько нужно купить/докупить или продать чтобы они стали равны, создает ордер (если ордера нет), или двигает ордер меняя цену (если ордер уже есть). Так же стоит сделать проверку на количество ордеров, если ордеров почему-то два (изредко так бывает у меня), то нужно отменить оба и создавать новый. Иначе опять сбой будет.

При таком подходе может случаться такая ситуация: из-за задержки по времени ордер может сработать, а бот эту инфу еще не успел получить, поэтому создает уже второй ордер и он тоже срабатывает. Так если планировалось купить на 1000 долларов может купиться на 2000 по ошибке.

И эту проблему тоже решает этот подход с двумя переменными позицияФакт и позицияПлан. Раз уж куплено 2000, а не 1000 как планировалось, то модуль тут же начнет продавать лишнюю 1000. Это не страшно, так как он антикомиссию за это еще получит, поэтому это чаще к прибыли даже приводит чем к убытку.

Перегрузка

Иногда биржа сильно перегружена и не дает выставить ордер до нескольких минут. Для часового ТФ это не особо проблема, но для более мелких это слегка портит результат. Подход что я предложил выше тоже решает эту проблему - модуль отвечающий за ордеры должен привести факт и план в соответствие, и не прекращать работу пока переменные не станут равны. Таким образом, бот будет до победного выставлять ордер, пока он не выставится наконец. Минус в том что цена в итоге может далеко уйти и вход окажется менее выгодным. Но редко очень.

Лот

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

1) Ими не получится всегда входить с антикомиссией

2) Свою ошибку в коде я быстро найду и исправлю, а их ошибку - нет. Гораздо спокойнее со своим софтом.

3) Любые решения что есть в сети предполагаю использование только для одного аккаунта, а мне вообще то надо для сотни аккаунтов. Так что в любом случае самому всё придется делать.
Комментарий:
Аккаунты

Если у Вас получилось создать робота, он работает, и мучает соблазн включать огромное плечо, то образуется риск полностью слить депозит. Это риск можно легко очень убрать, если включить голову. Решение крайне простое:

Создаете 3 аккаунта, на каждом из них запускаете своего робота с разными таймфремами, типа 1ч, 30м и 15м. Если сольется, то сольется один, а не все одновременно. Периодические делаете ребаласнировку между этими тремя аккаунтами (то есть выравниваете капитал до одинакового раз в месяц например). Ну и само собой если один из аккаунтов всё же слился, то значит обязательно нужно снизить у него кредитное плечо.

В идеальной ситуации роботы должны быть разные, разные стратегии, а не одна.

А в алгоритмических хедж-фондах с Уолл-Стрит работают целые сотни роботов. По сути там 5-20 эффективных стратегий, но они берут одну стратегию и запускают её на разных ТФ и чуть с разными настройками. Так у них есть диверсификация по таймфреймам, по параметрам, по активам, по стратегиям, по биржам, и даже по странам (политически риски снижают).

В следствии этой зашкаливающей диверсификации хедж-фонд Virtu имел всего один убыточный день за 6 лет работы! Но это тысячи роботов и тысячи активов в разных странах мира, что конечно одному человеку не под силу. Но можно же команду собирать, когда будут на неё достаточные средства. Для меня этот Virtu некий пример для подражания. Зачем изобретать велосипед, когда можно брать пример с успешных? Раз уж они пришли к выводу что армия роботов это отличное решение, а потом сделали на этом миллиарды, значит скорее всего это правильное решение, и чужой успешный опыт разумно скопировать. Так что я вот тоже хочу хотя бы десятки разных роботов, торгующих разными криптовалютами. С разными таймфреймами, с разными параметрами, на разных биржах, и из разных стран. Типа диверсификации много не бывает :)
Комментарий:
658 строк кода у меня получилось. Для Fast RSI 1.6. Копию полную сделал стратегии с TW + двигает ордеры чтобы антикомиссию ловить. Думаю явно можно было ужать и получить менее 658 строк, но как бы пофиг пусть так будет :) Будучи большим изощренцем и 1с-ником с 10-летним стажем сделал всё на 1С-ке, так как мне так быстрее и удобнее.

Отказ от ответственности

Все виды контента, которые вы можете увидеть на TradingView, не являются финансовыми, инвестиционными, торговыми или любыми другими рекомендациями. Мы не предоставляем советы по покупке и продаже активов. Подробнее — в Условиях использования TradingView.