{ "cells": [ { "cell_type": "code", "execution_count": 53, "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": 54, "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": 55, "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": 56, "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", "df_aster_ticker_stats['last_trade_px_ast'] = df_aster_ticker_stats['lastPrice'].astype(float)\n", "\n", "df_aster_exch_info = df_aster_exch_info.merge(df_aster_ticker_stats[['symbol','quoteVolume','last_trade_ts_ast','last_trade_px_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": 57, "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": 58, "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": 59, "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', 'last_trade_px_ast']], on='symbol', how='left')" ] }, { "cell_type": "code", "execution_count": 60, "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": 61, "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": 62, "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','last_trade_px_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": 63, "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", " px = np.median([float(t['p']) for t in r['data'] if t['T']==max_ts])\n", " last_trade_max_ts.append({'symbol_ext':row['symbol_ext'],'last_trade_ts_ext': max_ts, 'last_trade_px_ext': float(px)})\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": 64, "id": "7bd849e4", "metadata": {}, "outputs": [], "source": [ "df_best_fr_rate['current_ast_over_ext_ratio'] = ( df_best_fr_rate['last_trade_px_ast'] / df_best_fr_rate['last_trade_px_ext'] ) - 1\n", "\n", "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": 65, "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, limit: int = 1440) -> 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': str(limit)\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':limit,\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": 66, "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'], limit=60)\n", " buy_ratio_ext = float(df['med_ratio_aster_over_extend'].median())\n", " buy_ratio_std = float(df['med_ratio_aster_over_extend'].std())\n", " candles_ratios.append({'symbol_ext':row['symbol_ext'], 'buy_ratio_std': buy_ratio_std, '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": 67, "id": "617bdb3a", "metadata": {}, "outputs": [ { "data": { "application/vnd.microsoft.datawrangler.viewer.v0+json": { "columns": [ { "name": "index", "rawType": "int64", "type": "integer" }, { "name": "buy_ratio_ext", "rawType": "float64", "type": "float" }, { "name": "current_ast_over_ext_ratio", "rawType": "float64", "type": "float" } ], "ref": "c07086f0-a5dd-448a-bf8b-9d7d1036b124", "rows": [ [ "0", "-0.0014575731912411793", "-0.0019243104554201862" ], [ "1", "0.0004248737346173037", "0.001066716137559931" ], [ "2", "0.0011111250413217144", "0.0035238241152137917" ], [ "3", "-0.0012642225031604393", "0.0" ], [ "4", "0.0008804686854790855", "0.00109728769028683" ], [ "5", "7.042997534656426e-05", "-0.00028174966542227065" ], [ "6", "0.0003110432393981233", "0.00032471046650073276" ], [ "7", "0.00023022365545255496", "1.2962322848197871e-05" ], [ "8", "0.00024157903956023574", "9.619228462920404e-05" ], [ "9", "0.0005839416058395219", "0.0016601562500000444" ], [ "10", "-0.0005409030918021029", "-0.0008003875195105037" ] ], "shape": { "columns": 2, "rows": 11 } }, "text/html": [ "
| \n", " | buy_ratio_ext | \n", "current_ast_over_ext_ratio | \n", "
|---|---|---|
| 0 | \n", "-0.001458 | \n", "-0.001924 | \n", "
| 1 | \n", "0.000425 | \n", "0.001067 | \n", "
| 2 | \n", "0.001111 | \n", "0.003524 | \n", "
| 3 | \n", "-0.001264 | \n", "0.000000 | \n", "
| 4 | \n", "0.000880 | \n", "0.001097 | \n", "
| 5 | \n", "0.000070 | \n", "-0.000282 | \n", "
| 6 | \n", "0.000311 | \n", "0.000325 | \n", "
| 7 | \n", "0.000230 | \n", "0.000013 | \n", "
| 8 | \n", "0.000242 | \n", "0.000096 | \n", "
| 9 | \n", "0.000584 | \n", "0.001660 | \n", "
| 10 | \n", "-0.000541 | \n", "-0.000800 | \n", "
| \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", "last_trade_px_ast | \n", "hourly_dollars_per_1k | \n", "last_trade_ts_ext | \n", "last_trade_px_ext | \n", "current_ast_over_ext_ratio | \n", "last_trade_ts_dt_ast | \n", "last_trade_ts_dt_ext | \n", "buy_ratio_std | \n", "buy_ratio_ext | \n", "buy_ratio_ast | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "DOGE-USD | \n", "DOGEUSDT | \n", "7.418300e+06 | \n", "1.660693e+07 | \n", "0.00001 | \n", "0.002440 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.10892 | \n", "3.18 | \n", "1778269090953 | \n", "0.10913 | \n", "-0.001924 | \n", "2026-05-08 19:45:53.033 | \n", "2026-05-08 19:38:10.953 | \n", "0.000135 | \n", "-0.001458 | \n", "0.001458 | \n", "
| 1 | \n", "HYPE-USD | \n", "HYPEUSDT | \n", "2.970393e+07 | \n", "1.011506e+07 | \n", "0.001 | \n", "0.00100 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "43.16900 | \n", "3.17 | \n", "1778269555095 | \n", "43.12300 | \n", "0.001067 | \n", "2026-05-08 19:45:49.714 | \n", "2026-05-08 19:45:55.095 | \n", "0.000141 | \n", "0.000425 | \n", "-0.000425 | \n", "
| 2 | \n", "ENA-USD | \n", "ENAUSDT | \n", "7.908770e+06 | \n", "2.097943e+05 | \n", "0.00001 | \n", "0.0000100 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.13100 | \n", "1.97 | \n", "1778269477041 | \n", "0.13054 | \n", "0.003524 | \n", "2026-05-08 19:43:02.100 | \n", "2026-05-08 19:44:37.041 | \n", "0.002856 | \n", "0.001111 | \n", "-0.001111 | \n", "
| 3 | \n", "WLFI-USD | \n", "WLFIUSDT | \n", "6.712412e+05 | \n", "5.913232e+06 | \n", "0.00001 | \n", "0.0001000 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.07510 | \n", "1.16 | \n", "1778269500844 | \n", "0.07510 | \n", "0.000000 | \n", "2026-05-08 19:45:52.800 | \n", "2026-05-08 19:45:00.844 | \n", "0.000626 | \n", "-0.001264 | \n", "0.001264 | \n", "
| 4 | \n", "BNB-USD | \n", "BNBUSDT | \n", "8.044718e+06 | \n", "2.578588e+07 | \n", "0.01 | \n", "0.010 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.01 | \n", "... | \n", "647.76000 | \n", "0.87 | \n", "1778269033011 | \n", "647.05000 | \n", "0.001097 | \n", "2026-05-08 19:45:51.855 | \n", "2026-05-08 19:37:13.011 | \n", "0.000065 | \n", "0.000880 | \n", "-0.000880 | \n", "
| 5 | \n", "XRP-USD | \n", "XRPUSDT | \n", "1.030289e+07 | \n", "1.478353e+07 | \n", "0.0001 | \n", "0.0143 | \n", "10 | \n", "0.1 | \n", "1 | \n", "0.1 | \n", "... | \n", "1.41930 | \n", "0.80 | \n", "1778269539805 | \n", "1.41970 | \n", "-0.000282 | \n", "2026-05-08 19:45:48.899 | \n", "2026-05-08 19:45:39.805 | \n", "0.000099 | \n", "0.000070 | \n", "-0.000070 | \n", "
| 6 | \n", "SOL-USD | \n", "SOLUSDT | \n", "2.367904e+07 | \n", "9.585233e+07 | \n", "0.01 | \n", "0.4200 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "92.42000 | \n", "0.67 | \n", "1778269530967 | \n", "92.39000 | \n", "0.000325 | \n", "2026-05-08 19:45:51.900 | \n", "2026-05-08 19:45:30.967 | \n", "0.000099 | \n", "0.000311 | \n", "-0.000311 | \n", "
| 7 | \n", "ETH-USD | \n", "ETHUSDT | \n", "1.222569e+08 | \n", "4.115258e+08 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.001 | \n", "0.001 | \n", "... | \n", "2314.43000 | \n", "0.60 | \n", "1778269529430 | \n", "2314.40000 | \n", "0.000013 | \n", "2026-05-08 19:45:52.750 | \n", "2026-05-08 19:45:29.430 | \n", "0.000094 | \n", "0.000230 | \n", "-0.000230 | \n", "
| 8 | \n", "BTC-USD | \n", "BTCUSDT | \n", "2.685141e+08 | \n", "7.113480e+08 | \n", "1 | \n", "1 | \n", "0.0001 | \n", "0.001 | \n", "0.00001 | \n", "0.001 | \n", "... | \n", "80055.70000 | \n", "0.45 | \n", "1778269551481 | \n", "80048.00000 | \n", "0.000096 | \n", "2026-05-08 19:45:52.805 | \n", "2026-05-08 19:45:51.481 | \n", "0.000082 | \n", "0.000242 | \n", "-0.000242 | \n", "
| 9 | \n", "LIT-USD | \n", "LITUSDT | \n", "3.087718e+06 | \n", "7.308685e+05 | \n", "0.0001 | \n", "0.0001000 | \n", "10 | \n", "1 | \n", "1 | \n", "1 | \n", "... | \n", "1.02570 | \n", "0.02 | \n", "1778269522019 | \n", "1.02400 | \n", "0.001660 | \n", "2026-05-08 19:44:04.106 | \n", "2026-05-08 19:45:22.019 | \n", "0.001079 | \n", "0.000584 | \n", "-0.000584 | \n", "
| 10 | \n", "ZEC-USD | \n", "ZECUSDT | \n", "3.023629e+06 | \n", "6.524402e+06 | \n", "0.001 | \n", "0.0100 | \n", "0.1 | \n", "0.001 | \n", "0.1 | \n", "0.001 | \n", "... | \n", "575.51000 | \n", "0.01 | \n", "1778269518308 | \n", "575.97100 | \n", "-0.000800 | \n", "2026-05-08 19:45:39.433 | \n", "2026-05-08 19:45:18.308 | \n", "0.000630 | \n", "-0.000541 | \n", "0.000541 | \n", "
11 rows × 35 columns
\n", "