
В прошлой статье мы собрали простенький алгоритм помогающий работать с биржей по стратегии усреднения
Пока идут только наброски, до полноценного бота мы идем семимильными шагами, постараюсь поделится с вами общей логикой, которую можно использовать для создания одной из функций бота это обзор и сбор статистики с различных аналитических центров, выявление наиболее выгодных криптовалют что бы избежать провальных рисков.
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 секунд перед следующей итерацией.
Это еще одна часть, я еще очень далеко до полноценной сборки, но скоро будет полноценная сборка на гитхабе
ссылка на оригинал статьи https://habr.com/ru/articles/739378/
Добавить комментарий