К теме биржи Poloniex я уже несколько раз обращался в других статьях цикла, да и калькулятор валюты на сайте работает, в том числе, и с этой биржей. Пожалуй, пришло время написать бота для торговли и что-то с этой биржи поиметь.
Общий принцип работы останется таким же, как и у бота для эксмо (ссылки на другие статьи цикла вы можете найти внизу статьи, над комментариями), но добавлен ряд дополнений - например, можно "из коробки" играть на нескольких валютных парах, выставлять отдельные наценки на каждую пару и т.п.
Вот немного более подробная информация:
Бот выискивает медианную цену за указанный период, выставляет ордер на покупку с нужной наценкой, после чего ждет его исполнения или отменяет, если прошло много времени. Если ордер на покупку исполняется, бот продает купленную валюту с наваром. Когда вся купленная валюта продана, всё начинается сначала, и так для каждой нужной валютной пары.
В настройках вы указываете сумму, на которую планируете играть, и бот не выходит за её рамки - например, если собираетесь играть на 0.01 Btc по паре BTC_NXT, то бот будет покупать NXT на 0.01, и ему не важно, сколько еще денег на балансе - все излишки просто копятся.
По законам жанра (и с точки зрения SEO) я должен написать об этом подробную, развернутую статью, с кучей разделов, заголовков и всё такое, но, честно говоря, мне лень. Поэтому выкладываю бота, пару слов о том, что можно и нужно поменять и результаты.
Для настройки работы нужно скачать и установить Python (подробности в этой статье), и установить модуль requests (это тоже описано в той же статье).
После этого, нужно скачать бота (вот ссылка на файл bot.py, скачайте его в любую папку), и поменять настройки под себя.
Эти настройки располагаются в самом верху файла:
# ключи 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. Открываете сохраненный файл в Экселе и делаете с ним, что хотите.