Купи-продай-навари - бот для биржи Poloniex

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

Принцип работы

Общий принцип работы останется таким же, как и у бота для эксмо (ссылки на другие статьи цикла вы можете найти внизу статьи, над комментариями), но добавлен ряд дополнений - например, можно "из коробки" играть на нескольких валютных парах, выставлять отдельные наценки на каждую пару и т.п.

Вот немного более подробная информация:

Если у кого-то картинки выглядят убого, нажмите правой кнопкой на картинку и выберите "открыть в новой вкладке". Я знаю о проблеме, но пока-что её не решал.

Бот выискивает медианную цену за указанный период, выставляет ордер на покупку с нужной наценкой, после чего ждет его исполнения или отменяет, если прошло много времени. Если ордер на покупку исполняется, бот продает купленную валюту с наваром. Когда вся купленная валюта продана, всё начинается сначала, и так для каждой нужной валютной пары.

Предварительная настройка

В настройках вы указываете сумму, на которую планируете играть, и бот не выходит за её рамки - например, если собираетесь играть на 0.01 Btc по паре BTC_NXT, то бот будет покупать NXT на 0.01, и ему не важно, сколько еще денег на балансе - все излишки просто копятся.

По законам жанра (и с точки зрения SEO) я должен написать об этом подробную, развернутую статью, с кучей разделов, заголовков и всё такое, но, честно говоря, мне лень. Поэтому выкладываю бота, пару слов о том, что можно и нужно поменять и результаты.

Для настройки работы нужно скачать и установить Python (подробности в этой статье), и установить модуль requests (это тоже описано в той же статье).

После этого, нужно скачать бота (вот ссылка на файл bot.py, скачайте его в любую папку), и поменять настройки под себя. 

UPD: Хм, попробовал сам скачать, браузер выдал предупреждение об опасности при скачивании - в общем-то логично. на всякий случай скажу - файл нормальный, вирусов нет и быть не может, качайте смело. Ну или не качайте, ваше право :)

Эти настройки располагаются в самом верху файла:


# ключи API, которые предоставил Poloniex
API_KEY = '' # <------ В эти кавычки вставляем ключ API
# обратите внимание, что добавлена 'b' перед строкой
API_SECRET = b'' <------ Сюда Secret - не убирайте букву b

# Пары, по которым собираемся торговать
PAIRS = {
    'BTC_SC' : {
        'ORDER_AMOUNT': '0.002', # Сколько валюты 1 использовать в ордере ( в данном случае, 0.002 Btc),
        'ORDER_LIFE_TIME': 3, # через сколько минут отменять неисполненный ордер на покупку CURR_1
        'PROFIT_MARKUP_DOWN': 0.001, # Какой навар нужен с каждой сделки при покупке (поверх комиссии)? (0.001 = 0.1%). Можно ставить 0
        'PROFIT_MARKUP_UP': 0.002, # Какой навар нужен с каждой сделки при продаже (поверх комиссии)? (0.002 = 0.2%)
        'MED_PRICE_PERIOD': 15, # За какой период брать среднюю цену (в минутах)

    },
     'BTC_NXT' : {

Реклама:


'ORDER_AMOUNT': '0.002', # Сколько валюты 1 использовать в ордере ( в данном случае, 0.005 Btc) 'ORDER_LIFE_TIME': 3, # через сколько минут отменять неисполненный ордер на покупку CURR_1 'PROFIT_MARKUP_DOWN': 0.002, # Какой навар нужен с каждой сделки при покупке (поверх комиссии)? (0.001 = 0.1%). Можно ставить 0 'PROFIT_MARKUP_UP': 0.002, # Какой навар нужен с каждой сделки при продаже (поверх комиссии)? (0.002 = 0.2%) 'MED_PRICE_PERIOD': 15, # За какой период брать среднюю цену (в минутах) }, }

Тут я для эксперимента играл на две пары - BTC_SC и BTC_NXT, но вы можете добавить новые или убрать текущие, если, например, решите играть на BTC_LSK, то конфиг будет выглядеть так:


PAIRS = {
    'BTC_SC' : {
        'ORDER_AMOUNT': '0.002', # Сколько валюты 1 использовать в ордере ( в данном случае, 0.002 Btc),
        'ORDER_LIFE_TIME': 3, # через сколько минут отменять неисполненный ордер на покупку CURR_1
        'PROFIT_MARKUP_DOWN': 0.001, # Какой навар нужен с каждой сделки при покупке (поверх комиссии)? (0.001 = 0.1%). Можно ставить 0
        'PROFIT_MARKUP_UP': 0.002, # Какой навар нужен с каждой сделки при продаже (поверх комиссии)? (0.002 = 0.2%)
        'MED_PRICE_PERIOD': 15, # За какой период брать среднюю цену (в минутах)

    },
     'BTC_NXT' : {
        'ORDER_AMOUNT': '0.002', # Сколько валюты 1 использовать в ордере ( в данном случае, 0.005 Btc)
        'ORDER_LIFE_TIME': 3, # через сколько минут отменять неисполненный ордер на покупку CURR_1
        'PROFIT_MARKUP_DOWN': 0.002, # Какой навар нужен с каждой сделки при покупке (поверх комиссии)? (0.001 = 0.1%). Можно ставить 0
        'PROFIT_MARKUP_UP': 0.002, # Какой навар нужен с каждой сделки при продаже (поверх комиссии)? (0.002 = 0.2%)
        'MED_PRICE_PERIOD': 15, # За какой период брать среднюю цену (в минутах)
    },

     'BTC_LSK' : {
        'ORDER_AMOUNT': '0.01', # Сколько валюты 1 использовать в ордере ( в данном случае, 0.005 Btc)
        'ORDER_LIFE_TIME': 30, # через сколько минут отменять неисполненный ордер на покупку CURR_1
        'PROFIT_MARKUP_DOWN': 0.002, # Какой навар нужен с каждой сделки при покупке (поверх комиссии)? (0.001 = 0.1%). Можно ставить 0
        'PROFIT_MARKUP_UP': 0.005, # Какой навар нужен с каждой сделки при продаже (поверх комиссии)? (0.002 = 0.2%)
        'MED_PRICE_PERIOD': 50, # За какой период брать среднюю цену (в минутах)
    },
}

Вот так, взял и добавил пару. В верху (ключ словаря BTC_LSK) указал валюту, на которую собираюсь играть.

 'ORDER_AMOUNT': '0.01'  означает, что на создание ордера я не буду тратить больше чем 0.01 Btc, 

'ORDER_LIFE_TIME': 30 означает, что ордера на покупку, которые не выполнились в течении 30 минут будут удалены

'PROFIT_MARKUP_DOWN': 0.002 значит, что при покупке я буду ставить цену на 0.2% ниже вычесленной (это помимо комиссии)

'PROFIT_MARKUP_UP': 0.005 - при продаже купленной валюты планирую получать 0.5% сверху, после вычета комиссии

'MED_PRICE_PERIOD': 50 - цену для покупки/продажи хочу формировать на основе информации о торгов за прошедшие 50 минут по этой паре.

Запуск

Об этом я, кажется, пишу в каждой статье про ботов, ну хотя и ладно.

Мне нравится вариант с запуском через командную строку - запускаете cmd, в ней пишете python путь_к_файлу_bot.py. Ну и Enter потом, конечно.

После запуска у вас в папке создастся файл local.db - туда скидываются все результаты, если вдруг надумаете перенести бота в другую папку, не забудьте скопировать этот файл.

Так же в папке появится файл log.txt, в нём вы найдете подробную информацию о торгах бота.

Результаты

Вот тут врать не буду - я сам не понял (с).

Вот таблица с итогами игры примерно за час (тестировал, настраивал, что-то делал, запускал, останавливал).

В общем, я играл на две пары, на каждую выделял 0.002 Btc - итого 0.004 было в игре, получил 0.00003187 - 0.7% процента от вклада за час. Мне это очень понравилось, позже за день он набил еще больше.

Я воодушевился, начал торговлю уже не на две пары, а на 20 пар, на общую сумму 0.04 BTC. Гонял его месяц. Точнее, как гонял.. Бот крутился на сервере, а я занимался своими делами и иногда посматривал баланс. Итог предсказуем - я не озолотился =) Баланс так и прыгал вокруг 0.04 - то опускался до 0.0396, то поднимался до 0.042.

Так что в итоге я его остановил, и сейчас занимаюсь другим проектом. Долго думал, выкладывать ли бота в открытый доступ - он вроде бы сыроват, да и похвастать нечем. С другой стороны, кто-то может его использовать, разобраться в чем причина такого поведения - и, может быть, озолотится =) Может даже и всем остальным расскажет, что нужно поправить, что бы уверенно идти в плюс. Я, может быть, и сам к нему попозже вернусь и что-нибудь добавлю.

В общем, как говорится, используйте на свой страх и риск)

Всем удачи и процветания!


UPD:

В процессе работы бот пишет информацию в локальную базу данных, откуда её можно в удобном виде выгружать в Excel или или делать нужные выборки, если владеете SQL-запросами.

Что бы просматривать данные, установите программу SQLiteStudio, и откройте в ней файл local.db, который автоматически создается при работе бота. Немного полазив там, вы найдете всю информацию по торговле - какие заказы создавались, как исполнялись и т.п. - примеры на скриншоте:

И немного разбредовки:

1. Поле order_type меняется, при создании ордера на покупку там написано buy, если ордер выполняется и создается ордер на продажу, там пишется sell.

2. order_pair - на какую пару создан ордер

3. buy_order_id - сюда записывается id созданного ордера на покупку

4. buy_initial_amount - сколько изначально планировалось закупить

5. buy_initial_price - по какому курсу планировалась закупка

6. buy_created - время создания ордера на покупку

7. buy_finished - если ордер на покупку выполнен, сюда пишется во сколько

8. buy_cancelled - если ордер на покупку отменен, сюда пишется во сколько

9. buy_final_amount - у вас такого не будет, оно у меня исторически осталось

10. sell_order_id - id созданного ордера на продажу

11. sell_amount - кол-во к продаже

12. sell_initial_price - курс продажи

13. sell_final_price - у вас тоже не будет этого поля

14.sell_created - когда и во сколько создан ордер на продажу

15. sell_finished - когда и во сколько ордер на продажу был выполнен

Теперь про экспорт в Excel:

1. Инструменты-Экспорт

2. Ставим галку на "Одну таблицу"

3. Снимаете галки со всего, кроме данных, и выбираете таблицу orders

4. Оставляете формат CSV и указываете, куда его сохранить.

5. Открываете сохраненный файл в Экселе и делаете с ним, что хотите.

Тэги: