Как и обещал, опишу алгоритм работы бота, про которого писал предыдущих статьях:
LiveCoin бот на Python 3. Первый отчёт
Итак, что нужно для того, чтобы начать торговлю?
1. Определяем биржи для торговли
Биржи должны соответствовать следующим критериям:
А) удобный и понятный API для обоих бирж
Б) Возможность обращаться к API как можно чаще, многие биржи банят ip при попытках слишком частого обращения к сайту, дабы избежать DDOS атак
В) У ведущей биржи, к которой мы будем обращаться за уточнением цен должен быть достаточно высокий оборот, намного выше по данной валютной паре, чем на второй бирже
Г) Биржа, на которой будут непосредственно осуществляться сделки, должна иметь как можно меньшие комиссии за проведение операций, большие стаканы и не совсем маленький оборот, иначе можем застрять в щиткойнах навсегда
Ну и главное – цены на биржах для определённой нами валюты должны коррелировать между собой, обычно так и происходит, цена валюты на мелких биржах следует за ценой на крупных с некоторой задержкой.
В качестве ведущей биржи был выбрал Bittrex, торги бот проводил на ламповом LiveCoin
2. Проводим технический анализ и выбираем валютную пару
В плане принципа подбора алгоритма торговли для криптобота я полностью солидарен с @primus и его мнением, высказанным в этой статье.
Посему, алгоритм моего бота не подразумевает в своей основе никакого сложного технического анализа, он не рисует треугольники и сложные фигуры по типу человечков с плечами, не проводит сложные астрологические расчеты, поэтому умеет торговать только на флэте. Но, судя по тестам, это получается у него вполне сносно.
Для начала торговли он должен определить, что на данный момент времени торги на валютной паре соответствуют нужному состоянию.
Как же определить что валюта во флэте?
Рассмотрим график средней цены любой валютной пары на Bittrex:
Бот каждую минуту обращается к бирже и записывает в базу данных актуальную рыночную цену, время и дату.
Перед началом торговли он должен провести анализ того, что валюта пригодна для торговли .
Для этого необходимо рассмотреть промежуток времени Δt = t2-t1
Пусть Δt = 4 часа, тогда мы имеем 240 точек со значением стоимости валюты Определим коэффициенты уравнения средней линии методом наименьших квадратов. Алгоритм легко гуглится в интернете, поэтому описывать его не имеет смысла.
Получаем прямую
с = kt + b
где k это тангенс угла наклона касательной, т. е. tg α.
Вычисляем arctg и если |arctg(k)| < 0,17 всё нормально и отклонение средней линии не превышает 10 градусов
Соответственно, если график растёт или падает слишком быстро, то данное условие не выполняется и бот в этом случае либо вообще не начинает торговлю, либо ставит максимально возможный аск и выводит всё в биткойны
3. Строим линии поддержки
Так как в любой момент времени промежутка Δt нам известно среднее значение стоимости:
с = kt + b
Простым перебором значений записанных в БД мы можем вычислить точки максимального и минимального отклонения от прямой среднего значения стоимости Δtmin и Δtmax.
Далее запоминаем координаты данных точек и вычисляем коэффициенты для уравнений прямых линий поддержки
С1 = k(t-tmin)+Cmin
С2 = k(t-tmax)+Cmax
Бот увеличивает полученные значения на 10%, дабы не реагировать на незначительные изменения максимальных и минимальных значений. Такими образом создаются особые warning зоны (на графике отмечены светло-голубыми областями).
Теперь мы можем предусмотреть защиту от резкого изменения курса, и если цена выйдет за пределы коридора, отправляется сообщение в телеграм, а там уже должен подключиться человек. Если курс падает ещё, и выходит из warning зоны то бот продает всё в BTC
Такое поведения бота мы будем наблюдать в точке t3 на нашем графике
4. Переходим непосредственно к торговле
Обращаю Ваше внимание на то, что в предыдущих пунктах я описал поведение бота, который анализирует курс валют на Bittrex. Это очень важно, так как данный анализ поможет нам проводить успешные сделки на Livecoin.
Произведём наложение графика курса валют с Livecoin на график Bittrex
Как показывает практика, спреды на LiveCoin гораздо больше, а колебания курса сильнее.
Поэтому бот, покупает либо продает валюту каждый раз, когда курс на LiveCoin превышает, либо близок к курсу коридора поддержки на Bittrex
Так как комиссия на LiveCoin составляет всего 0,18 процентов этого достаточно для того, чтобы бот работал в плюс.
Всё. Такой вот алгоритм.
Пока на Livecoin наблюдается такая вот картина, всё идёт по плану и бот торгует в плюс:
Но тесты продолжаются и следующий отчёт о работе бота будет уже через неделю.
Возможно таки решусь и опубликую свой ужасный код, полный костылей и велосипедов. Но это, если появится лишнее время и мотивация).
Если Вам интересны мои посты по данной тематике, можете подписаться на мой блог, дабы не пропустить продолжение.
А код будете публиковать?
Опубликую, но не сейчас. Там жесточайший говнокод. Многие, увидев это нечто, меня засмеют) Но, после проведения второго альфа-теста, когда прикручу к flask нормальный модуль авторизации возможно опубликую ссылку на веб-сраничку мониторинга, думаю это будет безопасно.
Отличный пример, спасибо за алгоритм.
У меня вопрос: вы вручную выбираете торговую пару для бота (если да - то по каким критериям) или бот торгует сразу на всех парах, что есть одновременно на Биттрексе и LiveCoin?
Сейчас бот может торговать на любой валютной паре на LiveCoin, необходимо лишь прописать валидные имена валют Livecoin и Bittrex в вебморде, для того, чтобы бот мог корректно обращаться к API данных бирж.
При проведении испытаний выбирал валюту вручную, взял STEEM исходя из относительно большого объёма торгов на LiveCoin и высоким спредам. Ну и в период теста валюта не росла и не падала. Средний курс STEEM за 4 дня теста изменился всего на 3%. Бот работал четыре часа собирая данные, после чего вычислял коэффициенты для уравнений средней линии и линии поддержки и начинал торговлю.
Сейчас идёт процесс доработки, пытаюсь модернизировать бота, чтобы он собирал данные со всех валют, которые есть и на Livecoin и Bittrex, далее выводил на отдельную страницу список тех валют, которые находятся во флете, считал максимальное отклонение от среднего значения. Но тут нужно учесть, что на LiveCoin многие кошельки отключены и курсы многих валют находятся в свободном плавании и торгуются по каким-то странным никому не понятным ценам. GOLOS тому пример.
Если допишу, то попробую торговать на куче валютных пар мелкими сделками.
А почему нельзя было сделать анализ на основе истории сделок моментально?
Возможно тут больше вопрос кривизны моих рук, но с Bittrex я не смог получить информацию о последних сделках за временной период превышающий один час
Метод getmarkethistory не дает данных более чем за час?
У него есть параметр count, который по умолчанию 20. А может принимать значение 100 Насколько я понял из кода библиотеки на гитхабе
Эм, спасибо)
Спасибо за развёрнутый ответ. С интересом буду следить за вашими публикациями.
@gmaster Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@gmaster Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
@gmaster Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
rubin, rous
Поэтому я тоже проголосовал за него!
Узнать подробности о сообществе можно тут:
Разрешите представиться - Кит Добрый
Правила
Инструкция по внесению Инвестиционного взноса
Вы тоже можете стать Инвестором и поддержать проект!!!
Если Вы хотите отказаться от поддержки Доброго Кита, то ответьте на этот комментарий командой "!нехочу"
@gmaster Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.