Анализ уровней поддержки и сопротивления — один из ключевых методов, используемых трейдерами для принятия решений на рынке. В этой статье мы разберем, как написать Python-скрипт, который автоматически вычисляет эти уровни для криптовалютной пары BTC/USDT, используя данные с API биржи Bybit.
Установка необходимых библиотек
Для работы со скриптом вам потребуются следующие библиотеки:
- requests — для отправки HTTP-запросов к API.
- pandas — для работы с данными в табличном формате (DataFrame).
Если эти библиотеки ещё не установлены, выполните команду:
pip install requests pandas
Эта команда автоматически загрузит и установит их на ваш компьютер.
Описание кода: Шаг за шагом
Наш код выполняет три основные задачи:
- Получает исторические данные (Kline) по выбранной торговой паре.
- Анализирует данные для расчёта уровней поддержки и сопротивления.
- Получает текущую цену актива и выводит её на экран.
Подключение к 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()
объединяет все этапы:
- Получает данные свечей.
- Вычисляет поддержку и сопротивление.
- Получает текущую цену.
- Выводит результаты.
Полный код:
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()
Пока нет комментариев. Будьте первым!