{ "cells": [ { "cell_type": "code", "execution_count": 23, "id": "0b5ca901", "metadata": {}, "outputs": [], "source": [ "import requests\n", "import pandas as pd\n", "import numpy as np\n", "from datetime import datetime\n", "import time\n", "import json\n", "import valkey\n", "from dataclasses import dataclass, field, asdict\n", "import modules.structs as structs\n", "import modules.aster_auth as aster_auth\n", "import modules.manual_leverage as leverage\n", "VAL_KEY = valkey.Valkey(host='localhost', port=6379, db=0, decode_responses=True)\n", "df_leverage_by_exch = pd.DataFrame(data=leverage.LEVERAGE_BY_EXCH)" ] }, { "cell_type": "code", "execution_count": 24, "id": "53647b40", "metadata": {}, "outputs": [], "source": [ "# ### ASTER Historical FR ###\n", "# params = {\n", "# 'limit': 1000,\n", "# }\n", "# r = json.loads(requests.get('https://fapi.asterdex.com/fapi/v3/fundingRate', params=params).text)\n", "# df_aster_hist_fr = pd.DataFrame(r)\n", "# df_aster_hist_fr['funding_rate_ts_dt'] = pd.to_datetime(df_aster_hist_fr['fundingTime'], unit='ms')\n", "# df_aster_hist_fr = df_aster_hist_fr.sort_values(by='fundingTime', ascending=True).drop_duplicates(subset=['symbol'], keep='last')" ] }, { "cell_type": "code", "execution_count": 25, "id": "1f3b65ee", "metadata": {}, "outputs": [], "source": [ "# ### ASTER Current FR ###\n", "# r = json.loads(requests.get('https://fapi.asterdex.com/fapi/v3/fundingInfo').text)\n", "# df_aster_current_fr = pd.DataFrame(r)\n", "# df_aster_current_fr['funding_rate_ts_dt'] = pd.to_datetime(df_aster_current_fr['time'], unit='ms')\n", "# df_aster_current_fr['funding_rate'] = df_aster_current_fr['interestRate']\n" ] }, { "cell_type": "code", "execution_count": 26, "id": "5176d5b1", "metadata": {}, "outputs": [], "source": [ "### ASTER EXCHANGE INFO ###\n", "fut_acct_exchangeInfo: dict = {\n", " \"url\": \"/fapi/v3/exchangeInfo\",\n", " \"method\": \"GET\",\n", " \"params\": {}\n", "}\n", "r: dict = await aster_auth.post_authenticated_url(fut_acct_exchangeInfo) # ty:ignore[invalid-assignment]\n", "df_aster_exch_info = pd.DataFrame(r['symbols'])\n", "df_aster_exch_info['min_order_size'] = df_aster_exch_info['filters'].apply(lambda x: [f for f in x if f.get('filterType', None) == 'LOT_SIZE'][0]['minQty'] )\n", "df_aster_exch_info['min_price'] = df_aster_exch_info['filters'].apply(lambda x: [f for f in x if f.get('filterType', None) == 'PRICE_FILTER'][0]['minPrice'] )\n", "df_aster_exch_info['min_notional'] = df_aster_exch_info['filters'].apply(lambda x: [f for f in x if f.get('filterType', None) == 'MIN_NOTIONAL'][0]['notional'] )\n", "df_aster_exch_info['min_lot_size'] = df_aster_exch_info['filters'].apply(lambda x: [f for f in x if f.get('filterType', None) == 'LOT_SIZE'][0]['stepSize'] )\n", "\n", "fut_acct_ticker_stats: dict = {\n", " \"url\": \"/fapi/v3/ticker/24hr\",\n", " \"method\": \"GET\",\n", " \"params\": {}\n", "}\n", "r: dict = await aster_auth.post_authenticated_url(fut_acct_ticker_stats) # ty:ignore[invalid-assignment]\n", "df_aster_ticker_stats = pd.DataFrame(r)\n", "df_aster_ticker_stats['last_trade_ts_ast'] = df_aster_ticker_stats['closeTime']\n", "\n", "df_aster_exch_info = df_aster_exch_info.merge(df_aster_ticker_stats[['symbol','quoteVolume','last_trade_ts_ast']].rename({'quoteVolume':'daily_volume'}, axis=1), on='symbol', how='left')\n", "df_aster_exch_info['daily_volume'] = df_aster_exch_info['daily_volume'].astype(float)" ] }, { "cell_type": "code", "execution_count": 27, "id": "e33ec721", "metadata": {}, "outputs": [], "source": [ "### Extended Current FR ###\n", "r = json.loads(requests.get('https://api.starknet.extended.exchange/api/v1/info/markets').text)\n", "df_extend_current_mkt_stats = pd.DataFrame(r['data'])\n", "\n", "df_extend_current_mkt_stats['funding_rate'] = df_extend_current_mkt_stats['marketStats'].apply(lambda x: x.get('fundingRate',{}))\n", "df_extend_current_mkt_stats['funding_rate_ts'] = df_extend_current_mkt_stats['marketStats'].apply(lambda x: x.get('nextFundingRate',{}))\n", "df_extend_current_mkt_stats['daily_volume'] = df_extend_current_mkt_stats['marketStats'].apply(lambda x: x.get('dailyVolume',{})).astype(float)\n", "df_extend_current_mkt_stats['min_order_size'] = df_extend_current_mkt_stats['tradingConfig'].apply(lambda x: x.get('minOrderSize',{}))\n", "df_extend_current_mkt_stats['min_price'] = df_extend_current_mkt_stats['tradingConfig'].apply(lambda x: x.get('minPriceChange',{}))\n", "df_extend_current_mkt_stats['min_notional'] = 0\n", "df_extend_current_mkt_stats['min_lot_size'] = df_extend_current_mkt_stats['tradingConfig'].apply(lambda x: x.get('minOrderSizeChange',{}))\n", "\n", "df_extend_current_mkt_stats['max_leverage'] = df_extend_current_mkt_stats['tradingConfig'].apply(lambda x: x.get('maxLeverage',{}))\n", "\n", "\n", "# df_extend_current_fr = df_extend_current_mkt_stats[['status','name','assetName','collateralAssetName','category','min_order_size','min_price','max_leverage','funding_rate','funding_rate_ts']]\n", "# df_extend_current_fr['funding_rate_ts_dt'] = pd.to_datetime(df_extend_current_fr['funding_rate_ts'], unit='ms')\n", "# df_extend_current_fr = df_extend_current_fr.loc[df_extend_current_fr['status']=='ACTIVE',:]" ] }, { "cell_type": "code", "execution_count": 28, "id": "62815940", "metadata": {}, "outputs": [], "source": [ "### ASTER Current FR from Mark Price Req ###\n", "# r = json.loads(requests.get('https://fapi.asterdex.com/fapi/v3/exchangeInfo').text)\n", "# df_aster_current_mkt_stats = pd.DataFrame(r)\n", "# ### ASTER Current FR from Mark Price Req ###\n", "# r = json.loads(requests.get('https://fapi.asterdex.com/fapi/v3/premiumIndex').text)\n", "# df_aster_current_mkt_stats = pd.DataFrame(r)" ] }, { "cell_type": "code", "execution_count": 29, "id": "271a67c1", "metadata": {}, "outputs": [], "source": [ "### ASTER CURRENT FR - WS ###\n", "df_aster_current_fr = pd.DataFrame(json.loads(VAL_KEY.get('fund_rate_aster_all'))) # ty:ignore[invalid-argument-type]\n", "df_aster_current_fr = df_aster_current_fr[['s','E','r','T']].rename({'s':'symbol','E':'funding_rate_updated_ts_ms','r':'funding_rate','T':'next_funding_ts'}, axis=1)\n", "df_aster_current_fr['funding_rate_updated_dt'] = pd.to_datetime(df_aster_current_fr['funding_rate_updated_ts_ms'], unit='ms')\n", "df_aster_current_fr['funding_rate'] = df_aster_current_fr['funding_rate'].astype(float)\n", "df_aster_current_fr['time_delta_to_next_funding'] = pd.to_datetime(df_aster_current_fr['next_funding_ts'], unit='ms') - pd.Timestamp.now()\n", "df_aster_current_fr = df_aster_current_fr.merge(df_aster_exch_info[['symbol','daily_volume','min_order_size','min_price','min_lot_size','min_notional','last_trade_ts_ast']], on='symbol', how='left')" ] }, { "cell_type": "code", "execution_count": 30, "id": "1ce2fde4", "metadata": {}, "outputs": [], "source": [ "### EXTEND CURRENT FR - WS ###\n", "df_extended_current_fr = pd.DataFrame(json.loads(VAL_KEY.get('fund_rate_extended_all'))) # ty:ignore[invalid-argument-type]\n", "df_extended_current_fr = df_extended_current_fr[['symbol','funding_rate_updated_ts_ms','funding_rate']]\n", "df_extended_current_fr['funding_rate_updated_dt'] = pd.to_datetime(df_extended_current_fr['funding_rate_updated_ts_ms'], unit='ms')\n", "df_extended_current_fr['funding_rate'] = df_extended_current_fr['funding_rate'].astype(float)\n", "\n", "# df_extended_current_fr = df_extended_current_fr.merge(df_extend_current_mkt_stats[['name','assetName','status', 'funding_rate_ts','max_leverage']].rename({'name':'symbol','funding_rate_ts':'next_funding_ts'}, axis=1), on='symbol', how='left')\n", "df_extended_current_fr = df_extended_current_fr.merge(df_extend_current_mkt_stats[['name','assetName','status', 'funding_rate_ts','min_order_size','min_price','min_lot_size','min_notional','daily_volume']].rename({'name':'symbol','funding_rate_ts':'next_funding_ts'}, axis=1), on='symbol', how='left')\n", "df_extended_current_fr = df_extended_current_fr.loc[df_extended_current_fr['status']=='ACTIVE',:]\n", "df_extended_current_fr['USDT_Symbol'] = df_extended_current_fr['assetName'] + 'USDT'\n", "df_extended_current_fr['time_delta_to_next_funding'] = pd.to_datetime(df_extended_current_fr['next_funding_ts'], unit='ms') - pd.Timestamp.now()" ] }, { "cell_type": "code", "execution_count": 31, "id": "ff88b413", "metadata": {}, "outputs": [], "source": [ "### COMBINED CURRENT FR - WS ###\n", "df_comb_current_fr = df_extended_current_fr.merge(df_aster_current_fr, left_on='USDT_Symbol', right_on='symbol', how='inner', suffixes=('_ext', '_ast'))\n", "df_comb_current_fr['next_funding_at_same_time'] = (abs(df_comb_current_fr['time_delta_to_next_funding_ext'].dt.total_seconds() - df_comb_current_fr['time_delta_to_next_funding_ast'].dt.total_seconds()) / 60) < 1\n", "df_comb_current_fr['net_funding_rate'] = (df_comb_current_fr[['funding_rate_ext', 'funding_rate_ast']].max(axis=1) - df_comb_current_fr[['funding_rate_ext', 'funding_rate_ast']].min(axis=1)).where(df_comb_current_fr['next_funding_at_same_time'], df_comb_current_fr['funding_rate_ext'])\n", "df_comb_current_fr['net_funding_rate_abs'] = df_comb_current_fr['net_funding_rate'].abs()\n", "\n", "### NET MULT ###\n", "df_comb_current_fr_net = df_comb_current_fr.merge(df_leverage_by_exch.loc[df_leverage_by_exch['exchange']=='EXTEND'], left_on='assetName', right_on='lh_asset').merge(df_leverage_by_exch.loc[df_leverage_by_exch['exchange']=='ASTER'], left_on='assetName', right_on='lh_asset', suffixes=('_ext', '_ast'))\n", "df_comb_current_fr_net['net_mult'] = 1 / ( ( 0.5 / df_comb_current_fr_net['max_leverage_ext'] ) + ( 0.5 / df_comb_current_fr_net['max_leverage_ast'] ) )\n", "df_comb_current_fr_net['net_mult'] = df_comb_current_fr_net['net_mult'].round(2)\n", "df_comb_current_fr_net['net_mult_x_net_fr_abs'] = df_comb_current_fr_net['net_funding_rate_abs'] * df_comb_current_fr_net['net_mult']" ] }, { "cell_type": "code", "execution_count": 32, "id": "f5ade993", "metadata": {}, "outputs": [], "source": [ "df_best_fr_rate = df_comb_current_fr_net[['symbol_ext','symbol_ast','daily_volume_ext','daily_volume_ast','min_price_ext','min_price_ast','min_order_size_ext','min_order_size_ast','min_lot_size_ext','min_lot_size_ast','min_notional_ext','min_notional_ast','funding_rate_ext','funding_rate_ast','max_leverage_ext','max_leverage_ast','lh_asset_ext','lh_asset_ast','rh_asset_ext','rh_asset_ast','net_mult_x_net_fr_abs','net_funding_rate_abs','net_funding_rate','next_funding_at_same_time','last_trade_ts_ast']].sort_values(by='net_mult_x_net_fr_abs', ascending=False).reset_index(drop=True)\n", "df_best_fr_rate['hourly_dollars_per_1k'] = df_best_fr_rate['net_mult_x_net_fr_abs'] * 1000\n", "df_best_fr_rate['hourly_dollars_per_1k'] = df_best_fr_rate['hourly_dollars_per_1k'].round(2)" ] }, { "cell_type": "code", "execution_count": 33, "id": "84bbc5a8", "metadata": {}, "outputs": [], "source": [ "last_trade_max_ts = []\n", "\n", "for index, row in df_best_fr_rate.iterrows():\n", " r = json.loads(requests.get(f'https://api.starknet.extended.exchange/api/v1/info/markets/{row['symbol_ext']}/trades').text)\n", " max_ts = max([t['T'] for t in r['data']])\n", " last_trade_max_ts.append({'symbol_ext':row['symbol_ext'],'last_trade_ts_ext': max_ts})\n", " time.sleep(0.01)\n", "\n", "df_best_fr_rate = df_best_fr_rate.merge(pd.DataFrame(last_trade_max_ts), on='symbol_ext', how='left')" ] }, { "cell_type": "code", "execution_count": 34, "id": "7bd849e4", "metadata": {}, "outputs": [], "source": [ "df_best_fr_rate['last_trade_ts_dt_ast'] = pd.to_datetime(df_best_fr_rate['last_trade_ts_ast'], unit='ms')\n", "df_best_fr_rate['last_trade_ts_dt_ext'] = pd.to_datetime(df_best_fr_rate['last_trade_ts_ext'], unit='ms')\n", "df_best_fr_rate = df_best_fr_rate.loc[( (datetime.now().timestamp()*1000 )-df_best_fr_rate['last_trade_ts_ast']) < (3*60*1000) ]\n", "df_best_fr_rate = df_best_fr_rate.loc[( (datetime.now().timestamp()*1000 )-df_best_fr_rate['last_trade_ts_ext']) < (15*60*1000) ]" ] }, { "cell_type": "code", "execution_count": 35, "id": "86549660", "metadata": {}, "outputs": [], "source": [ "import modules.aster_auth as aster_auth\n", "import modules.utils as utils\n", "\n", "async def get_candles(symbol: str) -> pd.DataFrame:\n", " ### Candles for Midpoint Dispersion ###\n", " # Aster\n", " symbol_ast = utils.symbol_to_aster_fmt(symbol)\n", " aster_candles = {\n", " \"url\": \"/fapi/v3/klines\",\n", " \"method\": \"GET\",\n", " \"params\": {\n", " 'symbol': symbol_ast,\n", " 'interval': '1m',\n", " 'limit':'1440'\n", " }\n", " }\n", " j = await aster_auth.post_authenticated_url(aster_candles)\n", " df_candles_aster = pd.DataFrame(j, columns=['open_ts','open_px','high_px','low_px','close_px','volume','close_ts','quote_asset_volume','count_trades','taker_buy_base_asset_volume','taker_buy_quote_asset_volume','_drop'])\n", " df_candles_aster = df_candles_aster[['open_px', 'low_px', 'high_px', 'close_px', 'volume', 'open_ts']]\n", " df_candles_aster[['open_px', 'low_px', 'high_px', 'close_px', 'volume']] = df_candles_aster[['open_px', 'low_px', 'high_px', 'close_px', 'volume']].astype(float)\n", "\n", " df_candles_aster['med_px'] = ( df_candles_aster['high_px'] + df_candles_aster['low_px'] ) / 2\n", " df_candles_aster['typical_px'] = ( df_candles_aster['open_px'] + df_candles_aster['high_px'] + df_candles_aster['low_px'] + df_candles_aster['close_px'] ) / 4\n", "\n", " # Extend\n", " symbol_ext = utils.symbol_to_extend_fmt(symbol)\n", " ext_params = {\n", " 'interval':'1m',\n", " 'limit':1440,\n", " }\n", " r = json.loads(requests.get(f'https://api.starknet.extended.exchange/api/v1/info/candles/{symbol_ext}/trades', params=ext_params).text)\n", " df_candles_extended = pd.DataFrame(r['data'])\n", " df_candles_extended = df_candles_extended.rename({'o':'open_px','l':'low_px','h':'high_px','c':'close_px','v':'volume','T':'open_ts'}, axis=1)\n", " df_candles_extended[['open_px', 'low_px', 'high_px', 'close_px', 'volume']] = df_candles_extended[['open_px', 'low_px', 'high_px', 'close_px', 'volume']].astype(float)\n", " df_candles_extended['med_px'] = ( df_candles_extended['high_px'] + df_candles_extended['low_px'] ) / 2\n", " df_candles_extended['typical_px'] = ( df_candles_extended['open_px'] + df_candles_extended['high_px'] + df_candles_extended['low_px'] + df_candles_extended['close_px'] ) / 4\n", "\n", " df_candles_comb = df_candles_aster.merge(df_candles_extended, on='open_ts', how='inner', suffixes=('_ast','_ext'))\n", " df_candles_comb['open_dt'] = pd.to_datetime(df_candles_comb['open_ts'], unit='ms')\n", " df_candles_comb['med_ratio_aster_over_extend'] = ( df_candles_comb['med_px_ast'] / df_candles_comb['med_px_ext'] ) - 1\n", "\n", " return df_candles_comb" ] }, { "cell_type": "code", "execution_count": null, "id": "3da1ef8c", "metadata": {}, "outputs": [], "source": [ "candles_ratios = []\n", "\n", "for index, row in df_best_fr_rate.iterrows():\n", " df = await get_candles(symbol=row['symbol_ext'])\n", " buy_ratio_ext = float(df['med_ratio_aster_over_extend'].median())\n", " candles_ratios.append({'symbol_ext':row['symbol_ext'], 'buy_ratio_ext':buy_ratio_ext,'buy_ratio_ast':buy_ratio_ext*-1})\n", "\n", "df_best_fr_rate = df_best_fr_rate.merge(pd.DataFrame(candles_ratios), on='symbol_ext', how='left')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "symbol_ext", "rawType": "str", "type": "string" }, { "name": "symbol_ast", "rawType": "str", "type": "string" }, { "name": "daily_volume_ext", "rawType": "float64", "type": "float" }, { "name": "daily_volume_ast", "rawType": "float64", "type": "float" }, { "name": "min_price_ext", "rawType": "str", "type": "string" }, { "name": "min_price_ast", "rawType": "str", "type": "string" }, { "name": "min_order_size_ext", "rawType": "str", "type": "string" }, { "name": "min_order_size_ast", "rawType": "str", "type": "string" }, { "name": "min_lot_size_ext", "rawType": "str", "type": "string" }, { "name": "min_lot_size_ast", "rawType": "str", "type": "string" }, { "name": "min_notional_ext", "rawType": "float64", "type": "float" }, { "name": "min_notional_ast", "rawType": "str", "type": "string" }, { "name": "funding_rate_ext", "rawType": "float64", "type": "float" }, { "name": "funding_rate_ast", "rawType": "float64", "type": "float" }, { "name": "max_leverage_ext", "rawType": "int64", "type": "integer" }, { "name": "max_leverage_ast", "rawType": "int64", "type": "integer" }, { "name": "lh_asset_ext", "rawType": "str", "type": "string" }, { "name": "lh_asset_ast", "rawType": "str", "type": "string" }, { "name": "rh_asset_ext", "rawType": "str", "type": "string" }, { "name": "rh_asset_ast", "rawType": "str", "type": "string" }, { "name": "net_mult_x_net_fr_abs", "rawType": "float64", "type": "float" }, { "name": "net_funding_rate_abs", "rawType": "float64", "type": "float" }, { "name": "net_funding_rate", "rawType": "float64", "type": "float" }, { "name": "next_funding_at_same_time", "rawType": "bool", "type": "boolean" }, { "name": "last_trade_ts_ast", "rawType": "float64", "type": "float" }, { "name": "hourly_dollars_per_1k", "rawType": "float64", "type": "float" }, { "name": "last_trade_ts_ext", "rawType": "int64", "type": "integer" }, { "name": "last_trade_ts_dt_ast", "rawType": "datetime64[ms]", "type": "datetime" }, { "name": "last_trade_ts_dt_ext", "rawType": "datetime64[ms]", "type": "datetime" }, { "name": "buy_price_ext", "rawType": "float64", "type": "float" }, { "name": "buy_price_ast", "rawType": "float64", "type": "float" } ], "ref": "adde995a-71f2-4ce5-897e-1b8c94baf122", "rows": [ [ "0", "BNB-USD", "BNBUSDT", "8095373.18022", "27967490.3", "0.01", "0.010", "0.01", "0.01", "0.001", "0.01", "0.0", "5", "1.3e-05", "0.0002262", "50", "100", "BNB", "BNB", "USD", "USDT", "0.014214044", "0.0002132", "0.0002132", "True", "1777936598200.0", "14.21", "1777936072912", "2026-05-04 23:16:38.200000", "2026-05-04 23:07:52.912000", "0.0011228796327485968", "-0.0011228796327485968" ], [ "1", "BTC-USD", "BTCUSDT", "488351979.81626", "1481693192.93", "1", "1", "0.0001", "0.001", "0.00001", "0.001", "0.0", "5", "-1.6e-05", "-0.00018598", "50", "150", "BTC", "BTC", "USD", "USDT", "0.0127485", "0.00016998", "0.00016998", "True", "1777936600931.0", "12.75", "1777936599985", "2026-05-04 23:16:40.931000", "2026-05-04 23:16:39.985000", "0.00012664131806006118", "-0.00012664131806006118" ], [ "2", "SOL-USD", "SOLUSDT", "25091089.5396", "91872770.73", "0.01", "0.4200", "0.1", "0.01", "0.01", "0.01", "0.0", "5", "-1.5e-05", "0.0001", "50", "100", "SOL", "SOL", "USD", "USDT", "0.007667050000000001", "0.000115", "0.000115", "True", "1777936599229.0", "7.67", "1777936544932", "2026-05-04 23:16:39.229000", "2026-05-04 23:15:44.932000", "0.00023334500137750513", "-0.00023334500137750513" ], [ "3", "DOGE-USD", "DOGEUSDT", "2591346.53", "28160254.68", "0.00001", "0.002440", "100", "1", "10", "1", "0.0", "5", "1.3e-05", "0.0001", "50", "75", "DOGE", "DOGE", "USD", "USDT", "0.00522", "8.7e-05", "8.7e-05", "True", "1777936600123.0", "5.22", "1777936287673", "2026-05-04 23:16:40.123000", "2026-05-04 23:11:27.673000", "-0.00040496760587160896", "0.00040496760587160896" ], [ "4", "XRP-USD", "XRPUSDT", "13446078.3648", "16676498.36", "0.0001", "0.0143", "10", "0.1", "1", "0.1", "0.0", "5", "-1e-05", "5.291e-05", "50", "100", "XRP", "XRP", "USD", "USDT", "0.004194209700000001", "6.291e-05", "6.291e-05", "True", "1777936600008.0", "4.19", "1777936411533", "2026-05-04 23:16:40.008000", "2026-05-04 23:13:31.533000", "0.0", "-0.0" ], [ "5", "XMR-USD", "XMRUSDT", "1649243.4598", "350789.32", "0.01", "0.01", "0.1", "0.001", "0.01", "0.001", "0.0", "5", "0.000134", "5.656e-05", "25", "50", "XMR", "XMR", "USD", "USDT", "0.0025810752", "7.744e-05", "7.744e-05", "True", "1777936559400.0", "2.58", "1777936419604", "2026-05-04 23:15:59.400000", "2026-05-04 23:13:39.604000", "-3.0867055590966253e-06", "3.0867055590966253e-06" ], [ "6", "ETH-USD", "ETHUSDT", "161696125.296", "656152175.7", "0.1", "0.01", "0.01", "0.001", "0.001", "0.001", "0.0", "5", "-1.9e-05", "-5.123e-05", "50", "150", "ETH", "ETH", "USD", "USDT", "0.00241725", "3.223e-05", "3.223e-05", "True", "1777936600075.0", "2.42", "1777936565323", "2026-05-04 23:16:40.075000", "2026-05-04 23:16:05.323000", "0.0002782506695702125", "-0.0002782506695702125" ], [ "7", "4-USD", "4USDT", "302719.5314", "454834.78", "0.00001", "0.0000010", "100", "1", "10", "1", "0.0", "5", "0.000239", "1.25e-05", "5", "50", "4", "4", "USD", "USDT", "0.002058885", "0.0002265", "0.0002265", "True", "1777936575650.0", "2.06", "1777936522376", "2026-05-04 23:16:15.650000", "2026-05-04 23:15:22.376000", "0.0014364921188296798", "-0.0014364921188296798" ], [ "8", "HYPE-USD", "HYPEUSDT", "43654316.41094", "10530623.22", "0.001", "0.00100", "0.1", "0.01", "0.01", "0.01", "0.0", "5", "1.3e-05", "3.497e-05", "50", "300", "HYPE", "HYPE", "USD", "USDT", "0.0018830487", "2.197e-05", "2.197e-05", "True", "1777936600796.0", "1.88", "1777936590010", "2026-05-04 23:16:40.796000", "2026-05-04 23:16:30.010000", "-0.0001818557371249807", "0.0001818557371249807" ], [ "9", "ENA-USD", "ENAUSDT", "11420296.1562", "400913.34", "0.00001", "0.0000100", "100", "1", "10", "1", "0.0", "5", "1.3e-05", "5e-05", "50", "25", "ENA", "ENA", "USD", "USDT", "0.00123321", "3.7000000000000005e-05", "3.7000000000000005e-05", "True", "1777936593650.0", "1.23", "1777936576866", "2026-05-04 23:16:33.650000", "2026-05-04 23:16:16.866000", "-0.0012409275558957766", "0.0012409275558957766" ], [ "10", "WLFI-USD", "WLFIUSDT", "760135.4338", "4159098.72", "0.00001", "0.0001000", "100", "1", "10", "1", "0.0", "5", "1.3e-05", "7.3e-05", "10", "25", "WLFI", "WLFI", "USD", "USDT", "0.0008574", "6e-05", "6e-05", "True", "1777936585617.0", "0.86", "1777935796212", "2026-05-04 23:16:25.617000", "2026-05-04 23:03:16.212000", "0.002205245675518719", "-0.002205245675518719" ], [ "11", "LIT-USD", "LITUSDT", "1854603.5998", "1350734.67", "0.0001", "0.0001000", "10", "1", "1", "1", "0.0", "5", "1.3e-05", "1.25e-05", "25", "50", "LIT", "LIT", "USD", "USDT", "1.6664999999999953e-05", "4.999999999999986e-07", "4.999999999999986e-07", "True", "1777936570643.0", "0.02", "1777936593781", "2026-05-04 23:16:10.643000", "2026-05-04 23:16:33.781000", "0.0002960668027209845", "-0.0002960668027209845" ], [ "12", "ZEC-USD", "ZECUSDT", "6512462.1458", "4174326.53", "0.001", "0.0100", "0.1", "0.001", "0.1", "0.001", "0.0", "5", "1.3e-05", "1.25e-05", "10", "75", "ZEC", "ZEC", "USD", "USDT", "8.824999999999974e-06", "4.999999999999986e-07", "4.999999999999986e-07", "True", "1777936591300.0", "0.01", "1777936396208", "2026-05-04 23:16:31.300000", "2026-05-04 23:13:16.208000", "-0.0001769694330865934", "0.0001769694330865934" ] ], "shape": { "columns": 31, "rows": 13 } }, "text/html": [ "
| \n", " | symbol_ext | \n", "symbol_ast | \n", "daily_volume_ext | \n", "daily_volume_ast | \n", "min_price_ext | \n", "min_price_ast | \n", "min_order_size_ext | \n", "min_order_size_ast | \n", "min_lot_size_ext | \n", "min_lot_size_ast | \n", "... | \n", "net_funding_rate_abs | \n", "net_funding_rate | \n", "next_funding_at_same_time | \n", "last_trade_ts_ast | \n", "hourly_dollars_per_1k | \n", "last_trade_ts_ext | \n", "last_trade_ts_dt_ast | \n", "last_trade_ts_dt_ext | \n", "buy_price_ext | \n", "buy_price_ast | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "BNB-USD | \n", "BNBUSDT | \n", "8.095373e+06 | \n", "2.796749e+07 | \n", "0.01 | \n", "0.010 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.01 | \n", "... | \n", "2.132000e-04 | \n", "2.132000e-04 | \n", "True | \n", "1.777937e+12 | \n", "14.21 | \n", "1777936072912 | \n", "2026-05-04 23:16:38.200 | \n", "2026-05-04 23:07:52.912 | \n", "0.001123 | \n", "-0.001123 | \n", "
| 1 | \n", "BTC-USD | \n", "BTCUSDT | \n", "4.883520e+08 | \n", "1.481693e+09 | \n", "1 | \n", "1 | \n", "0.0001 | \n", "0.001 | \n", "0.00001 | \n", "0.001 | \n", "... | \n", "1.699800e-04 | \n", "1.699800e-04 | \n", "True | \n", "1.777937e+12 | \n", "12.75 | \n", "1777936599985 | \n", "2026-05-04 23:16:40.931 | \n", "2026-05-04 23:16:39.985 | \n", "0.000127 | \n", "-0.000127 | \n", "
| 2 | \n", "SOL-USD | \n", "SOLUSDT | \n", "2.509109e+07 | \n", "9.187277e+07 | \n", "0.01 | \n", "0.4200 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "1.150000e-04 | \n", "1.150000e-04 | \n", "True | \n", "1.777937e+12 | \n", "7.67 | \n", "1777936544932 | \n", "2026-05-04 23:16:39.229 | \n", "2026-05-04 23:15:44.932 | \n", "0.000233 | \n", "-0.000233 | \n", "
| 3 | \n", "DOGE-USD | \n", "DOGEUSDT | \n", "2.591347e+06 | \n", "2.816025e+07 | \n", "0.00001 | \n", "0.002440 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "8.700000e-05 | \n", "8.700000e-05 | \n", "True | \n", "1.777937e+12 | \n", "5.22 | \n", "1777936287673 | \n", "2026-05-04 23:16:40.123 | \n", "2026-05-04 23:11:27.673 | \n", "-0.000405 | \n", "0.000405 | \n", "
| 4 | \n", "XRP-USD | \n", "XRPUSDT | \n", "1.344608e+07 | \n", "1.667650e+07 | \n", "0.0001 | \n", "0.0143 | \n", "10 | \n", "0.1 | \n", "1 | \n", "0.1 | \n", "... | \n", "6.291000e-05 | \n", "6.291000e-05 | \n", "True | \n", "1.777937e+12 | \n", "4.19 | \n", "1777936411533 | \n", "2026-05-04 23:16:40.008 | \n", "2026-05-04 23:13:31.533 | \n", "0.000000 | \n", "-0.000000 | \n", "
| 5 | \n", "XMR-USD | \n", "XMRUSDT | \n", "1.649243e+06 | \n", "3.507893e+05 | \n", "0.01 | \n", "0.01 | \n", "0.1 | \n", "0.001 | \n", "0.01 | \n", "0.001 | \n", "... | \n", "7.744000e-05 | \n", "7.744000e-05 | \n", "True | \n", "1.777937e+12 | \n", "2.58 | \n", "1777936419604 | \n", "2026-05-04 23:15:59.400 | \n", "2026-05-04 23:13:39.604 | \n", "-0.000003 | \n", "0.000003 | \n", "
| 6 | \n", "ETH-USD | \n", "ETHUSDT | \n", "1.616961e+08 | \n", "6.561522e+08 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.001 | \n", "0.001 | \n", "... | \n", "3.223000e-05 | \n", "3.223000e-05 | \n", "True | \n", "1.777937e+12 | \n", "2.42 | \n", "1777936565323 | \n", "2026-05-04 23:16:40.075 | \n", "2026-05-04 23:16:05.323 | \n", "0.000278 | \n", "-0.000278 | \n", "
| 7 | \n", "4-USD | \n", "4USDT | \n", "3.027195e+05 | \n", "4.548348e+05 | \n", "0.00001 | \n", "0.0000010 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "2.265000e-04 | \n", "2.265000e-04 | \n", "True | \n", "1.777937e+12 | \n", "2.06 | \n", "1777936522376 | \n", "2026-05-04 23:16:15.650 | \n", "2026-05-04 23:15:22.376 | \n", "0.001436 | \n", "-0.001436 | \n", "
| 8 | \n", "HYPE-USD | \n", "HYPEUSDT | \n", "4.365432e+07 | \n", "1.053062e+07 | \n", "0.001 | \n", "0.00100 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "2.197000e-05 | \n", "2.197000e-05 | \n", "True | \n", "1.777937e+12 | \n", "1.88 | \n", "1777936590010 | \n", "2026-05-04 23:16:40.796 | \n", "2026-05-04 23:16:30.010 | \n", "-0.000182 | \n", "0.000182 | \n", "
| 9 | \n", "ENA-USD | \n", "ENAUSDT | \n", "1.142030e+07 | \n", "4.009133e+05 | \n", "0.00001 | \n", "0.0000100 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "3.700000e-05 | \n", "3.700000e-05 | \n", "True | \n", "1.777937e+12 | \n", "1.23 | \n", "1777936576866 | \n", "2026-05-04 23:16:33.650 | \n", "2026-05-04 23:16:16.866 | \n", "-0.001241 | \n", "0.001241 | \n", "
| 10 | \n", "WLFI-USD | \n", "WLFIUSDT | \n", "7.601354e+05 | \n", "4.159099e+06 | \n", "0.00001 | \n", "0.0001000 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "6.000000e-05 | \n", "6.000000e-05 | \n", "True | \n", "1.777937e+12 | \n", "0.86 | \n", "1777935796212 | \n", "2026-05-04 23:16:25.617 | \n", "2026-05-04 23:03:16.212 | \n", "0.002205 | \n", "-0.002205 | \n", "
| 11 | \n", "LIT-USD | \n", "LITUSDT | \n", "1.854604e+06 | \n", "1.350735e+06 | \n", "0.0001 | \n", "0.0001000 | \n", "10 | \n", "1 | \n", "1 | \n", "1 | \n", "... | \n", "5.000000e-07 | \n", "5.000000e-07 | \n", "True | \n", "1.777937e+12 | \n", "0.02 | \n", "1777936593781 | \n", "2026-05-04 23:16:10.643 | \n", "2026-05-04 23:16:33.781 | \n", "0.000296 | \n", "-0.000296 | \n", "
| 12 | \n", "ZEC-USD | \n", "ZECUSDT | \n", "6.512462e+06 | \n", "4.174327e+06 | \n", "0.001 | \n", "0.0100 | \n", "0.1 | \n", "0.001 | \n", "0.1 | \n", "0.001 | \n", "... | \n", "5.000000e-07 | \n", "5.000000e-07 | \n", "True | \n", "1.777937e+12 | \n", "0.01 | \n", "1777936396208 | \n", "2026-05-04 23:16:31.300 | \n", "2026-05-04 23:13:16.208 | \n", "-0.000177 | \n", "0.000177 | \n", "
13 rows × 31 columns
\n", "