Как написать торгового робота для binance

Время на прочтение
4 мин

Количество просмотров 57K

Начнем писать трейдинг бота, который будет работать на криптобирже Binance. Бот должен уметь:

  1. торговать самостоятельно, принося какой-то доход

  2. должен быть удобен для создания и обкатывания различных стратегий торговли

  3. тестировать стратегию на исторических данных

Пожалуй, начнем с архитектуры

У нас есть биржа Binance, у которой есть шикарное api. Поэтому архитектура могла бы выглядеть так:

Вызвать пару методов “купи дешевле” и “продай дороже”. Но задача для нас написать такого бота, при котором условный программист-трейдер сможет создавать и тестировать на прибыльность новые стратегии. Поэтому, необходимо отделить логику торговли от всего прочего. А также модулю логики должно быть все равно к какой бирже его подключили: к реальному API или к псевдо-API (для тестирования). С учетом всего этого получилась примерно вот такая архитектура:

Базу выбрал PostgreSQL. Тут нет никакого тайного умысла. Вы можете использовать любую. 

В связи с тем, что каждый модуль стоит внимания, это все не поместится в одну статью. Поэтому я начинаю мини-сериал: «Пишем качественного трейд бота на JS». Поэтому подписывайтесь, устраивайтесь поудобней — начинаем

Сервис для логов

Простой класс, который принимает на вход префикс для логирования и имеет два метода log и error. Эти методы печатают лог с текущим временем и перфиксом:

class LoggerService {
  constructor(prefix) {
    this.logPrefix = prefix
  }

  log(...props) {
    console.log(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }

  error(...props) {
    console.error(new Date().toISOString().substr(0, 19), this.logPrefix, ...props)
  }
}

Теперь подключим биржу

yarn add node-binance-api

Добавим класс BaseApiService. Сделаем в нем инициализацию Binance SDK, а также применим сервис LoggerService. Учитывая мой опыт с Binance могу сразу сказать, что в зависимости от торговой пары мы должны слать цену и обьем с разным количеством знаков после запятой. Все эти настройки для каждой пары можно взять, сделав запрос futuresExchangeInfo(). И написать методы для получения количества знаков после запятой для цены getAssetPricePrecision и объема getAssetQuantityPrecision.

class BaseApiService {
  constructor({ client, secret }) {
    const { log, error } = new Logger('BaseApiService')
    this.log = log
    this.error = error

    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.exchangeInfo = {}
  }

  async init() {
    try {
      this.exchangeInfo = await this.api.futuresExchangeInfo()
    } catch (e) {
      this.error('init error', e)
    }
  }

  getAssetQuantityPrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { quantityPrecision: 3 }
    return s.quantityPrecision
  }

  getAssetPricePrecision(symbol) {
    const { symbols = [] } = this.exchangeInfo
    const s = symbols.find(s => s.symbol === symbol) || { pricePrecision: 2 }
    return s.pricePrecision
  }
}

Дальше добавляем метод создания ордера, с учетом правильного количества знаков после запятой для цены и обьема:

async futuresOrder(side, symbol, qty, price, params={}) {
  try {
    qty = Number(qty).toFixed(this.getAssetQuantityPrecision(symbol))
    price = Number(price).toFixed(this.getAssetPricePrecision(symbol))
    if (!params.type) {
      params.type = ORDER.TYPE.MARKET
    }
    const res = await this.api.futuresOrder(side, symbol, qty, price || false, params)
    this.log('futuresOrder', res)
    return res
  } catch (e) {
    console.log('futuresOrder error', e)
  }
}

Теперь бот умеет создавать ордера. Научим его слушать события из биржы для того, чтоб он мог отлавливать изменения статуса ордеров. Для этого создадим класс TradeService.

class TradeService {
  constructor({client, secret}) {
    const { log, error } = new LoggerService('TradeService')
    this.log = log
    this.error = error
    this.api = new NodeBinanceApi().options({
      APIKEY: client,
      APISECRET: secret,
      hedgeMode: true,
    })
    this.events = new EventEmitter()
  }

  marginCallCallback = (data) => this.log('marginCallCallback', data)

  accountUpdateCallback = (data) => this.log('accountUpdateCallback', data)

  orderUpdateCallback = (data) => this.emit(data)

  subscribedCallback = (data) => this.log('subscribedCallback', data)

  accountConfigUpdateCallback = (data) => this.log('accountConfigUpdateCallback', data)

  startListening() {
    this.api.websockets.userFutureData(
      this.marginCallCallback,
      this.accountUpdateCallback,
      this.orderUpdateCallback,
      this.subscribedCallback,
      this.accountConfigUpdateCallback,
    )
  }

  subscribe(cb) {
    this.events.on('trade', cb)
  }

  emit = (data) => {
    this.events.emit('trade', data)
  }
}

При помощи метода из SDK this.api.websockets.userFutureData подписываемся на события из биржы. Самой главный колбек для нас this.orderUpdateCallback . Он вызывается каждый раз когда меняется статус у ордера. Ловим это событие и прокидываем через EventEmitter тому, кто на это событие подписался, используя метод subscribe.

Перейдем к базе данных

Для чего она нужна? В базе будем хранить все ордера, а также всю историю торговли бота. Пользователей с их ключами к бирже и балансами. В последствии сможем считать сколько бот принес прибыли/убытка. Тут останавливаться долго не буду. Подключаю sequlize. 

yarn add sequelize-cli -D
yarn add sequelize
npx sequelize-cli init

Добавим docker-compose.yml файл для локальной базы:

version: '3.1'

services:
  db:
    image: 'postgres:12'
    restart: unless-stopped
    volumes:
      - ./volumes/postgresql/data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: example
      POSTGRES_DB: bot
    ports:
      - 5432:5432
    networks:
      - postgres


networks:
  postgres:
    driver: bridge

А также добавляю миграции и модели. User, Order

Продолжение следует.

В следующей статье будем писать ядро, которое соединит все эти части и заставит бота торговать.

Продолжение тут

Ссылка на код на github в телеграме

Бот исключительно в демонстрационных целях. Когда я писал своего первого бота мне не хватало чего-то такого.

Идею для торговой стрегии взял из книги Ларри Вильямса «Долгосрочные секреты краткосрочной торговли» и слегка упростил. Он называет это прорыв волатильности. В чём суть:
— считаем разницу между хай и лоу предыдущей свечи
— к цене открытия текущей свечи прибавляем разницу из предыдущего пункта, это и будет ценой для входа в позицию
— если цена достигла этой цены покупаем
— выход на октрытии следующего бара

Всё. Максимально просто.

Теперь ещё раз то же самое на примере.
— Хай прошлой свечи 251 USDT, лоу 248 USDT. Разница 3 USDT.
— Открытие текущей свечи 250 USDT. Цена входа 253 USDT.
— Как только цена достигла 253 USDT покупаем 0,1 BNB
— На следующем открытии свечи выходим. Если цена выше, то заработали что-то, если нет, то нет.

Торговая пара BNB/USDT с биржи binance.

В боте я рассматриваю минутный таймфрейм, чтобы можно было быстро посмотреть что и как работает. График цен можно смотреть на самой бирже Можете поменять на любой на ваше усмотрение.

Торговля идёт фиксированным лотом 0,1 BNB. Можно поменять в переменной `quantity`.

Что нужно для работы:
— установить все зависимости из файла `requirements.txt`
— зарегистрироваться на бирже https://www.binance.com и получить ключи для api и заполнить глобальные переменные `BINANCE_API` и `BINANCE_SECRET`
— залогиниться в тестовой сети testnet.binance.vision/ через github, тоже получить ключи и заполнить переменные `TEST_BINANCE_API` и `TEST_BINANCE_SECRET`
— запустить файл `barackbot.py`

В консоли должны увидеть что-то такое:

Opened connection
Free USDT is 9976.63802, free BNB is 1000.1
Entry price is 249.36929999999998 USDT, quantity is 0.1 BNB
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.15930000 Low: 249.09580000 Close: 249.15880000 Volume: 48.44700000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.32950000 Low: 249.09580000 Close: 249.32760000 Volume: 415.72900000
Buying 0.1 BNB at 249.3693 USDT
Buy order info: {‘symbol’: ‘BNBUSDT’, ‘orderId’: 111111, ‘orderListId’: -1, ‘clientOrderId’: ‘4K1iEdjslkdfjIjhpNb2’, ‘transactTime’: 1614758407134, ‘price’: ‘249.36930000’, ‘origQty’: ‘0.10000000’, ‘executedQty’: ‘0.00000000’, ‘cummulativeQuoteQty’: ‘0.00000000’, ‘status’: ‘NEW’, ‘timeInForce’: ‘GTC’, ‘type’: ‘LIMIT’, ‘side’: ‘BUY’, ‘fills’: []}
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.49750000 Low: 249.06770000 Close: 249.49740000 Volume: 733.67700000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.50000000 Low: 249.06770000 Close: 249.22690000 Volume: 817.82700000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.50000000 Low: 249.06770000 Close: 249.31670000 Volume: 882.20500000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.66020000 Low: 249.06770000 Close: 249.40270000 Volume: 3068.25600000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.66020000 Low: 249.06770000 Close: 249.48930000 Volume: 3087.31000000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.66020000 Low: 249.06770000 Close: 249.35270000 Volume: 3347.31700000
Time: 2021-03-03 08:00:00 Open: 249.10500000 High: 249.66020000 Low: 249.06770000 Close: 249.35280000 Volume: 3348.73900000
Stop order. Open price is 249.36350000 USDT
Loss is -0.002169999999750871 USDT
Stop order info: {‘symbol’: ‘BNBUSDT’, ‘orderId’: 111112, ‘orderListId’: -1, ‘clientOrderId’: ‘Qw3zLdoIBqdf98df’, ‘transactTime’: 1614758462874, ‘price’: ‘0.00000000’, ‘origQty’: ‘0.10000000’, ‘executedQty’: ‘0.10000000’, ‘cummulativeQuoteQty’: ‘24.93476000’, ‘status’: ‘FILLED’, ‘timeInForce’: ‘GTC’, ‘type’: ‘MARKET’, ‘side’: ‘SELL’, ‘fills’: [{‘price’: ‘249.34760000’, ‘qty’: ‘0.10000000’, ‘commission’: ‘0.00000000’, ‘commissionAsset’: ‘USDT’, ‘tradeId’: 35189}]}
Free USDT is 9976.63585, free BNB is 1000.1
Entry price is 249.65974999999997 USDT, quantity is 0.1 BNB
Time: 2021-03-03 08:01:00 Open: 249.36350000 High: 249.42970000 Low: 249.30350000 Close: 249.39350000 Volume: 66.42300000
Time: 2021-03-03 08:01:00 Open: 249.36350000 High: 249.44160000 Low: 249.30350000 Close: 249.42620000 Volume: 88.59900000
Time: 2021-03-03 08:01:00 Open: 249.36350000 High: 249.44160000 Low: 249.30350000 Close: 249.42300000 Volume: 100.39700000

Ещё раз. Бот максимально простой. Не учитывает ни статусы заявок, ни комиссии, нет стопов. Нет обработки минимального лота. Обработка ошибок минимальная. Нет контроля непрерывной работы. Просто механика выставления заявок.

В данной статье мы расскажем вам о том, как создать и настроить вашего первого бота. Данная инструкция поможет вам лучше разобраться в интерфейсе и параметрах настройки. Итак, приступим:
Регистрируемся и логинимся в https://revenuebot.io/, переходим во вкладку «Bots» (https://app.revenuebot.io/office/#/bots/)

Раскрываем меню «CREATE NEW BOT»…

Идентификация, API и кошелек бота

Bot name: Название бота (чаще всего в названии используются характеристики: биржа, торговая пара криптомонет, алгоритм работы и тп.)

Exchange: Выбираем биржу в выпадающем списке (рассмотрим на примере Binance)

Как только вы выберете биржу вам станут доступны следующие поля для заполнения:

Pair: Выбрать торгуемую пару криптомонет. О том, как выбрать эффективную торговую пару подробно написано тут — «Как подобрать эффективную торговую пару криптомонет»

API key: Выбрать API ключ из ранее созданных, либо создать новый.

О том, как создать API ключ подробно написано тут — «Как создать API ключ на бирже Binance и добавить его на RevenueBOT«.

Depo: Выбрать виртуальный кошелек из ранее созданных, либо создать новый, где ввести:

- Название кошелька. Выбирайте название для кошелька такое, чтобы его было легко идентифицировать.
- Комментарий к кошельку для удобства. (Не обязательный параметр).
- Выбрать биржу в выпадающем списке.
- Выбрать криптомонету в выпадающем списке.
- Ввести количество или процент от имеющегося депозита в аккаунте на бирже. Тут можно проверить онлайн баланс нужной монеты на бирже, выбрав нужный API ключ.

Commission: Выбрать вариант комиссии, которая будет применятся биржей. Данная настройка актуальна только для биржи Binance, так как на ней возможна оплата комиссии в третьем токене, который не участвует непосредственно в текущей торговле (BNB токен).

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

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

Алгоритмы работы бота и его настройки

Algo: Выбрать алгоритм работы бота.

Бот использует API интерфейс бирж для выставления ордеров по выбранному алгоритму и отслеживания их выполнения.
На данный момент существует два алгоритма работы бота RevenueBot:

Алгоритм «Long»

Работа бота происходит циклами и основана на принципе покупай дешевле при падении курса (начальная часть цикла) и продай дороже при росте курса (финальная часть цикла). 
Идея заключается в том, что имея определенный депозит, бот покупает не на всю сумму сразу, а частями в моменты падения цены, используя для этого рассчитанную заранее сетку ордеров.
Первый ордер в сетке самый близкий к текущей цене и самый маленький по объему. Каждый последующий ордер объемней (используется система мартингейл) и дешевле. 
Таким образом, при падении цены бот покупает все больше и больше, но за меньшую цену. Это позволяет совершить итоговую прибыльную сделку, продав все купленное по цене гораздо ниже, чем бот начинал покупать.
По выполнению такой сделки получаем прибыль, бот все подсчитывает и начинает новый цикл работы. Профит получается во второй монете торгуемой пары. 
Успешность такой торговли определяется количеством ордеров в сетке, разницей в их весах, расстоянием между друг другом, отступом первого ордера и как глубоко от текущей цены будет отстоять последний ордер в сетке.
Все эти показатели задаются в настройках. Подробно о каждой из настроек изложено в разделе FAQ о создании бота.
Алгоритм «Short»

Принцип работы такой же, как у алгоритма long, основан на продаже при росте курса и покупке при падении курса.
Исходя из настроек, бот рассчитывает и выставляет сетку ордеров на продажу таким образом, чтобы продавать все больше и больше по мере роста цены.
После чего бот отслеживает выставленные ордеры и, в случае их выполнения, выставляет ордер на покупку по цене ниже, чем они были проданы.
В данном алгоритме работы бота профит можно получать как во второй монете торгуемой пары, так и в первой монете.
Профит в первой монете подходит, например, для тех, кто держит перспективные альткоины на долгий срок и хочет, торгуя их к btc, увеличивать исходный депо именно в альткоине, а не зарабатывать в btc.

После выбора алгоритма работы бота, пользователю предлагается воспользоваться шаблонами настройки данного алгоритма: Light trade mode, Normal trade mode, Extreme trade mode.

Все поля настроек заполнятся автоматически при выборе любого из предложенных шаблонов.

Rate cover: Процент перекрытия изменения цены для расчета сетки ордеров. Данная настройка определяет в процентах отступ последнего ордера в сетке ордеров.

First order indent: Отступ в процентах первого ордера в сетке ордеров.

Price rate to use: Выбор рейта на бирже, от которого вести расчет сетки ордеров. Это могут быть рейты buy, sell, average.

Orders matrix, martingale: Сетка ордеров и мартингейл.

Тут задается количество ордеров в сетке и мартингейл (на сколько процентов каждый следующий ордер в сетке будет весомее предыдущего). Кликнув на view orders matrix, Вы сможете увидеть рассчитанную сетку ордеров.

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

Profit coin: Данная настройка доступна только для алгоритма short. Задает в какой из торгуемых монет будет профит.

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

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

Sleep before cancel orders for cycle up: Тут задается задержка в минутах, перед тем как начать отменять текущую сетку ордеров, когда срабатывает настройка Cycle up.

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

Sleep before cycle up after cancel orders: Тут задается задержка в минутах перед выставлением новой сетки после отмены предыдущей сетки ордеров.

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

Sleep after end of cycle: Тут задается задержка в минутах перед тем как начать новый цикл после завершения текущего цикла.

Так же можно задать каждую из этих настроек самостоятельно и сохранить свой шаблон.

Дополнительные настройки

add revenue to depo: При получении прибыли можно добавлять ее к депозиту который использует бот, таким образом увеличивая депозит.
При включенной настройке весь профит от работы бота зачисляется на виртуальный кошелек, который использует данный бот.

logarithmic scale for orders: Обычно сетка ордеров рассчитывается так, что все ордеры в ней расположены линейно, на одинаковом расстоянии друг от друга по всему перекрытию цены.

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

Плотность ордеров можно настроить для разных ситуаций по разному с помощью коэффициента logarithmic factor увеличивая или уменьшая его.
Для большинства случаев подойдет значение logarithmic factor = 1.5.

Кликнув на «view orders matrix», Вы сможете увидеть рассчитанную сетку ордеров.

cost limit: Используйте эту настройку, чтобы не начать покупать слишком дорого и не начать продавать слишком дешево.
Задает максимальную цену, выше которой бот не начнет цикл для алгоритма Long и минимальную цену ниже которой бот не начнет цикл при алгоритме Short.

fix first partial order with profit: Бывает, что первый ордер в сетке частично выполнился, но цена пошла в другую сторону. Такое случается, когда бот оперирует большим депо и ордеры в сетке довольно объемные, даже самый первый.

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

Фильтры для старта бота

Мы рекомендуем всегда настраивать фильтры для старта бота. Они необходимы для того, чтобы бот начал торговлю в самое выгодное время, основываясь на выбранном алгоритме торговли и ваших предпочтениях. Подробнее читайте тут: «Фильтры для старта бота. Описание и настройка.»

Уведомления

Выставляем необходимые уведомления: WEB, E-mail, SMS, Telegram

И нажимаем «Create New Bot».

Поздравляем! Вы создали своего первого бота для биржи!

Шаг 1. Установка необходимых библиотек

Нам потребуется набор библиотек и инструментов для приложений. Для этого мы будем использовать такие библиотеки как NumPy, Pandas и Scikit-learn. Чтобы установить их, можно использовать команду pip:

pip install numpy pandas scikit-learn

Шаг 2. Настройка веб-фреймворков

Для создания веб-интерфейса для вашего бота мы будем использовать фреймворки Flask и Django. Чтобы установить их, можно использовать команду pip:

pip install flask django

Шаг 3. Создание алгоритма торговли

Для создания алгоритма торговли мы будем использовать алгоритмы машинного обучения, такие как регрессия. Мы можем использовать данные для предсказания цен и определения, когда войти или выйти из торговой пары. Мы также можем использовать аналитические платформы, такие как Plotly или Bokeh, чтобы визуализировать данные и понять, как влияют конкретные параметры на торговые решения.

Шаг 4. Подключение бота к торговой платформе

Чтобы подключить бота к торговой платформе, мы можем использовать API-интерфейсы для подключения бота к различным криптовалютным биржам, таким как Coinbase, Binance или Kraken.

Шаг 5. Запуск бота

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

Второй алгоритм

  • Начните с установки установки библиотек Python: NumPy, Pandas и Scikit-learn, которые помогут преобразовывать данные и использовать алгоритмы машинного обучения.
  • Далее установите фреймворки для разработки приложений, такие как Flask и Django, чтобы создать веб-интерфейс для вашего бота.
  • Следующим шагом будет проектирование алгоритма для торговли. Для этого установите параметры и выберите алгоритм машинного обучения для идентификации точки входа и выхода из торговой пары.
  • Для отслеживания активности торговли и просмотра динамики цен установите аналитические платформы, такие как Plotly или Bokeh, чтобы визуализировать данные и определить, как конкретные параметры влияют на торговые решения.
  • Затем подключите бота к торговой платформе с помощью API-интерфейсов, таких как Coinbase, Binance или Kraken.
  • После этого вы можете протестировать алгоритм торговли и проверить точность предсказания с помощью различных аналитических платформ.
  • Наконец, запустите бота на торговой платформе и начните торговать. Отслеживайте ситуацию и делайте регулярные изменения в настройках бота, чтобы он мог адаптироваться к изменениям на рынке.

1 Шаг: Установить библиотеки и инструменты для приложения, такие как NumPy, Pandas и Scikit-learn. Эти библиотеки предоставят инструменты для анализа и аналитики, которые будут необходимы для создания торгового бота. Настройте интерпретатор Python, чтобы вы могли использовать инструменты и библиотеки, необходимые для разработки приложения.

2 Шаг: Выбрать фреймворк для разработки приложений, например, Flask или Django. Эти фреймворки предоставят идеальные инструменты для разработки веб-решений и интерфейсов. Сконфигурируйте фреймворк и интерпретатор Python, чтобы они могли работать вместе для разработки приложения.

3 Шаг: Создать алгоритм для торговли, отслеживающий данные, которые помогут выявить входную и выходную точку торговой пары. Для этого можно использовать методы машинного обучения, такие как регрессия, для предсказания цен и определения точек входа и выхода. Настройте алгоритм машинного обучения, чтобы подходить для ваших торговых целей.

4 Шаг: Используйте аналитические платформы, такие как Plotly или Bokeh, чтобы визуализировать данные и понять, как влияют конкретные параметры на решения по торговле. Настройте аналитические платформы, чтобы они могли отображать данные так, как вы хотите.

5 Шаг: Подключите бота к торговой платформе используя API-интерфейсы, доступные для бирж криптовалют, таких как Coinbase, Binance или Kraken. Настройте API-интерфейсы, чтобы бот мог получать данные о рынке и выполнять торговые операции на вашей платформе. Вы можете также создать интерфейс для отслеживания производительности бота и просмотра торговых историй.

6 Шаг: Проверьте работу бота, чтобы убедиться, что он правильно использует данные и правильно использует алгоритмы, которые вы проектировали. Если вы недовольны работой бота, вы можете изменить алгоритмы и проверить работу бота заново. Также проверьте, что бот правильно отвечает на данные биржи и не делает неправильные торговые действия.

7 Шаг: Проведите тестирование бота для проверки его надежности и стабильности. Проверьте производительность бота на различных платформах и проверьте его способность корректно обрабатывать данные. Также проверьте скорость бота и его способность адаптироваться к изменениям рынка. Если бот не удовлетворяет вашим требованиям, продолжайте править алгоритмы и тестировать бота, пока он не будет работать как надо.

8 Шаг: После окончания тестирования бота и достижения желаемых результатов, реализуйте мониторинг и отчетность, чтобы проверять производительность бота и делать аналитику данных. Добавьте другие инструменты для наблюдения за рыночными трендами, такие как графики цен или аналитику торговых операций. Это поможет вам проанализировать результаты бота и поможет принять решения для дальнейшего улучшения работы бота.

Создание торгового бота на Python: шаг первый — установка необходимых библиотек

Процесс создания торгового бота на Python можно разделить на несколько этапов. На первом этапе необходимо установить необходимые библиотеки и подготовить необходимые средства для последующей работы.

Установка Python

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

Установка библиотек

Для работы с торговым ботом нам потребуются следующие библиотеки:

  • Pandas — это библиотека для анализа и обработки данных. Она позволяет работать с различными типами данных, включая таблицы, матрицы и даже временные ряды.
  • Numpy — это библиотека для работы с массивами и матрицами. Она позволяет выполнять различные математические операции и предоставляет инструменты для анализа данных.
  • Matplotlib — это библиотека для визуализации данных. Она позволяет создавать различные графики и диаграммы, которые могут быть использованы для анализа данных.
  • Scikit-learn — это библиотека для машинного обучения. Она предоставляет инструменты для обучения моделей машинного обучения и применения их для анализа данных.
  • TensorFlow — это библиотека для глубокого обучения. Она предоставляет инструменты для обучения нейронных сетей и применения их для анализа данных.

Для установки библиотек можно воспользоваться пакетным менеджером pip. Для этого необходимо открыть командную строку и выполнить следующую команду:

pip install pandas numpy matplotlib scikit-learn tensorflow

Эта команда установит все необходимые библиотеки.

Установка дополнительных инструментов

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

Для установки этих инструментов можно воспользоваться пакетным менеджером pip. Для этого необходимо открыть командную строку и выполнить следующую команду:

pip install <имя инструмента>

Например, для установки инструмента для автоматической сборки кода необходимо выполнить следующую команду:

pip install make

Заключение

На первом этапе процесса создания торгового бота на Python мы установили необходимые библиотеки и инструменты. Теперь мы можем перейти к следующему этапу — подготовке данных.

В этом посте поговорим о том как запускать торговых роботов для биржи Binance. Делать это будем при помощи нашей открытой и бесплатной библиотеки для алготрейдинга — OsEngine.

Скачать библиотеку и роботов можно здесь: http://o-s-a.net/os-engine.html


Для тех кто пришёл из поисковой системы небольшая справка. OsEngine – полный комплекс программ необходимых алготрейдеру. Скачивание данных, тестирование и оптимизация и торговля. Всё полностью бесплатно и открыто. Мы делаем софт для алгоритмических фондов и алготрейдеров. В этом процессе и родилась библиотека. Пользуйтесь. У нас есть обучение и поддержка для начинающих программистов. Не начинающие – сами всё очень быстро поймут.


План статьи:


1) Настраиваем Апи на бирже


2) Подключаем торговых роботов к Binance


3) Личное мнение о торговле на Бинанс

&amp;amp;amp;amp;amp;amp;lt;span id=»selection-marker-1″ class=»redactor-selection-marker» data-verified=»redactor»&amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;lt;/span&amp;amp;amp;amp;amp;amp;gt;

1. Настраиваем Апи на бинанс


Первым делом нужно настроить ключи для доступа к торгам через Апи. Делается это из личного кабинета пользователя на бирже бинанс. Идём в личный кабинет:



Находим блок настроек для Api и жмём на кнопку “Api Setting”.



В этом окне нам предстоит как-то назвать наш будующий ключ и нажать на кнопку «Create new key». Я не стал ничего выдумывать и назвал наш ключ “testKey”.


После чего перед нами открывается окно в котором мы должны подтвердить наши действия:



Сначала подтвержаем через СМС, на номер телефона который привязан к аккаунту. А чуть позже и через почту. Вам придёт специальное письмо от биржи в котором Вы должны подтвердить что это были Вы. Если мне память не изменяет, там должно быть что-то вроде надписи «Confirm».


После того как мы это всё сделали, сайт нас оповестить о том что ключи созданы и Вам разрешено торговать через внешнее подключение:



Однако это ещё не всё! Для того чтобы узнавать балансы и иметь возможность выставлять и снимать ордера, Вам нужно это отдельно указать.



1. В обязательном порядке, после создания ключей, сохраняем секретный и публичные ключи для доступа к Апи в файл на ПК. Эти ключи нам потом пригодятся для настройки терминала и Вы секретный больше никогда нигде не увидите. Нужно его просто сохранить.


2. Жмём на кнопку редактировать, которая здесь зачем-то названа «Edit»


Разрешаем к торговле все площадки.

После этого жмахаем на кнопку «Save» и второй раз проходим процедуру верификации. Через смски и почту.


Всё!


На этом настройка сайта закончена и можно уже переходить к торговым роботам.

2 Подключаем торговых роботов к Binance


Для этого качаем последний релиз библиотеки


Идём к экзешнику и запускаем его:


В главном меню выбираем программу Bot Station:


1. Переходим во вкладку управления.


2. Жмём на «Connection Servers»


3. В открывшемся окне выбираем Binance, щёлкая на него ЛКМ, 2 раза.


После этого перед нами должно открыться окно настроек сервера Binance:



Вводим сюда ключики, которые мы с таким трудом добывали в первой части данного гайда. Если Вы их сохранили – хорошо, закрываем это окно. Не сохранили сразу после создания. Возвращаемся в главу 1.


Теперь наконец-то можно перейти к созданию роботов:


1. Жмём на кнопку Add bot (создать робота).


2. Выбираем робота которого Вы хотите включить. Называете его и жмёте на кнопку Принять.


Далее настраиваем подключаемые данные:


И вуаля:



Можно торговать роботами на бинанс!

3 Личное мнение о торговле на Бинанс


Не с проста эта биржа так быстро выстрелила. Всем понравилось как она работает.


Не знаю как там с технологичностью, но на ней минимум косяков с работой Апи и проблем с выставлением заявок. Это конечно не Плаза 2, но уже и не Кракен. В общем, ядро готово к приёму большого количества подключений и торгует НОРМАЛЬНО. Нормально для биржи криптовалют.


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


Также частенько они меняют чего-то в ядре и Апи. Иногда «планово» не работают, когда что-то делают. Нужно следить за их соц-сетями. Там они пишут про это. Так же что-то может отвалиться после этого и у нас, несколько случаев уже было. Пишите на форум если что-то перестало работать.

Скачать библиотеку и роботов бинанс можно здесь: http://o-s-a.net/os-engine.html


Всем удачных алгоритмов!

Мне был необходим для личного удобства бот в Телеграм, который умеет выполнять следующие действия:

  1. Показать текущий размер активов в USD(T).
  2. Показать изменения по портфелю в USD(T) за неделю и за все время.

Мне критически важно не использовать никакое приложение вида «все биржи в одном месте» в качестве proxy — да, я не хочу никому предоставлять свои ключи.

Если нужен — давайте напишем.

Что нам потребуется?

В качестве примера в данной статье я буду использовать криптовалютную биржу Binance. Стоит отметить, что никаких ограничений на использование с другими биржами нет — весь каркас тот же самый. Разве что взаимодействие по API будет немного другим (зависит от биржи).

  1. Нам потребуется функционал Telegram (куда же без него).
  2. Нам потребуется Dropbox вместо базы данных (о, да).
  3. Нам потребуется инструмент, где будет крутиться наш бот. Лично я использую Heroku, но можно использовать и AWS.

Создаем бота в Телеграм

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

Нам нужно найти в телеграмме контакт @BotFather и выполнить последовательность команд

/start
/newbot
# Нужно ввести приватное имя нового бота и его публичное имя
# Я использую непопулярное публичное имя, т.к. тут будут наши финансы
# Здесь же мы получим API token нашего бота, сохраним его
# Запомним ссылку вида t.me/alias_binance_bot

База из топора

Для начала мы подготовим Dropbox.

Перейдем по ссылке и получим свой API token для Dropbox, нажав на кнопку Create App. Я создам доступ на отдельную папку в Dropbox.

На текущей странице нам необходимо будет сгенерировать OAuth 2.0 для Dropbox:

После создания пройдем на вкладку Permissions и установим права на files.content.write

Теперь по ссылке у нас появилась папка APPS. Зайдем в нее, далее зайдем в поддерикторию с названием нашего бота. Туда нам необходимо поместить файл totalData.txt, содержащий только пустой список.

[]

Взаимодействие с Binance

Нам необходимо создать наш API ключ на бирже Binance.

Данная активность происходит по этой ссылке.

Результатом данного действия для нас будет API Key и Secret Key. В нашем случае будет достаточно прав только на чтение.

В качестве следующего шага мы напишем код, который будем использовать в дальнейшем.

import json
import time
import logging
import os
import binance
import dropbox
from binance.client import Client

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

logger = logging.getLogger(__name__)

binanceKey = ['BinanceKey']
binanceSecret = ['BinanceSecret']

dropboxToken = 'DropboxKey'

SLEEP_TIMEOUT = 1 * 60

def getBalance(idx):
    client = Client(binanceKey[idx], binanceSecret[idx])
    balances = client.get_account()['balances']
    balanceUsd = 0
    prices = client.get_all_tickers()
    for b in balances:
        curB = float(b['free']) + float(b['locked'])
        asset = b['asset']
        if curB < 0.000001:
            continue
        if asset == "USDT":
            balanceUsd += curB
        prices = sorted(prices, key=lambda p: p['symbol'])
        for p in prices:
            if p['symbol'] == str(asset) + "USDT":
                balanceUsd += float(curB) * float(p['price'])
    balanceUsd = float("%.2f" % balanceUsd)
    curt = time.time()
    return balanceUsd, curt

def getAccountInfo():
        amountUsd, timenow = getBalance(0)
        return {'usd': amountUsd, 'ts': timenow}

def loadJsonFromDropbox(dbx):
    for i in range(1):
        try:
            meta, resp = dbx.files_download('/totalData.txt')
            print(meta, resp)
            body = resp.content.decode('utf-8')
            resp.close()
            return json.loads(body)
        except Exception as ex:
            time.sleep(0.5 * (2 ** i))
            print(ex)

def saveJsonToDropbox(dbx, content):
    jsonBytes = json.dumps(content, indent=4).encode('utf-8')
    dbx.files_upload(jsonBytes, '/totalData.txt', mode=dropbox.files.WriteMode('overwrite'))

def addInfoPointToDropbox(dbx):
        content = loadJsonFromDropbox(dbx)
        content += [getAccountInfo()]
        saveJsonToDropbox(dbx, content)

def main():
    dbx = dropbox.Dropbox(dropboxToken)
    while True:
        addInfoPointToDropbox(dbx)
        time.sleep(SLEEP_TIMEOUT)
    amountUsd, timenow = getBalance(0)
    print(amountUsd)
    print(timenow)

if __name__ == '__main__':
	main()

Для начала попробуем запустить данный код локально. Если все сделано правильно — код будет исполняться каждые 60 секунд и спустя некоторое время файл totalData.txt должен выглядеть как-то так:

[
    {
        "usd": 2.81,
        "ts": 1670699696.930476
    },
    {
        "usd": 2.82,
        "ts": 1670699760.437554
    },
    {
        "usd": 2.84,
        "ts": 1670699823.819883
    },
    {
        "usd": 2.86,
        "ts": 1670700537.611635
    },
    {
        "usd": 2.88,
        "ts": 1670700600.6501918
    }
]

Еще немного кода. Как считать diff

Далее я приведу пример кода, с помощью которого мы будем получать сами изменения портфеля, а так же этот же код должен запускаться ботом.Как я уже писал выше — я использую Heroku. К тому же до недавнего времени данный сервис был бесплатным, но времена меняются и уже можно задуматься — стоит ли использовать Heroku или присягнуть AWS. Если вы, как и решите выбрать Heroku — я могу посоветовать данную статью.

Сам бот будет иметь одну ключевую команду — stats.

API ключей от Binance здесь уже не потребуется. Только token полученный при регистрации бота в Telegram и Dropbox token (вы же помните, Dropbox заменяет нам базу данных?). Для подсчета информации по неделе мы просто генерим список по балансам за неделю. При необходимости код несложно изменить и считать diff за любой временной срез.

import logging
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import os
import dropbox
import time
import json
import datetime

PORT = int(os.environ.get('PORT', 5000))

# Enable logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    level=logging.INFO)

logger = logging.getLogger(__name__)
TOKEN = os.environ.get('TELEGRAM_TOKEN', None)

dropboxToken = ''

def start(update, context):
    update.message.reply_text('Hi!')

def loadJsonFromDropbox(dbx):
	meta, resp = dbx.files_download('/totalData.txt')
	body = resp.content.decode('utf-8')
	resp.close()
	return json.loads(body)

def getHistory():
	dbx = dropbox.Dropbox(dropboxToken)
	prices = loadJsonFromDropbox(dbx)

	timeNow = time.time()
	dtNow = datetime.datetime.now()
	dtToday = dtNow.replace(hour=0, minute=0, second=1)
	dtWeek = dtToday - datetime.timedelta(days=dtToday.weekday())
	dtAllTime = dtNow - datetime.timedelta(days=100000)

	stats = {
		'this week': {
			'since': dtWeek.timestamp(),
			'till': dtNow.timestamp(),
			'prices': []
		},
		'all time': {
			'since': dtAllTime.timestamp(),
			'till': dtNow.timestamp(),
			'prices': []
		}
	}

	for item in prices:
		for stat in stats:
			if stats[stat]['since'] < item['ts'] < stats[stat]['till']:
				stats[stat]['prices'].append(item)

	text = ''
	totalBalance = 0.
	totalBalanceUsd = 0.
	for stat in stats:
		usdt = [p['usd'] for p in stats[stat]['prices']]

		if len(usdt) >= 1:
			u1 = usdt[-1]
			u2 = usdt[0]
			valueUsd = '{:+.2f} USD'.format(u1 - u2)
		else:
		    values = 'n/a'
		text += '{}: {}n'.format(stat, valueUsd)
		if stat == 'all time':
			totalBalanceUsd = u1
				
	dt = datetime.datetime.fromtimestamp(prices[-1]['ts'])
	text += 'nLast update: {:%A %H:%M:%S} UTC+0n'.format(dt)

	return update.message.reply_text(text, parse_mode='markdown')

def main():
    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("stats", getHistory))
    dp.add_handler(MessageHandler(Filters.text, echo))
    dp.add_error_handler(error)

    updater.start_webhook(listen="0.0.0.0", port=int(PORT), url_path=TOKEN)
    print(TOKEN + ' <- TOKEN | ' + str(PORT) + ' <- PORT')
    updater.bot.setWebhook('https://ваш_хероку_апп.com/' + TOKEN)

    updater.idle()

if __name__ == '__main__':
    main()

Вместо заключения

В результате применения команды stats вы должны получить в ответ, например, такое сообщение:

Стоит отметить, что данного бота можно развивать и дальше до еще более прикладных применений.

Например, можно реализовать команду buy или sell. Можно подключить дополнительные аккаунты или сразу несколько бирж и мониторить все свои портфели в одном месте. Удобно? Удобно!

Для подключения дополнительных аккаунтов достаточно добавить еще один вызов в этом месте (и конечно же дополнительные api ключи — там они уже и так в list’е).

        amountUsd, timenow = getBalance(1)

Однако данные упражнения мы оставим дорогим читателям для самостоятельной работы. Всё же потребности у всех разные 🙂

В целом, все исходники уже представлены в статье, но на всякий случай — также они на GitHub.

Благодарю за внимание и буду рад ответить на ваши вопросы.

Введение

В этой статье представлен простой бот для торговли на бирже 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-ключи (инструкция). Потребуется включить двухфакторную авторизацию, я советую использовать 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 – так что я со спокойной душой передаю вам бота и его исходный код. Вы можете модифицировать его под свои нужды, или обратиться за доработкой.

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

Понравилась статья? Поделить с друзьями:
  • Как написать торгового робота mt4
  • Как написать тонометр
  • Как написать тому фелтону чтобы он ответил
  • Как написать тому кто нравится
  • Как написать тому кому давно не писал