Интеграция с Glassnode API
Glassnode — ведущая платформа on-chain аналитики. Их API предоставляет сотни метрик на основе анализа блокчейн-транзакций: поведение кошельков, движение монет между биржами и холодным хранением, метрики майнеров, активность держателей по времени удержания.
Ключевые метрики для трейдеров
Exchange Flows — нетто-поток монет на биржи и с бирж. Рост exchange inflow исторически коррелирует с давлением продаж.
SOPR (Spent Output Profit Ratio) — соотношение реализованной цены к цене покупки для всех монет, потраченных в данный момент. SOPR < 1 означает, что в среднем монеты продаются в убыток — часто это дно рынка.
MVRV Ratio — Market Value to Realized Value. Высокий MVRV (> 3.5) исторически означает перегрев; MVRV < 1 — сильная недооценка.
Hodler Net Position Change — изменение позиции долгосрочных держателей. Дистрибьюция (продажи) LTH на пиках.
Подключение к API
import httpx
from datetime import datetime
class GlassnodeClient:
BASE_URL = "https://api.glassnode.com/v1/metrics"
def __init__(self, api_key: str):
self.api_key = api_key
self.session = httpx.AsyncClient(timeout=30.0)
async def get_metric(self, endpoint: str, asset: str = "BTC",
since: int = None, until: int = None,
interval: str = "24h") -> list[dict]:
params = {
"a": asset,
"api_key": self.api_key,
"i": interval,
}
if since:
params["s"] = since
if until:
params["u"] = until
resp = await self.session.get(
f"{self.BASE_URL}/{endpoint}",
params=params
)
resp.raise_for_status()
return resp.json()
async def get_exchange_netflow(self, asset: str = "BTC") -> list:
return await self.get_metric("transactions/transfers_volume_exchanges_net", asset)
async def get_sopr(self, asset: str = "BTC") -> list:
return await self.get_metric("indicators/sopr", asset)
async def get_mvrv(self, asset: str = "BTC") -> list:
return await self.get_metric("market/mvrv", asset)
Использование в торговых стратегиях
Glassnode-метрики работают на долгосрочных горизонтах (дни/недели), но могут использоваться как фильтры для краткосрочных стратегий: не открывать long-позиции при экстремально высоком MVRV, усиливать позиции при SOPR < 1.
async def compute_on_chain_composite_score(client: GlassnodeClient) -> float:
"""Возвращает значение от 0 (медвежий) до 1 (бычий)"""
sopr = (await client.get_sopr())[-1]["v"]
mvrv = (await client.get_mvrv())[-1]["v"]
netflow = (await client.get_exchange_netflow())[-1]["v"]
sopr_score = min(max((sopr - 0.95) / 0.1, 0), 1) # 0.95-1.05 диапазон
mvrv_score = min(max((3.5 - mvrv) / 2.5, 0), 1) # 1.0-3.5 диапазон
flow_score = 1.0 if netflow < 0 else 0.0 # outflow = бычий
return (sopr_score + mvrv_score + flow_score) / 3
Tier и rate limits: бесплатный план — ограниченный набор метрик, только дневные данные. Advanced ($29/мес) — все метрики, часовые данные. Institutional — минутные данные, bulk download. Для production используйте кэширование: дневные метрики обновляются раз в сутки, нет смысла запрашивать чаще.







