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/long_short_advanced.py
1#!/usr/bin/env python32"""3Coinglass Long/Short Advanced Module45Provides advanced long/short data: global account ratio,6top trader ratios, taker buy/sell by exchange, net positions.7"""89import sys10import json11import argparse12from typing import Dict, Any, List, Optional1314from ._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"212223# Exchange name normalization for consistent API calls24_EXCHANGE_ALIASES = {25"binance": "Binance", "okx": "OKX", "bybit": "Bybit",26"bitget": "Bitget", "gate": "Gate", "bitmex": "Bitmex",27"dydx": "dYdX", "kraken": "Kraken", "coinex": "CoinEx",28}293031def _normalize_exchange(name: str) -> str:32"""Normalize exchange name to Coinglass format."""33return _EXCHANGE_ALIASES.get(name.lower(), name)343536def get_global_account_ratio(37symbol: str = "BTC",38exchange: str = "Binance",39interval: str = "1h"40) -> Optional[List[Dict[str, Any]]]:41"""42Get global long/short account ratio history.4344Args:45symbol: Coin symbol.46interval: Time interval (h1, h4, h12, h24).47exchange: Optional exchange filter.48"""49params = {50"symbol": _to_pair(symbol),51"exchange": _normalize_exchange(exchange),52"interval": interval,53}54return cg_request(55"api/futures/global-long-short-account-ratio/history",56params=params57)585960def get_top_account_ratio(61symbol: str = "BTC",62exchange: str = "Binance",63interval: str = "1h"64) -> Optional[List[Dict[str, Any]]]:65"""66Get top trader long/short account ratio history.6768Args:69symbol: Coin symbol.70interval: Time interval.71exchange: Optional exchange filter.72"""73params = {74"symbol": _to_pair(symbol),75"exchange": _normalize_exchange(exchange),76"interval": interval,77}78return cg_request(79"api/futures/top-long-short-account-ratio/history",80params=params81)828384def get_top_position_ratio(85symbol: str = "BTC",86exchange: str = "Binance",87interval: str = "1h"88) -> Optional[List[Dict[str, Any]]]:89"""90Get top trader long/short position ratio history.9192Args:93symbol: Coin symbol.94interval: Time interval.95exchange: Optional exchange filter.96"""97params = {98"symbol": _to_pair(symbol),99"exchange": _normalize_exchange(exchange),100"interval": interval,101}102return cg_request(103"api/futures/top-long-short-position-ratio/history",104params=params105)106107108def get_taker_buysell_exchanges(109symbol: str = "BTC",110range_type: str = "4h"111) -> Optional[List[Dict[str, Any]]]:112"""113Get taker buy/sell volume by exchange.114115Args:116symbol: Coin symbol.117"""118return cg_request(119"api/futures/taker-buy-sell-volume/exchange-list",120params={"symbol": symbol, "range": range_type}121)122123124def get_net_position(125symbol: str = "BTC",126exchange: str = "Binance",127interval: str = "1h"128) -> Optional[List[Dict[str, Any]]]:129"""130Get net position history (v1).131132Args:133symbol: Coin symbol.134interval: Time interval.135exchange: Optional exchange filter.136"""137params = {138"symbol": _to_pair(symbol),139"exchange": _normalize_exchange(exchange),140"interval": interval,141}142return cg_request(143"api/futures/net-position/history", params=params144)145146147def get_net_position_v2(148symbol: str = "BTC",149exchange: str = "Binance",150interval: str = "1h"151) -> Optional[List[Dict[str, Any]]]:152"""153Get net position history (v2 — more exchanges).154155Args:156symbol: Coin symbol.157interval: Time interval.158exchange: Optional exchange filter.159"""160params = {161"symbol": _to_pair(symbol),162"exchange": _normalize_exchange(exchange),163"interval": interval,164}165return cg_request(166"api/futures/v2/net-position/history", params=params167)168169170def main():171"""CLI entry point."""172parser = argparse.ArgumentParser(173description="Coinglass Long/Short Advanced Tools"174)175parser.add_argument("action", choices=[176"global", "top-account", "top-position",177"taker", "net", "net-v2"178])179parser.add_argument("--symbol", "-s", default="BTC")180parser.add_argument("--exchange", "-e", default=None)181parser.add_argument("--interval", "-i", default="h4")182args = parser.parse_args()183184actions = {185"global": lambda: get_global_account_ratio(186args.symbol, args.exchange or "Binance", args.interval187),188"top-account": lambda: get_top_account_ratio(189args.symbol, args.exchange or "Binance", args.interval190),191"top-position": lambda: get_top_position_ratio(192args.symbol, args.exchange or "Binance", args.interval193),194"taker": lambda: get_taker_buysell_exchanges(args.symbol),195"net": lambda: get_net_position(196args.symbol, args.exchange or "Binance", args.interval197),198"net-v2": lambda: get_net_position_v2(199args.symbol, args.exchange or "Binance", args.interval200),201}202203try:204result = actions[args.action]()205print(json.dumps(result, indent=2))206except Exception as e:207print(f"Error: {e}", file=sys.stderr)208sys.exit(1)209210211if __name__ == "__main__":212main()213