Исходный код
Представленный ниже скрипт на Python позволяет автоматизировать процесс получения данных из Glassnode API. Он включает функции для безопасного запроса данных, их преобразования в удобный формат pandas DataFrame и последующего слияния различных метрик (таких как MVRV, NVT и цена BTC) по временной метке. Это критически важно для любого количественного анализа, где требуется сопоставление ончейн-данных с рыночной динамикой.
Для работы с большими объемами данных или для ускорения расчетов сложных индикаторов, вы можете рассмотреть методы, описанные в статье Ускорение финансовых индикаторов на Python с помощью Numba JIT. А для оценки рисков, например, после анализа этих метрик, может быть полезен материал Расчет Value at Risk (VaR) через Монте-Карло и GARCH на Python.
import requests
import pandas as pd
from datetime import datetime, timedelta
import os
# --- Конфигурация API ---
# Рекомендуется хранить API ключ в переменных окружения
# Для примера, можно задать напрямую, но это небезопасно для продакшена
GLASSNODE_API_KEY = os.getenv('GLASSNODE_API_KEY', 'YOUR_GLASSNODE_API_KEY_HERE')
BASE_URL = 'https://api.glassnode.com/v1/metrics/'
def fetch_glassnode_data(metric_path: str, asset: str, start_date: str, end_date: str, interval: str = '24h') -> pd.DataFrame:
"""
Извлекает данные из Glassnode API для указанной метрики.
Args:
metric_path (str): Путь к метрике в API (например, 'market/mvrv').
asset (str): Тикер актива (например, 'BTC').
start_date (str): Начальная дата в формате 'YYYY-MM-DD'.
end_date (str): Конечная дата в формате 'YYYY-MM-DD'.
interval (str): Интервал данных (например, '24h', '1h').
Returns:
pd.DataFrame: DataFrame с данными метрики, индексированный по дате.
"""
params = {
'a': asset,
's': start_date,
'u': end_date,
'i': interval,
'api_key': GLASSNODE_API_KEY
}
try:
response = requests.get(f'{BASE_URL}{metric_path}', params=params)
response.raise_for_status() # Вызывает исключение для ошибок HTTP (4xx или 5xx)
data = response.json()
if not data:
print(f"Предупреждение: Нет данных для метрики {metric_path} в указанный период.")
return pd.DataFrame()
df = pd.DataFrame(data)
df['t'] = pd.to_datetime(df['t'], unit='s') # Преобразование Unix timestamp в datetime
df = df.set_index('t')
df = df.rename(columns={'v': metric_path.replace('/', '_')}) # Переименование столбца 'v' в имя метрики
return df
except requests.exceptions.RequestException as e:
print(f"Ошибка при запросе данных для {metric_path}: {e}")
return pd.DataFrame()
except ValueError as e:
print(f"Ошибка при парсинге JSON для {metric_path}: {e}")
return pd.DataFrame()
def main():
# --- Параметры запроса ---
ASSET = 'BTC'
END_DATE = datetime.now().strftime('%Y-%m-%d')
START_DATE = (datetime.now() - timedelta(days=365 * 3)).strftime('%Y-%m-%d') # Последние 3 года
INTERVAL = '24h'
print(f"Извлечение данных для {ASSET} с {START_DATE} по {END_DATE} с интервалом {INTERVAL}...")
# --- Извлечение ончейн-метрик ---
print("Извлечение MVRV...")
df_mvrv = fetch_glassnode_data('market/mvrv', ASSET, START_DATE, END_DATE, INTERVAL)
print("Извлечение NVT...")
df_nvt = fetch_glassnode_data('transactions/nvt', ASSET, START_DATE, END_DATE, INTERVAL)
# --- Извлечение ценовых данных ---
print("Извлечение цены...")
# Glassnode предоставляет цену в метрике 'market/price_usd_ohlc_sum' или 'market/price_usd_close'
# Используем 'market/price_usd_close' для простоты, если нужна только цена закрытия
df_price = fetch_glassnode_data('market/price_usd_close', ASSET, START_DATE, END_DATE, INTERVAL)
if not df_price.empty:
df_price = df_price.rename(columns={'market_price_usd_close': 'Price_USD'})
# --- Слияние данных ---
print("Слияние данных...")
# Начинаем с цены, так как она часто является основной для анализа
merged_df = df_price.copy()
if not df_mvrv.empty:
merged_df = merged_df.merge(df_mvrv, left_index=True, right_index=True, how='left')
if not df_nvt.empty:
merged_df = merged_df.merge(df_nvt, left_index=True, right_index=True, how='left')
# Удаление строк, где нет данных по цене (если цена была пустой, merged_df будет пуст)
merged_df = merged_df.dropna(subset=['Price_USD'])
print("Первые 5 строк объединенного DataFrame:")
print(merged_df.head())
print("Информация об объединенном DataFrame:")
merged_df.info()
# --- Сохранение данных (опционально) ---
output_filename = f'{ASSET}_onchain_metrics_merged.csv'
merged_df.to_csv(output_filename)
print(f"Данные успешно сохранены в {output_filename}")
if __name__ == '__main__':
main()
Разбор параметров
GLASSNODE_API_KEY: Ваш уникальный API-ключ Glassnode. Его можно получить после регистрации на сайте Glassnode. Рекомендуется хранить его в переменных окружения для безопасности, но для примера он может быть задан напрямую.BASE_URL: Базовый URL для всех запросов к Glassnode API.metric_path: Строка, указывающая на конкретную метрику в Glassnode API. Например,'market/mvrv'для MVRV или'transactions/nvt'для NVT. Полный список метрик доступен в документации Glassnode.asset: Тикер криптовалюты, для которой запрашиваются данные (например,'BTC','ETH').start_date: Начальная дата для извлечения данных в формате'YYYY-MM-DD'.end_date: Конечная дата для извлечения данных в формате'YYYY-MM-DD'.interval: Интервал агрегации данных. Может быть'24h'(ежедневно),'1h'(ежечасно) и т.д.
Как запустить
Чтобы запустить этот скрипт и получить ончейн-метрики:
- Получите API-ключ Glassnode: Зарегистрируйтесь на сайте Glassnode и получите свой API-ключ. Обратите внимание, что для доступа к некоторым метрикам может потребоваться платный тариф.
- Установите необходимые библиотеки: Если у вас их еще нет, установите
requestsиpandasс помощью pip:pip install requests pandas - Сохраните скрипт: Скопируйте предоставленный выше код и сохраните его в файл с расширением
.py, например,glassnode_extractor.py. - Настройте API-ключ: Замените
'YOUR_GLASSNODE_API_KEY_HERE'на ваш реальный API-ключ Glassnode. Для более безопасного подхода, установите переменную окруженияGLASSNODE_API_KEYперед запуском скрипта (например,export GLASSNODE_API_KEY='ваш_ключ'в Linux/macOS или через системные настройки в Windows). - Запустите скрипт: Откройте терминал или командную строку, перейдите в директорию, где вы сохранили файл, и выполните команду:
python glassnode_extractor.py - Проверьте результат: Скрипт выведет первые строки объединенного DataFrame в консоль и сохранит его в файл
BTC_onchain_metrics_merged.csvв той же директории.
После получения данных, вы можете использовать их для построения различных торговых стратегий или для углубленного анализа рынка. Например, для оценки эффективности этих стратегий, вы можете применить методы, описанные в статье Расчет MFE и MAE в Python для анализа торговых систем.




