![](https://webcf.waybackmachine.org/web/20230616062058/https://habrastorage.org/getpro/habr/upload_files/5ac/d3d/c7b/5acd3dc7bf47805238049ae63fd8c305.png)
В прошлой статье мы собрали простенький алгоритм помогающий работать с биржей по стратегии усреднения
Пока идут только наброски, до полноценного бота мы идем семимильными шагами, постараюсь поделится с вами общей логикой, которую можно использовать для создания одной из функций бота это обзор и сбор статистики с различных аналитических центров, выявление наиболее выгодных криптовалют что бы избежать провальных рисков.
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 секунд перед следующей итерацией.
Это еще одна часть, я еще очень далеко до полноценной сборки, но скоро будет полноценная сборка на гитхабе