Бот для Binance

Введение

В этой статье представлен простой бот для торговли на бирже Binance.

Бот создает ордер на покупку, основываясь на средней цене из указанного количества предложений на покупку, после чего отслеживает его. Если ордер не выполнен в течении определенного количества времени, ордер отменяется. Если ордер исполнен, выставляется ордер на продажу с указанным профитом. После исполнения ордера на продажу торговля идет по новому кругу.

Поддерживается торговля по нескольким парам, по умолчанию бот работает с комиссией BNB, но поддерживается так же торговля с обычным видом комиссии.

Об особенностях торговли

Цены и объемы

Binance, в отличии от многих бирж, жестко регламентирует размеры лотов и порядки цен. Нельзя купить произвольное количество валюты по произвольному курсу - для каждой пары заведены ограничения, которых необходимо придерживаться при создании ордера.

Существует шаг цены – например, для пары NEOUSDT цена должна быть кратной 0.00100000. Нельзя выставить ордер по цене, 0.1234 – можно либо 0.123, либо 0.125.

Существует шаг продаваемых/покупаемых монет – например, для пары NEOUSDT шаг объема 0.001 – поэтому не получится продать или купить 123.45678 – можно либо 123.456, либо 123.457.

Ну, и как везде, нельзя создавать ордера меньше указанного объема.

Эти ограничения находятся можно получать через api-метод exchangeInfo (подробности о работе API Binance тут), нужная информация находится в разделе filters по каждой паре. Для цены это tickSize, для объема stepSize в соответствующих структурах данных.

Бот учитывает эти ограничения, но обратите внимание, как меняется цена торгов:

Допустим, вы собираетесь торговать на 11 USDT.

Бот получает цены из стакана – например, 5 цен - [118.753, 118.750, 118.730, 118.712, 118.704]. Берет среднюю -  118,7298. Т.к. минимальный шаг цены 0.001, то берется цена 118,729 (в нижнюю сторону).

После этого бот вычисляет количество валюты, которое можно купить по этой цене – делит 11 USDT на 118,729, получает 0,092648. Т.к. минимальный шаг по монетам 0.001, то выбирается количество 0,092.

В итоге бот покупает 0.092 NEO по курсу 118,729 – и итоговая сумма торгов составит 10,923068. Это меньше, чем указано в настройках, но бот вынужден подстраиваться под требования биржи.

При продаже бот будет продавать так, чтобы получить 10,923068 + нужный процент профита.

Комиссии

У бинанса своя система взимания комиссии. Точнее, их две. По умолчанию, используется такой вид комиссии – неважно, по какой паре вы торгуете, комиссия списывается с вашего счета в валюте BNB. BNB – это собственная валюта Binance, подробнее я расскажу о ней отдельно, но суть такая:

Вы, например, торгуете NEO-USDT. Совершаете покупку по курсу X, рассчитывая купить Y монет NEO и потратить Z USDT. Вы выставляете ордер, он исполняется, и вы получаете Y монет NEO, потратив Z USDT. Вы, как бы, ничего не потеряли на этих торгах – но с вас списалось S монет BNB.

В общем-то, это хорошо – потому что Binance даёт скидку. Оплачивая комиссию через BNB, вы платите на 50% меньше. Теоретически, если комиссия 0.1%, то оплачивая комиссию таким образом, вы платите 0.05% с каждой сделки. Бот рассчитан в первую очередь на такую комиссию, и рекомендуется использовать именно её. Если вдруг вы хотите торговать с обычным видом комиссии, то зайдите в свой профиль и переключите флажок:

После этого в боте нужно будет поменять переменную

USE_BNB_FEES = True

На

USE_BNB_FEES = False  

Правда, я не вижу, зачем бы вам это делать. В любом случае, если вы раньше не торговали на Binance, то первым делом нужно прикупить немного BNB. Прикупить, и пусть лежат. Если вы, тем более, будете торговать с базовой парой BNB, вам это будет на руку.

Как лучше пользоваться ботом

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

Такой вывод вы можете сделать, либо используя индикаторы, либо новости – например, если валюту добавили на биржу, скорее всего она первое время будет расти. Если IBM решил вложиться в Etherium, скорее всего эфир будет расти. Если MACD и RSI показывают сигналы к покупке, скорее всего будет расти, и т.п.

Выбрав пару для торгов, вы останавливаете бота (если запущен), и добавляете пару в конфиг, вот так:

"""
    Пропишите пары, на которые будет идти торговля.
    base - это базовая пара (BTC, ETH,  BNB, USDT) - то, что на бинансе пишется в табличке сверху
    quote - это квотируемая валюта. Например, для торгов по паре NEO/USDT базовая валюта USDT, NEO - квотируемая
"""
pairs = [
     {
        'base': 'USDT',
        'quote': 'BTC',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 11,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'USDT',
        'quote': 'NEO',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 11,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    }
]

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

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

Если вы отменили ордера или что-то еще сделали на бирже, но бот «запомнил» и теперь проверяет несуществующие ордера, у вас есть два варианта:

  1. Удалите файл binance.db из папки с ботом. Это вынудит бота начать всё с чистого листа, и он начнет работать с нуля по всем парам из конфигурации. Открытые ордера на бирже пропадут из его надзора, и вам нужно будет разрешить их судьбу самостоятельно.
  2. Если вы не хотите терять открытые ордера по другим парам, то откройте файл binance.db с помощью программы SQLiteStudio, Вы запустите программу, добавите базу данных через обзор, там откроете таблицу orders и удалите оттуда только нужный ордер. Кстати говоря, т.к. бот записывает все свои покупки и продажи, с помощью этой программы вы можете выгружать историю торгов бота в Excel и анализировать.

Реклама


Установка и запуск

  1. Зарегистрироваться на Binance (если еще не сделали)
  2. Пополнить баланс
  3. Убедиться, что на балансе есть BNB (если нет, докупить чуток)
  4. Получить API-ключи (Account-API setting). Потребуется включить двухфакторную авторизацию, я советую использовать SMS, но можно и Google Authenticator.
  5. Установить Python версии 3.6 и выше. Прямую ссылка на скачивание я не указываю, т.к. к моменту прочтения статьи все может измениться, вам нужно зайти на официальный сайт по ссылке https://www.python.org/downloads/, скачать и установить Python 3.6 и выше (кнопка слева). При установке поставьте все галочки. В идеале, выберите расширенный режим установки (advanced) и поставьте все галки там – нужны будут права администратора.
  6. Скачать архив с ботом.
  7. Распаковать в любую директорию на компьютере
  8. Запустить файл setup.bat – установятся нужные модули (для надежности, запустите и так, и от имени администратора)
  9. Открыть файл binance_bot.py в текстовом редакторе и прописать API-ключи и настройки (об этом ниже)
  10. Запустить файл run.bat – запустится бот и начнет зарабатывать деньги.

Остановить бота можно закрыв окно крестиком.


Реклама


Настройка

Настроек не так много, в API_KEY и API_SECRET нужно прописать ключи, которые вы получили на бирже.

В пары нужно прописать соответственно пары, на которые планируете торговать, максимальную сумму, которую планируете тратить, и желаемый процент прибыли. С этим есть некоторый момент, т.к. вы платите комисиию BNB. Я советую ставить 0.003 (0.3%) и выше, но если у вас есть возможность дешево получать BNB, то можно и меньше.

BUY_LIFE_TIME_SEC – через сколько отменять ордер на покупку (если он не исполнен), в секундах.

STOCK_FEE – комиссия биржи, если вдруг решите торговать без BNB.

USE_BNB_FEES = True – если торгуете с BNB, False – в противном случае.


Реклама


ВСЁ!

Я гонял этого бота несколько дней, меня не забанили, я немного увеличил количество USDT – так что я со спокойной душой передаю вам бота и его исходный код. Вы можете модифицировать его под свои нужды, или обратиться за доработкой.

Я желаю вам хороших заработков, если в процессе эксплуатации будут выявлены какие-то проблемы, или возникнут вопросы, смело пишите в комментарии или лично мне, контакты есть в профиле.


Это статья из цикла "Популярно о бирже"
Все статьи цикла:

Последнее изменение:

Не забудьте рассказать друзьям об этой статье.
Чтобы поддержать ресурс Bablofil достаточно просто поделиться с друзьями этой статьей в социальных сетях. Каждый репост - это самая высокая оценка качества материала. Спасибо, что читаете этот блог.



Комментарии
14.02.2018 23:57:51
архив с ботом не доступен... сервер отвечает 404...
ПроголосоватьПроголосовать
0 0
15.02.2018 04:41:53
у меня так же сервер не отвечает
ПроголосоватьПроголосовать
0 0
15.02.2018 06:44:06
Спасибо, обновил ссылку
ПроголосоватьПроголосовать
0 0
15.02.2018 14:14:08
Добрый день Андрей!
Внимательно слежу за ваши ботами. Визуально выделил три стадии эволюции:
1. Простой бот
2. С индикатором
3. С индикатором и плавающей ценой продажи.
Пробовал все три вида + небольшие доработки. У всех трёх ботов есть общий недостаток - возможность зависания на верхах. Связано это с тем, что прибыль фиксируется на продажи с учётом двух комиссий за покупку и продажу. Для этого нужен хороший тренд вверх.
Есть идея - сделать бота с индикатором и закладывать комиссию и в покупку и продажу + прибыль. При определении цены покупки/продажи отталкиваться от предыдущей цены сделки + комиссию + прибыль. Соответственно тренд на повышение/уменьшение нужен будет меньше. Интересует ваше мнение на этот счёт. Не собираетесь ли вы реализовать нечто подобное?
P.s. спасибо вам за выложенных ботов.
ПроголосоватьПроголосовать
0 0
15.02.2018 15:46:11
Добрый день.
Самый первый бот для Эксмо торгует именно по такой логике - он снижает цену при покупке, делая покупки реже, но зато не так сильно завышает цену продажи, т.к. она уменьшается на размер комиссии.
Кому-то это нравится, кому-то нет. Кто-то хочет покупать по цене продажи, кто-то готов торговать до упора, а последний лот продавать в минус. Лично мне нравится, но я стараюсь держать код максимально простым, что бы каждый мог разобраться, а иногда даже достичь желаемого, поправив всего пару строчек.
ПроголосоватьПроголосовать
0 0
15.02.2018 16:24:38
В первом боте опять же закладывается логика продажи включая две комиссии и навар. Что опять приводит к рискам застрять на верхах (купили чуть дешевле при активном падении). А я говорю о возможности брать последнию сделку с нее брать цену. Новая цена следующей сделки = цена последней сделки + процент комиссии за одну операцию + навар. С учётом индикаторов такой бы бот работал более сбалансировано. Как думаете?
ПроголосоватьПроголосовать
0 0
17.02.2018 00:38:48
допустим валюта 'base': 'BTC'   = программа не работает со значением менее 1, например 0.00337656... т.е. торговать имея сумму менее 548 000 р. по текущему курсу, не возможно...
ПроголосоватьПроголосовать
0 0
17.02.2018 10:20:18
Такое могло быть на некоторых парах, сейчас изменил алгоритм и обновил архив с ботом, скачайте по новой.
Проверил, торгуя по паре BTCXVG на макс. сумму 0.0015BTC. Создался ордер на покупку по курсу 0.00000764 на 196 XVG на сумму 0.00149744, потом прошла продажа 196 XVG по курсу 0.00000768 на сумму 0.00150528
ПроголосоватьПроголосовать
0 0
17.02.2018 19:52:48
при запуске run выдает такой текст, питон установлен

"python" не является внутренней или внешней
командой, исполняемой программой или пакетным ф
Для продолжения нажмите любую клавишу . . .
ПроголосоватьПроголосовать
0 0
18.02.2018 06:39:06
Переустановите питон, и поставьте вообще все галочки, даже зайдите в расширенную установку и там поставьте тоже, все заработает.
Если вкратце, питон должен быть добавлен в переменную окружения PATH, вы можете прописать его туда сами без переустановки. Так же вы можете открыть run.bat в блокноте, и поменять python на полный путь к файлу python.exe - C:\Users... Но проще переустановить и все сделается само
ПроголосоватьПроголосовать
0 0
20.02.2018 22:07:54
всё надеялся, что будут комменты об успехах, так и не дождался... у меня не работает, пишет :[DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1519162472623&signature;=6fb44960a5f9358e546271db2f9e5a5fc4e728b6a9a3edeb55de6a1ae461b530 HTTP/1.1" 400 None  [WARNI] 'balances'   ... выставлено ===> 'base': 'BTC', 'quote': 'LTC', 'spend_sum': 0.01... баланс присутствует, в чём может быть дело???
ПроголосоватьПроголосовать
0 0
21.02.2018 06:21:28
Во времени.
Биржа очень чувствительна ко времени, поэтому если у вас не настроена автоматическая синхронизация, то торговать вы не сможете.
Так же может влиять часовой пояс..
Откройте ссылку https://api.binance.com/api/v1/exchangeInfo, там в самом верху есть "serverTime":1519193631348 - текущее время сервера. В вашем коде выше есть timestamp - /api/v3/account?timestamp=1519162472623 - текущее время компа.
Надо, что бы они не расходились более чем на 5000, причем на стороне компа время должно быть меньше чем серверное.
Добиться этого можно либо изменяя часовой пояс, либо в файле binance_api поменять строку
payload.update({'timestamp': int(time.time() * 1000)})
на
payload.update({'timestamp': int((time.time()-1*60*60) * 1000)})
где -1 - это кол-во часов разницы, нужно поменять на -2, +2 и т.п. по ситуации.
Я подумаю, как сделать так, что бы это все проходило автоматически.
ПроголосоватьПроголосовать
0 0
21.02.2018 07:13:07
Добрый день.Не могу запустить бот.Вроде все проделлал.Однако при запуске run выдает ошибку.
ПроголосоватьПроголосовать
0 0
21.02.2018 07:35:01
Добрый день.
Какую ошибку?
Вы пробовали запускать setup от имени администратора?
ПроголосоватьПроголосовать
0 0
21.02.2018 17:22:35
Не могу запустить бота.при нажатии на последний пункт.(Запустить файл run.bat  запустится бот и начнет зарабатывать деньги.)
Не является приложением exАндре можете ли Вы сделать бота для Binanca  в формате EXE. Типа вроде как EVOLUTION BOT для Exmo.(http://good-technology.ru/) Наподобие аналога.
ПроголосоватьПроголосовать
0 0
Пожалуйста, авторизуйтесь, что бы оставить свой комментарий
Крипто-кошельки для помощи и благодарности проекту:

Bitcoin адрес проекта: [[address]]

Перевод на сумму [[value]] BTC получен. Спасибо!.
[[error]]

Ethereum адрес проекта: [[address]]