Уровни поддержки, сопротивления на Python и API Bybit

Уровни поддержки, сопротивления на Python и API Bybit

Анализ уровней поддержки и сопротивления — один из ключевых методов, используемых трейдерами для принятия решений на рынке. В этой статье мы разберем, как написать Python-скрипт, который автоматически вычисляет эти уровни для криптовалютной пары BTC/USDT, используя данные с API биржи Bybit.

Установка необходимых библиотек

Для работы со скриптом вам потребуются следующие библиотеки:

  1. requests — для отправки HTTP-запросов к API.
  2. pandas — для работы с данными в табличном формате (DataFrame).

Если эти библиотеки ещё не установлены, выполните команду:

pip install requests pandas

Эта команда автоматически загрузит и установит их на ваш компьютер.

Описание кода: Шаг за шагом

Наш код выполняет три основные задачи:

  1. Получает исторические данные (Kline) по выбранной торговой паре.
  2. Анализирует данные для расчёта уровней поддержки и сопротивления.
  3. Получает текущую цену актива и выводит её на экран.

Подключение к API Bybit

Скрипт использует публичный API Bybit, который предоставляет данные о рынке. Для взаимодействия с API требуется только отправить GET-запросы, что делает его доступным и простым для использования.

В начале кода определяются основные параметры:

  • BASE_URL — базовый адрес API Bybit.
  • SYMBOL — торговая пара (например, BTCUSDT).
  • CATEGORY — тип рынка (spot, linear и т. д.).
  • KLINE_LIMIT — количество исторических свечей.
  • KLINE_INTERVAL — интервал свечей (в минутах или днях).

Получение исторических данных

Функция get_historical_data() отправляет запрос к API для получения последних 200 свечей. Каждая свеча включает информацию о времени, максимальной цене, минимальной цене и ценах открытия/закрытия.

Пример формата возвращаемых данных:

[
  [timestamp, open, high, low, close, volume],
  ...
]

Расчет уровней поддержки и сопротивления

Функция calculate_support_resistance() анализирует данные свечей:

  • Уровень поддержки определяется как минимальная цена (low) за весь период.
  • Уровень сопротивления — как максимальная цена (high).

Эти уровни помогают определить, где может происходить изменение тренда.

Получение текущей цены

Функция get_current_ticker_data() получает текущую цену актива с помощью API. Она возвращает последнюю цену, которая отображается на экране.

Основной блок (main())

Функция main() объединяет все этапы:

  1. Получает данные свечей.
  2. Вычисляет поддержку и сопротивление.
  3. Получает текущую цену.
  4. Выводит результаты.

Полный код:

import requests
import pandas as pd

# Константы
BASE_URL = "https://api.bybit.com/v5/market"
SYMBOL = "BTCUSDT"  # Торговая пара
CATEGORY = "spot"   # Тип рынка: spot, linear, inverse
KLINE_LIMIT = 200   # Количество свечей для анализа
KLINE_INTERVAL = "60"  # Интервал свечей: 1, 3, 5, 15, 60, D, W, M

def get_historical_data():
    """Получить исторические данные (Kline)"""
    url = f"{BASE_URL}/kline"
    params = {
        "category": CATEGORY,
        "symbol": SYMBOL,
        "interval": KLINE_INTERVAL,
        "limit": KLINE_LIMIT
    }
    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()["result"]["list"]
    else:
        raise Exception(f"Ошибка получения данных Kline: {response.status_code}, {response.text}")

def get_current_ticker_data():
    """Получить текущие данные тикера"""
    url = f"{BASE_URL}/tickers"
    params = {
        "category": CATEGORY,
        "symbol": SYMBOL
    }
    response = requests.get(url, params=params)
    if response.status_code == 200:
        return response.json()["result"]["list"][0]
    else:
        raise Exception(f"Ошибка получения данных тикера: {response.status_code}, {response.text}")

def calculate_support_resistance(klines):
    """Вычислить уровни поддержки и сопротивления"""
    data = [
        {"time": kline[0], "high": float(kline[2]), "low": float(kline[3])}
        for kline in klines
    ]
    df = pd.DataFrame(data)
    support_level = df["low"].min()   # Минимальная цена
    resistance_level = df["high"].max()  # Максимальная цена
    return support_level, resistance_level

def main():
    try:
        # Получение исторических данных
        klines = get_historical_data()
        # Расчет уровней поддержки и сопротивления
        support, resistance = calculate_support_resistance(klines)
        print(f"Уровень поддержки: {support}")
        print(f"Уровень сопротивления: {resistance}")
        # Получение текущих данных тикера
        ticker_data = get_current_ticker_data()
        print(f"Последняя цена: {ticker_data['lastPrice']}")
    except Exception as e:
        print(f"Ошибка: {e}")

if __name__ == "__main__":
    main()
Комментарии

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

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

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