Как стать автором
Обновить

Open source бот для торгов на Binance. Часть 2

Время на прочтение7 мин
Количество просмотров5.3K

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


1. Получение данных с биржи криптовалют

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

Пример запроса к API binance для получения списка всех доступных криптовалют:

import requests

url = 'https://api.binance.com/api/v3/ticker/price'

response = requests.get(url)
data = response.json()

cryptocurrencies = [item['symbol'] for item in data]

Анализ данных по криптовалютам

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

url = 'https://api.binance.com/api/v3/ticker/price'

params = {'symbol': 'BTCUSDT'}

response = requests.get(url, params=params)
data = response.json()

price = float(data['price'])

Создание списка наиболее выгодной и стабильной криптовалюты

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

Анализ упоминаний криптовалюты в интернете

Для анализа упоминаний криптовалюты в интернете можно использовать различные инструменты, такие как социальные сети, форумы и т.д. Существуют различные API и сервисы для мониторинга упоминаний в интернете, например, Google Trends, Brand24, Mention и т.д.

Пример использования Google Trends для получения данных о популярности криптовалюты:

from pytrends.request import TrendReq

pytrends = TrendReq()

kw_list = ['Bitcoin']
pytrends.build_payload(kw_list, timeframe='today 5-y')
data = pytrends.interest_over_time()

popularity = data['Bitcoin'].iloc[-1]

Для рисования графиков анализа криптовалюты можно использовать библиотеку Python Matplotlib. Ниже приведен пример скрипта, который рисует график изменения цены криптовалюты за последние 30 дней:

import requests
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime, timedelta

# Запрос цен криптовалюты на бирже Binance
symbol = 'BTCUSDT'
interval = '1d'
limit = 30
url = 'https://api.binance.com/api/v3/klines'
params = {'symbol': symbol, 'interval': interval, 'limit': limit}
response = requests.get(url, params=params)
data = response.json()

# Создание списка дат и цен
dates = []
prices = []
for item in data:
    date = datetime.fromtimestamp(item[0] / 1000)
    price = float(item[4])
    dates.append(date)
    prices.append(price)

# Создание DataFrame из списка дат и цен
df = pd.DataFrame({'date': dates, 'price': prices})
df.set_index('date', inplace=True)

# Создание графика
plt.figure(figsize=(12, 6))
plt.plot(df.index, df.price)
plt.title('Price chart for ' + symbol)
plt.xlabel('Date')
plt.ylabel('Price')
plt.show()

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

Система рисокв

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

import time
import requests

# Настройки торговой стратегии
symbol = 'BTCUSDT'
buy_amount = 100   # количество докупаемых монет
buy_threshold = 0.05  # порог падения цены, при котором происходит докупка (5%)
sell_threshold = 0.1  # порог роста цены, при котором происходит продажа (10%)

# Данные для авторизации на бирже
api_key = 'your_api_key'
api_secret = 'your_api_secret'

# URL для запросов к API биржи
base_url = 'https://api.binance.com/api/v3'

# Функция для получения баланса по торговой паре
def get_balance(symbol):
    url = base_url + '/account'
    params = {'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.get(url, params=params, headers=headers)
    data = response.json()
    for item in data['balances']:
        if item['asset'] == symbol:
            return float(item['free'])
    return 0.0

# Функция для размещения ордера на покупку
def place_buy_order(symbol, amount):
    url = base_url + '/order'
    params = {'symbol': symbol, 'side': 'BUY', 'type': 'MARKET', 'quantity': amount, 'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.post(url, params=params, headers=headers)
    data = response.json()
    if 'orderId' in data:
        print('Buy order placed. Order ID:', data['orderId'])
    else:
        print('Buy order failed:', data['msg'])

# Функция для размещения ордера на продажу
def place_sell_order(symbol, amount):
    url = base_url + '/order'
    params = {'symbol': symbol, 'side': 'SELL', 'type': 'MARKET', 'quantity': amount, 'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.post(url, params=params, headers=headers)
    data = response.json()
    if 'orderId' in data:
        print('Sell order placed. Order ID:', data['orderId'])
    else:
        print('Sell order failed:', data['msg'])

# Основной цикл программы
while True:
    # Получение текущей цены актива
    url = base_url + '/ticker/price'
    params = {'symbol': symbol}
    response = requests.get(url, params=params)
    data = response.json()
    price = float(data['price'])

    # Получение текущего баланса по активу
    balance = get_balance(symbol)

    # Если цена упала на buy_threshold (5%), размещаем ордер на покупку
    if price < (1 - buy_threshold) * balance / buy_amount:
        place_buy_order(symbol, buy_amount)
        time.sleep(60)  # ждем 1 минуту, чтобы не размещать слишком много ордеров

    # Если цена выросла на sell_threshold (10%), размещаем ордер на продажу
    elif price > (1 + sell_threshold) * balance / buy_amount:
        place_sell_order(symbol, balance)
        time.sleep(60)  # ждем 1 минуту, чтобы не размещать слишком много ордеров

    # Ждем 10 секунд перед следующей итерацией
    time.sleep(10)

В этом скрипте мы используем API биржи Binance для получения текущей цены актива и баланса по торговой паре, размещения ордеров на покупку и продажу, а также устанавливаем пороги падения и роста цены для докупки и продажи. Скрипт работает в бесконечном цикле, постоянно анализируя цену актива и размещая ордера на покупку или продажу в соответствии с настройками торговой стратегии.

Используем глубину падения дельты для определения падения рынка и паузы покупок/усреднений

import time
import requests

# Настройки торговой стратегии
symbol = 'BTCUSDT'
buy_amount = 100   # количество докупаемых монет
delta_threshold = 0.05  # порог падения дельты, при котором происходит покупка (5%)
pause_duration = 60  # продолжительность паузы в секундах

# Данные для авторизации на бирже
api_key = 'your_api_key'
api_secret = 'your_api_secret'

# URL для запросов к API биржи
base_url = 'https://api.binance.com/api/v3'

# Функция для получения текущей цены актива
def get_price(symbol):
    url = base_url + '/ticker/price'
    params = {'symbol': symbol}
    response = requests.get(url, params=params)
    data = response.json()
    return float(data['price'])

# Функция для получения глубины рынка
def get_depth(symbol):
    url = base_url + '/depth'
    params = {'symbol': symbol}
    response = requests.get(url, params=params)
    data = response.json()
    bids = [(float(item[0]), float(item[1])) for item in data['bids']]
    asks = [(float(item[0]), float(item[1])) for item in data['asks']]
    return bids, asks

# Функция для размещения ордера на покупку
def place_buy_order(symbol, amount):
    url = base_url + '/order'
    params = {'symbol': symbol, 'side': 'BUY', 'type': 'MARKET', 'quantity': amount, 'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.post(url, params=params, headers=headers)
    data = response.json()
    if 'orderId' in data:
        print('Buy order placed. Order ID:', data['orderId'])
    else:
        print('Buy order failed:', data['msg'])

# Основной цикл программы
while True:
    # Получение текущей цены актива и глубины рынка
    price = get_price(symbol)
    bids, asks = get_depth(symbol)

    # Вычисление дельты
    delta = bids[0][0] - price

    # Если дельта упала на delta_threshold (5%), размещаем ордер на покупку
    if delta < -delta_threshold * price:
        place_buy_order(symbol, buy_amount)
        time.sleep(pause_duration)

    # Ждем 10 секунд перед следующей итерацией
    time.sleep(10)

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

Контроль сделок что бы не совершать новые сделки, если свободный баланс ниже, чем - определенное значение

import time
import requests

# Настройки торговой стратегии
symbol = 'BTCUSDT'
quantity = 0.001  # количество монет в одной сделке
min_balance = 100  # минимальный свободный баланс

# Данные для авторизации на бирже
api_key = 'your_api_key'
api_secret = 'your_api_secret'

# URL для запросов к API биржи
base_url = 'https://api.binance.com/api/v3'

# Функция для получения свободного баланса
def get_balance(symbol):
    url = base_url + '/account'
    params = {'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.get(url, params=params, headers=headers)
    data = response.json()
    for item in data['balances']:
        if item['asset'] == symbol:
            return float(item['free'])
    return 0.0

# Функция для размещения ордера на покупку
def place_buy_order(symbol, quantity):
    url = base_url + '/order'
    params = {'symbol': symbol, 'side': 'BUY', 'type': 'MARKET', 'quantity': quantity, 'timestamp': int(time.time() * 1000)}
    headers = {'X-MBX-APIKEY': api_key}
    response = requests.post(url, params=params, headers=headers)
    data = response.json()
    if 'orderId' in data:
        print('Buy order placed. Order ID:', data['orderId'])
    else:
        print('Buy order failed:', data['msg'])

# Основной цикл программы
while True:
    # Получение свободного баланса
    balance = get_balance(symbol)

    # Если свободный баланс ниже минимальной суммы, ждем 10 секунд перед следующей итерацией
    if balance < min_balance:
        print('Balance is too low:', balance)
        time.sleep(10)
        continue

    # Размещение ордера на покупку
    place_buy_order(symbol, quantity)

    # Ждем 10 секунд перед следующей итерацией
    time.sleep(10)

Если свободный баланс ниже минимальной суммы, скрипт просто ждет 10 секунд перед следующей итерацией.

Это еще одна часть, я еще очень далеко до полноценной сборки, но скоро будет полноценная сборка на гитхабе

Теги:
Хабы:
Всего голосов 3: ↑2 и ↓1+1
Комментарии12

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань