Пробой поддержки и сопротивления на Bybit с Python

Пробой поддержки и сопротивления на Bybit с Python

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

  1. Получает свечные данные с помощью get_kline_data().
  2. Определяет уровни поддержки и сопротивления.
  3. Анализирует последнюю цену закрытия:
    • Если цена закрытия выше сопротивления на 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()
Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.