Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
37-tool crypto derivatives data suite: funding rates, open interest, liquidations, Hyperliquid whale tracking, and ETF flows.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
tools/volume_flow.py
1#!/usr/bin/env python32"""3Coinglass Volume & Flow Module45Provides taker volume history, aggregated taker volume,6cumulative volume delta (CVD), coin netflow, and vol-weighted OHLC.7"""89import sys10import json11import argparse12from typing import Dict, Any, Optional, List1314from ._api import cg_request151617def _to_pair(symbol: str) -> str:18"""Convert symbol to trading pair (BTC → BTCUSDT)."""19s = symbol.upper()20return s if s.endswith("USDT") else f"{s}USDT"212223def get_taker_volume_history(24symbol: str = "BTC",25exchange: str = "Binance",26interval: str = "1h",27limit: int = 1000,28start_time: int = None,29end_time: int = None30) -> Optional[List[Dict[str, Any]]]:31"""32Get taker buy/sell volume history for a coin.3334Args:35symbol: Coin symbol.36exchange: Exchange name.37interval: Time interval (1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d).38limit: Number of results (default 1000, max 4500).39start_time: Start timestamp in seconds.40end_time: End timestamp in seconds.41"""42params = {43"symbol": _to_pair(symbol),44"exchange": exchange,45"interval": interval,46}47if limit and limit != 1000:48params["limit"] = limit49if start_time:50params["startTime"] = start_time51if end_time:52params["endTime"] = end_time53return cg_request(54"api/futures/v2/taker-buy-sell-volume/history",55params=params56)575859def get_aggregated_taker_volume(60symbol: str = "BTC",61interval: str = "h4"62) -> Optional[List[Dict[str, Any]]]:63"""64Get aggregated taker buy/sell volume history across exchanges.6566Args:67symbol: Coin symbol.68interval: Time interval.69"""70return cg_request(71"api/futures/aggregated-taker-buy-sell-volume/history",72params={"symbol": _to_pair(symbol), "interval": interval}73)747576def get_cumulative_volume_delta(77symbol: str = "BTC",78exchange: str = "Binance",79interval: str = "1h",80limit: int = 1000,81start_time: int = None,82end_time: int = None83) -> Optional[List[Dict[str, Any]]]:84"""85Get cumulative volume delta (CVD) history.8687CVD tracks net buying vs selling pressure over time.88Rising CVD = accumulation (bullish).89Falling CVD = distribution (bearish).9091Args:92symbol: Coin symbol.93exchange: Exchange name.94interval: Time interval (1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d).95limit: Number of results (default 1000, max 4500).96start_time: Start timestamp in seconds.97end_time: End timestamp in seconds.98"""99params = {100"symbol": _to_pair(symbol),101"exchange": exchange,102"interval": interval,103}104if limit and limit != 1000:105params["limit"] = limit106if start_time:107params["startTime"] = start_time108if end_time:109params["endTime"] = end_time110return cg_request(111"api/futures/cvd/history",112params=params113)114115116def get_coin_netflow(117symbol: Optional[str] = None118) -> Optional[List[Dict[str, Any]]]:119"""120Get exchange netflow data by coin.121122Shows net inflow/outflow of coins across exchanges.123124Args:125symbol: Optional coin filter.126"""127params = {}128if symbol:129params["symbol"] = symbol130return cg_request("api/futures/netflow-list", params=params or None)131132133def get_volume_ohlc_history(134symbol: str = "BTC",135exchange: str = "Binance",136interval: str = "1h",137limit: int = 1000,138start_time: int = None,139end_time: int = None140) -> Optional[List[Dict[str, Any]]]:141"""142Get volume-weighted OHLC history.143144Args:145symbol: Coin symbol.146exchange: Exchange name.147interval: Time interval (1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d).148limit: Number of results (default 1000, max 4500).149start_time: Start timestamp in seconds.150end_time: End timestamp in seconds.151"""152params = {153"symbol": _to_pair(symbol),154"exchange": exchange,155"interval": interval,156}157if limit and limit != 1000:158params["limit"] = limit159if start_time:160params["startTime"] = start_time161if end_time:162params["endTime"] = end_time163return cg_request(164"api/futures/vol-weight-ohlc-history",165params=params166)167168169def main():170"""CLI entry point."""171parser = argparse.ArgumentParser(172description="Coinglass Volume & Flow Tools"173)174parser.add_argument("action", choices=[175"taker", "aggregated", "cvd", "netflow", "ohlc"176])177parser.add_argument("--symbol", "-s", default="BTC")178parser.add_argument("--exchange", "-e", default=None)179parser.add_argument("--interval", "-i", default="h4")180args = parser.parse_args()181182actions = {183"taker": lambda: get_taker_volume_history(184args.symbol, args.exchange or "Binance", args.interval185),186"aggregated": lambda: get_aggregated_taker_volume(187args.symbol, args.interval188),189"cvd": lambda: get_cumulative_volume_delta(190args.symbol, args.exchange or "Binance", args.interval191),192"netflow": lambda: get_coin_netflow(args.symbol),193"ohlc": lambda: get_volume_ohlc_history(194args.symbol, args.exchange or "Binance", args.interval195),196}197198try:199result = actions[args.action]()200print(json.dumps(result, indent=2))201except Exception as e:202print(f"Error: {e}", file=sys.stderr)203sys.exit(1)204205206if __name__ == "__main__":207main()208