{ "cells": [ { "cell_type": "code", "execution_count": 155, "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": 156, "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": 157, "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": 158, "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": 159, "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": 160, "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": 161, "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": 162, "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": 163, "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": 164, "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": 165, "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": 166, "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": 167, "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": 168, "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", " 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": 169, "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": "234d26fb-bae0-44d4-b286-7995c40f5493", "rows": [ [ "0", "-0.001181480884319741", "-0.003622563394859446" ], [ "1", "0.00029906773980648005", "-0.0005162089613875986" ], [ "2", "0.00013074942172808246", "-0.00015921393804296802" ], [ "3", "0.0010505163053042832", "0.0007245691963582157" ], [ "4", "0.00011580440645486689", "-0.0014865637507147644" ], [ "5", "0.00021061518497555998", "-0.001820204267367842" ], [ "6", "0.00021041337278360217", "0.00016516325752768957" ], [ "7", "0.00476737157079099", "0.005802562170308834" ], [ "8", "-0.0007417494377083833", "-0.0027350527894597354" ], [ "9", "-9.917334996478733e-05", "-3.6865000368702106e-05" ], [ "10", "0.00021180831354239427", "-7.02444506883726e-05" ], [ "11", "9.690676685325528e-05", "3.815149836938758e-05" ], [ "12", "1.3323150701682884e-05", "-0.0004138239160925705" ] ], "shape": { "columns": 2, "rows": 13 } }, "text/html": [ "
| \n", " | buy_ratio_ext | \n", "current_ast_over_ext_ratio | \n", "
|---|---|---|
| 0 | \n", "-0.001181 | \n", "-0.003623 | \n", "
| 1 | \n", "0.000299 | \n", "-0.000516 | \n", "
| 2 | \n", "0.000131 | \n", "-0.000159 | \n", "
| 3 | \n", "0.001051 | \n", "0.000725 | \n", "
| 4 | \n", "0.000116 | \n", "-0.001487 | \n", "
| 5 | \n", "0.000211 | \n", "-0.001820 | \n", "
| 6 | \n", "0.000210 | \n", "0.000165 | \n", "
| 7 | \n", "0.004767 | \n", "0.005803 | \n", "
| 8 | \n", "-0.000742 | \n", "-0.002735 | \n", "
| 9 | \n", "-0.000099 | \n", "-0.000037 | \n", "
| 10 | \n", "0.000212 | \n", "-0.000070 | \n", "
| 11 | \n", "0.000097 | \n", "0.000038 | \n", "
| 12 | \n", "0.000013 | \n", "-0.000414 | \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", "6.750571e+06 | \n", "2.321757e+07 | \n", "0.00001 | \n", "0.002440 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.115520 | \n", "3.24 | \n", "1778047363102 | \n", "0.115940 | \n", "-0.003623 | \n", "2026-05-06 06:07:47.600 | \n", "2026-05-06 06:02:43.102 | \n", "0.001433 | \n", "-0.001181 | \n", "0.001181 | \n", "
| 1 | \n", "LIT-USD | \n", "LITUSDT | \n", "2.522778e+06 | \n", "7.523452e+05 | \n", "0.0001 | \n", "0.0001000 | \n", "10 | \n", "1 | \n", "1 | \n", "1 | \n", "... | \n", "0.968100 | \n", "2.01 | \n", "1778047669181 | \n", "0.968600 | \n", "-0.000516 | \n", "2026-05-06 06:07:21.000 | \n", "2026-05-06 06:07:49.181 | \n", "0.002622 | \n", "0.000299 | \n", "-0.000299 | \n", "
| 2 | \n", "HYPE-USD | \n", "HYPEUSDT | \n", "5.863991e+07 | \n", "1.255636e+07 | \n", "0.001 | \n", "0.00100 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "43.959000 | \n", "1.63 | \n", "1778047650011 | \n", "43.966000 | \n", "-0.000159 | \n", "2026-05-06 06:07:47.153 | \n", "2026-05-06 06:07:30.011 | \n", "0.001804 | \n", "0.000131 | \n", "-0.000131 | \n", "
| 3 | \n", "BNB-USD | \n", "BNBUSDT | \n", "9.050764e+06 | \n", "1.487197e+07 | \n", "0.01 | \n", "0.010 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.01 | \n", "... | \n", "635.320000 | \n", "0.87 | \n", "1778047650009 | \n", "634.860000 | \n", "0.000725 | \n", "2026-05-06 06:07:47.495 | \n", "2026-05-06 06:07:30.009 | \n", "0.002553 | \n", "0.001051 | \n", "-0.001051 | \n", "
| 4 | \n", "SOL-USD | \n", "SOLUSDT | \n", "2.257412e+07 | \n", "6.243654e+07 | \n", "0.01 | \n", "0.4200 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "87.320000 | \n", "0.87 | \n", "1778047602027 | \n", "87.450000 | \n", "-0.001487 | \n", "2026-05-06 06:07:47.855 | \n", "2026-05-06 06:06:42.027 | \n", "0.000776 | \n", "0.000116 | \n", "-0.000116 | \n", "
| 5 | \n", "SUI-USD | \n", "SUIUSDT | \n", "5.872095e+06 | \n", "2.857091e+05 | \n", "0.0001 | \n", "0.000100 | \n", "10 | \n", "0.1 | \n", "1 | \n", "0.1 | \n", "... | \n", "0.987100 | \n", "0.78 | \n", "1778047576123 | \n", "0.988900 | \n", "-0.001820 | \n", "2026-05-06 06:07:46.700 | \n", "2026-05-06 06:06:16.123 | \n", "0.004226 | \n", "0.000211 | \n", "-0.000211 | \n", "
| 6 | \n", "ETH-USD | \n", "ETHUSDT | \n", "6.121374e+07 | \n", "4.044987e+08 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.001 | \n", "0.001 | \n", "... | \n", "2361.690000 | \n", "0.68 | \n", "1778047670911 | \n", "2361.300000 | \n", "0.000165 | \n", "2026-05-06 06:07:48.250 | \n", "2026-05-06 06:07:50.911 | \n", "0.000685 | \n", "0.000210 | \n", "-0.000210 | \n", "
| 7 | \n", "4-USD | \n", "4USDT | \n", "3.209672e+05 | \n", "3.135862e+05 | \n", "0.00001 | \n", "0.0000010 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.013347 | \n", "0.67 | \n", "1778047526553 | \n", "0.013270 | \n", "0.005803 | \n", "2026-05-06 06:06:17.183 | \n", "2026-05-06 06:05:26.553 | \n", "0.024450 | \n", "0.004767 | \n", "-0.004767 | \n", "
| 8 | \n", "ASTER-USD | \n", "ASTERUSDT | \n", "3.228248e+05 | \n", "4.170694e+07 | \n", "0.00001 | \n", "0.00010 | \n", "10 | \n", "0.01 | \n", "1 | \n", "0.01 | \n", "... | \n", "0.678200 | \n", "0.49 | \n", "1778047182945 | \n", "0.680060 | \n", "-0.002735 | \n", "2026-05-06 06:07:48.250 | \n", "2026-05-06 05:59:42.945 | \n", "0.001276 | \n", "-0.000742 | \n", "0.000742 | \n", "
| 9 | \n", "CHIP-USD | \n", "CHIPUSDT | \n", "4.525915e+05 | \n", "2.374932e+05 | \n", "0.000001 | \n", "0.0000100 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.054250 | \n", "0.48 | \n", "1778047490911 | \n", "0.054252 | \n", "-0.000037 | \n", "2026-05-06 06:06:17.697 | \n", "2026-05-06 06:04:50.911 | \n", "0.041605 | \n", "-0.000099 | \n", "0.000099 | \n", "
| 10 | \n", "XRP-USD | \n", "XRPUSDT | \n", "9.026962e+06 | \n", "1.613476e+07 | \n", "0.0001 | \n", "0.0143 | \n", "10 | \n", "0.1 | \n", "1 | \n", "0.1 | \n", "... | \n", "1.423500 | \n", "0.27 | \n", "1778047623101 | \n", "1.423600 | \n", "-0.000070 | \n", "2026-05-06 06:07:45.356 | \n", "2026-05-06 06:07:03.101 | \n", "0.004379 | \n", "0.000212 | \n", "-0.000212 | \n", "
| 11 | \n", "BTC-USD | \n", "BTCUSDT | \n", "1.828855e+08 | \n", "9.794189e+08 | \n", "1 | \n", "1 | \n", "0.0001 | \n", "0.001 | \n", "0.00001 | \n", "0.001 | \n", "... | \n", "81258.100000 | \n", "0.22 | \n", "1778047671637 | \n", "81255.000000 | \n", "0.000038 | \n", "2026-05-06 06:07:46.657 | \n", "2026-05-06 06:07:51.637 | \n", "0.000999 | \n", "0.000097 | \n", "-0.000097 | \n", "
| 12 | \n", "ZEC-USD | \n", "ZECUSDT | \n", "6.849535e+06 | \n", "6.584711e+06 | \n", "0.001 | \n", "0.0100 | \n", "0.1 | \n", "0.001 | \n", "0.1 | \n", "0.001 | \n", "... | \n", "545.900000 | \n", "0.01 | \n", "1778047665513 | \n", "546.126000 | \n", "-0.000414 | \n", "2026-05-06 06:07:46.530 | \n", "2026-05-06 06:07:45.513 | \n", "0.003199 | \n", "0.000013 | \n", "-0.000013 | \n", "
13 rows × 35 columns
\n", "