В мире алгоритмической торговли автоматизация технического анализа играет ключевую роль в повышении эффективности торговых стратегий. В данной статье мы разберем Python-скрипт, который анализирует исторические данные по криптовалютной паре BTCUSDT на бирже Bybit, определяет уровни поддержки и сопротивления и обнаруживает пробои.
Этот код подойдет для трейдеров, которые хотят интегрировать анализ рынка в свои торговые боты или просто автоматизировать процесс выявления ключевых рыночных уровней.
Ключевые возможности скрипта
- Получение 30-минутных свечных данных с биржи Bybit.
- Определение уровней поддержки и сопротивления.
- Выявление пробоев с учетом заданной толерантности (0.2%).
- Автоматический анализ и вывод результата в консоль.
Разбор кода
Импорт необходимых библиотек
import requests
import numpy as np
Скрипт использует:
requests
для отправки HTTP-запросов к API Bybit.numpy
для эффективной обработки массивов данных.
Настройки
SYMBOL = "BTCUSDT"
KLINE_URL = "https://api.bybit.com/v5/market/kline"
INTERVAL = "30" # 30-минутные свечи
LIMIT = 50 # Количество свечей для анализа
TOLERANCE = 0.002 # Допустимый разрыв (0.2%)
Здесь задаются параметры запроса:
SYMBOL
– торговая пара BTCUSDT.INTERVAL
– 30-минутный таймфрейм.LIMIT
– количество свечей для анализа (50 последних свечей).TOLERANCE
– коэффициент, определяющий допустимый разрыв для пробоя.
Функция получения свечных данных
def get_kline_data():
params = {"category": "spot", "symbol": SYMBOL, "interval": INTERVAL, "limit": LIMIT}
response = requests.get(KLINE_URL, params=params)
if response.status_code == 200:
return response.json().get("result", {}).get("list", [])
else:
print(f"Ошибка API: {response.status_code}")
return None
Эта функция отправляет запрос к API Bybit и получает исторические данные по указанной паре и таймфрейму.
Определение уровней поддержки и сопротивления
def get_kline_data():
params = {"category": "spot", "symbol": SYMBOL, "interval": INTERVAL, "limit": LIMIT}
response = requests.get(KLINE_URL, params=params)
if response.status_code == 200:
return response.json().get("result", {}).get("list", [])
else:
print(f"Ошибка API: {response.status_code}")
return None
Эта функция отправляет запрос к API Bybit и получает исторические данные по указанной паре и таймфрейму.
Определение уровней поддержки и сопротивления
def find_support_resistance(candles):
closes = np.array([float(c[4]) for c in candles])
highs = np.array([float(c[2]) for c in candles])
lows = np.array([float(c[3]) for c in candles])
support = np.min(lows)
resistance = np.max(highs)
return support, resistance
Функция find_support_resistance()
вычисляет:
support
(уровень поддержки) – минимальную цену среди последних 50 свечей.resistance
(уровень сопротивления) – максимальную цену среди последних 50 свечей.
Функция обнаружения пробоев
def detect_breakout():
candles = get_kline_data()
if not candles:
return
support, resistance = find_support_resistance(candles)
last_close = float(candles[-1][4])
if last_close >= resistance * (1 + TOLERANCE):
print(f"🚀 Пробой вверх! Цена {last_close:.2f} выше сопротивления {resistance:.2f}")
elif last_close <= support * (1 - TOLERANCE):
print(f"⚠️ Пробой вниз! Цена {last_close:.2f} ниже поддержки {support:.2f}")
else:
print(f"📊 Цена {last_close:.2f}, диапазон: {support:.2f} - {resistance:.2f} (без пробоя)")
Функция detect_breakout()
выполняет следующие действия:
- Получает свечные данные с помощью
get_kline_data()
. - Определяет уровни поддержки и сопротивления.
- Анализирует последнюю цену закрытия:
- Если цена закрытия выше сопротивления на
TOLERANCE
, фиксируется пробой вверх. - Если цена закрытия ниже поддержки на
TOLERANCE
, фиксируется пробой вниз. - Если пробоя нет, выводится текущий диапазон цен.
- Если цена закрытия выше сопротивления на
Запуск скрипта
if __name__ == "__main__":
detect_breakout()
При запуске файла скрипт автоматически выполняет анализ и отображает результаты.
Вывод
Этот Python-скрипт помогает трейдерам анализировать рынок в автоматическом режиме, находить ключевые уровни поддержки и сопротивления, а также фиксировать пробои. Он может быть полезен как отдельный инструмент или как часть более сложной торговой системы.
Полный код:
import requests
import numpy as np
# Настройки
SYMBOL = "BTCUSDT"
KLINE_URL = "https://api.bybit.com/v5/market/kline"
INTERVAL = "30" # 30-минутные свечи
LIMIT = 50 # Количество свечей для анализа
TOLERANCE = 0.002 # Допустимый разрыв (0.2%)
def get_kline_data():
"""Получает исторические свечи"""
params = {"category": "spot", "symbol": SYMBOL, "interval": INTERVAL, "limit": LIMIT}
response = requests.get(KLINE_URL, params=params)
if response.status_code == 200:
return response.json().get("result", {}).get("list", [])
else:
print(f"Ошибка API: {response.status_code}")
return None
def find_support_resistance(candles):
"""Определяет уровни поддержки и сопротивления"""
closes = np.array([float(c[4]) for c in candles])
highs = np.array([float(c[2]) for c in candles])
lows = np.array([float(c[3]) for c in candles])
support = np.min(lows)
resistance = np.max(highs)
return support, resistance
def detect_breakout():
"""Проверяет пробой уровней"""
candles = get_kline_data()
if not candles:
return
support, resistance = find_support_resistance(candles)
last_close = float(candles[-1][4])
if last_close >= resistance * (1 + TOLERANCE):
print(f"🚀 Пробой вверх! Цена {last_close:.2f} выше сопротивления {resistance:.2f}")
elif last_close <= support * (1 - TOLERANCE):
print(f"⚠️ Пробой вниз! Цена {last_close:.2f} ниже поддержки {support:.2f}")
else:
print(f"📊 Цена {last_close:.2f}, диапазон: {support:.2f} - {resistance:.2f} (без пробоя)")
if __name__ == "__main__":
detect_breakout()
Пока нет комментариев. Будьте первым!