Бот для Binance с индикаторами

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

Отличия в новой версии:

  1. Стало больше файлов. Ваши настройки нужно прописывать в файле config.py
  2. Бот совершает абсолютно все сделки по рынку.
    1. Вначале, если индикаторы позволяют (об этом ниже), бот создает ордер на покупку по рынку. После создания бот получает с биржи историю сделок и считает средневзвешенную цену (как и то, что вы видите на Binance) в истории торгов.
    2. После того, как ордер на покупку исполнен, бот проверяет текущий курс (в стакане на покупку), и, если рост превысил заданное в конфиге, то продает по рынку. После продажи опять же получает историю сделок и считает курс для истории.
    3. Если включен флаг stop-loss, то бот продает по рынку, когда цена падает на указанный процент.
  3. Бот работает в два потока, один из которых собственно бот, другой синхронизирует время с биржей. Это нужно для тех случаев, когда время постепенно расходится в процессе работы бота.
  4. Убрано всё, что связано с комиссией. Во-первых, бот покупает по рынку и ему плевать на комиссии, во вторых сейчас помимо BNB|НеBNB комиссий появились разные ставки maker/taker для разных уровней участников, и еще возможна ситуация, когда часть комиссии снята в BNB, потом монеты кончились и часть снялась в остальной валюте. Для простого бота обработку всех этих событий считаю излишней, просто держите BNB на балансе и не снимайте галочку.

Теперь собственно про индикаторы (и вообще алгоритм работы).

Рассказываю с самого начала.

  1. Нужно скачать архив с ботом. Распаковать его в любую папку по вашему выбору
  2. Вам нужен установленный python версии 3.6 и выше, скачайте его с официального сайта и установите все галочки.
  3. Запустите setup.bat в папке с ботом.
  4. Откройте файл config.py в папке с ботом и укажите настройки. 
    1. Нужно будет прописать API-ключи (откуда их взять расписано тут)
    2. Указать пары, по которым собираетесь торговать
    3. Суммы для торгов
    4. Признак active пары позволяет пропускать пару, если не хотите её использовать (по ней не будут создаваться новые ордера на покупку)
    5. KLINES_LIMITS – сколько свечей бот должен получать при построении индикаторов
    6. TIMEFRAME – по каким свечам собираетесь работать с индикаторами (в примере – с часовыми)
  5. В принципе бот готов к работе, но нужно еще настроить вашу торговую стратегию. Я думал убрать её в отдельный файл, но решил, что вас это еще больше запутает. Вот суть:

Индикаторы

В файле binance_bot.py  есть вот такой вот фрагмент кода:

log.debug("Проверяем индикаторы")
# Получаем свечи и берем цены закрытия, high, low
klines = bot.klines(

Реклама:


symbol=pair_name.upper(), interval=TIMEFRAME, limit=KLINES_LIMITS ) closes = [float(x[4]) for x in klines] high = [float(x[2]) for x in klines] low = [float(x[3]) for x in klines] # Скользящая средняя sma_5 = ta.SMA(closes, 5) sma_100 = ta.SMA(closes, 100) ema_5 = ta.EMA(closes, 5) ema_100 = ta.EMA(closes, 100) enter_points = 0 if ema_5[-1] > ema_100[-1] and sma_5[-1] > sma_100[-1]: # Быстрая EMA выше медленной и быстрая SMA выше медленной, считаем, что можно входить enter_points += 1 macd, macdsignal, macdhist = ta.MACD(closes, 12, 26, 9) if macd[-1] > macdsignal[-1] and macdhist[-1] > 0: # Линия макд выше сигнальной и на гистограмме они выше нуля enter_points += 1.3 rsi_9 = ta.RSI(closes, 9) rsi_14 = ta.RSI(closes, 14) rsi_21 = ta.RSI(closes, 21) if rsi_9[-1] < 70 and rsi_14[-1] < 70 and rsi_21[-1] < 70: # RSI не показывает перекупленности enter_points += 2 fast, slow = ta.STOCH(high, low, closes, 5, 3, 3) if fast[-1] > slow[-1]: # Быстрая линия стохастика выше медленной, вход enter_points += 1.5 fast, slow = ta.STOCHRSI(closes, 14, 3, 3) if fast[-1] > slow[-1]: # Быстрая линия STOCHRSI выше медленной, вход enter_points += 1.8 upper, middle, lower = ta.BBANDS(closes, ma_period=20) if high[-1] > upper[-1]: # Свеча пробила верхнюю полосу Боллинджера enter_points += 3 log.debug("Свеча набрала {b} баллов".format(b=enter_points)) if enter_points < POINTS_TO_ENTER: log.debug("Минимальный проходной балл {b}. Пропуск пары".format(b=POINTS_TO_ENTER)) continue

Я его набросал для примера, просто что бы дать вам понимание что и как настраивается. Эта торговая стратегия не является какой-то там оптимальной или известной. Вы можете добавлять или убавлять куски кода так, как вам будет удобнее. Пробегусь по логике:

Работа с индикаторами происходит только перед созданием ордера на покупку, фактически это принятие решения, стоит ли входить в торги.

Сначала мы получаем с биржи свечи по текущей паре:

klines = bot.klines(
    symbol=pair_name.upper(),
    interval=TIMEFRAME,
    limit=KLINES_LIMITS
)

Формируем массивы с ценами закрытия (а также high и low)

closes = [float(x[4]) for x in klines]
high = [float(x[2]) for x in klines]
low = [float(x[3]) for x in klines]

Строим для начала скользящие средние SMA и EMA (это и все что дальше касается индикаторов можно смело менять и удалять).

# Скользящая средняя
sma_5 = ta.SMA(closes, 5)
sma_100 = ta.SMA(closes, 100)

ema_5 = ta.EMA(closes, 5)
ema_100 = ta.EMA(closes, 100)

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

if ema_5[-1] > ema_100[-1] and sma_5[-1] > sma_100[-1]:
    # Быстрая EMA выше медленной и быстрая SMA выше медленной, считаем, что можно входить
    enter_points += 1

Если # Линия макд выше сигнальной и на гистограмме они выше нуля, то присваиваем еще 1.3 и т.п. Там вы найдете RSI, STOCH, STOCHRSI, и Боллинджера, по тем же приницпам.

macd, macdsignal, macdhist = ta.MACD(closes, 12, 26, 9)
if macd[-1] > macdsignal[-1] and macdhist[-1] > 0:
    # Линия макд выше сигнальной и на гистограмме они выше нуля
    enter_points += 1.3

В итоге, после того как все индикаторы построены и наши веса посчитаны, можно принимать решение. В данном случае у меня в конфиге стоит проходной балл 7 (параметр POINTS_TO_ENTER), а суммарно можно набрать 10.6, если все индикаторы сработают.

В большинстве случаев какие-то индикаторы будут срабатывать а какие то нет, я проставил 3 очка Боллинджеру, если есть пробитие то это почти на половину увеличивает шансы пары войти на рынок. Если сработают только скользящие, то пара получит одно очко.

Ваша задача подобрать индикаторы, веса и проходной балл так, что бы реализовалась ваша торговая стратегия. Например, если вы используете только MA200 и RSI, и хотите войти на рынок, когда они сработают вдвоем, удалите всё лишнее, дайте каждому из них по 1 и сделайте проходной бал 2. Если достаточно сработки хотя бы одного из них, сделайте проходной балл 1.

Все доступные индикаторы вы можете найти в файле bablofil_ta.

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

Вы всегда можете остановить бота, поменять настройки (например прибыльности или стоп-лосса) и бот подхватит для всех пар, даже для тех, по которым есть ордера. Если хотите начать все заново, удалите файл binance.db из папки с ботом, это его база данных, он создаст новую при запуске.

В общем удачи и профита вам и вашим роботам.

Задавайте вопросы в комментариях, пишите на форуме.

Тэги: