{ "cells": [ { "cell_type": "code", "execution_count": 1, "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": 2, "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": 3, "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": 4, "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": 5, "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": 6, "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": 7, "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": 8, "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": 9, "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": 10, "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": 11, "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": 12, "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": 14, "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": 15, "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": 16, "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": "41f1a58f-087e-48a8-9829-27de7bd3bd44", "rows": [ [ "0", "0.00047961685177977387", "0.00010676916506513479" ], [ "1", "0.00039197315461914073", "0.007192868347553283" ], [ "2", "0.0002912986303861276", "0.0005358432541993086" ], [ "3", "0.0009604511021952256", "0.0004019230471949964" ], [ "4", "0.00030683403068354487", "0.00012883830792365103" ], [ "5", "-0.001055302332891861", "-0.0023480538246184457" ], [ "6", "7.095469542717225e-05", "-0.0004262271790863581" ], [ "7", "0.00013706284207826158", "-1.975479362426036e-05" ], [ "8", "0.00016960651288999706", "-0.00033863867253636215" ], [ "9", "0.0013806103592610697", "0.002941176470588225" ], [ "10", "-0.0005592593208220142", "-0.00045253363649400136" ], [ "11", "-0.0015596592214837668", "0.006847133757961643" ] ], "shape": { "columns": 2, "rows": 12 } }, "text/html": [ "
| \n", " | buy_ratio_ext | \n", "current_ast_over_ext_ratio | \n", "
|---|---|---|
| 0 | \n", "0.000480 | \n", "0.000107 | \n", "
| 1 | \n", "0.000392 | \n", "0.007193 | \n", "
| 2 | \n", "0.000291 | \n", "0.000536 | \n", "
| 3 | \n", "0.000960 | \n", "0.000402 | \n", "
| 4 | \n", "0.000307 | \n", "0.000129 | \n", "
| 5 | \n", "-0.001055 | \n", "-0.002348 | \n", "
| 6 | \n", "0.000071 | \n", "-0.000426 | \n", "
| 7 | \n", "0.000137 | \n", "-0.000020 | \n", "
| 8 | \n", "0.000170 | \n", "-0.000339 | \n", "
| 9 | \n", "0.001381 | \n", "0.002941 | \n", "
| 10 | \n", "-0.000559 | \n", "-0.000453 | \n", "
| 11 | \n", "-0.001560 | \n", "0.006847 | \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", "LIT-USD | \n", "LITUSDT | \n", "1.377303e+06 | \n", "9.679359e+05 | \n", "0.0001 | \n", "0.0001000 | \n", "10 | \n", "1 | \n", "1 | \n", "1 | \n", "... | \n", "0.936700 | \n", "1.81 | \n", "1778133698241 | \n", "0.936600 | \n", "0.000107 | \n", "2026-05-07 06:05:11.550 | \n", "2026-05-07 06:01:38.241 | \n", "0.000535 | \n", "0.000480 | \n", "-0.000480 | \n", "
| 1 | \n", "CHIP-USD | \n", "CHIPUSDT | \n", "2.817108e+05 | \n", "3.067199e+05 | \n", "0.000001 | \n", "0.0000100 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.052650 | \n", "1.15 | \n", "1778133309735 | \n", "0.052274 | \n", "0.007193 | \n", "2026-05-07 06:02:49.370 | \n", "2026-05-07 05:55:09.735 | \n", "0.001171 | \n", "0.000392 | \n", "-0.000392 | \n", "
| 2 | \n", "HYPE-USD | \n", "HYPEUSDT | \n", "4.326806e+07 | \n", "1.038774e+07 | \n", "0.001 | \n", "0.00100 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "42.946000 | \n", "1.11 | \n", "1778133930025 | \n", "42.923000 | \n", "0.000536 | \n", "2026-05-07 06:05:36.887 | \n", "2026-05-07 06:05:30.025 | \n", "0.000131 | \n", "0.000291 | \n", "-0.000291 | \n", "
| 3 | \n", "BNB-USD | \n", "BNBUSDT | \n", "8.459935e+06 | \n", "3.597783e+07 | \n", "0.01 | \n", "0.010 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.01 | \n", "... | \n", "647.150000 | \n", "0.87 | \n", "1778133707748 | \n", "646.890000 | \n", "0.000402 | \n", "2026-05-07 06:05:37.113 | \n", "2026-05-07 06:01:47.748 | \n", "0.000072 | \n", "0.000960 | \n", "-0.000960 | \n", "
| 4 | \n", "ETH-USD | \n", "ETHUSDT | \n", "1.026497e+08 | \n", "5.770904e+08 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.001 | \n", "0.001 | \n", "0.001 | \n", "... | \n", "2328.800000 | \n", "0.82 | \n", "1778133918939 | \n", "2328.500000 | \n", "0.000129 | \n", "2026-05-07 06:05:36.351 | \n", "2026-05-07 06:05:18.939 | \n", "0.000063 | \n", "0.000307 | \n", "-0.000307 | \n", "
| 5 | \n", "DOGE-USD | \n", "DOGEUSDT | \n", "7.132958e+06 | \n", "4.141854e+07 | \n", "0.00001 | \n", "0.002440 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.110470 | \n", "0.78 | \n", "1778133750010 | \n", "0.110730 | \n", "-0.002348 | \n", "2026-05-07 06:05:35.896 | \n", "2026-05-07 06:02:30.010 | \n", "0.000081 | \n", "-0.001055 | \n", "0.001055 | \n", "
| 6 | \n", "XRP-USD | \n", "XRPUSDT | \n", "1.056095e+07 | \n", "1.776935e+07 | \n", "0.0001 | \n", "0.0143 | \n", "10 | \n", "0.1 | \n", "1 | \n", "0.1 | \n", "... | \n", "1.407100 | \n", "0.67 | \n", "1778133915802 | \n", "1.407700 | \n", "-0.000426 | \n", "2026-05-07 06:05:35.776 | \n", "2026-05-07 06:05:15.802 | \n", "0.000073 | \n", "0.000071 | \n", "-0.000071 | \n", "
| 7 | \n", "BTC-USD | \n", "BTCUSDT | \n", "2.331171e+08 | \n", "1.009997e+09 | \n", "1 | \n", "1 | \n", "0.0001 | \n", "0.001 | \n", "0.00001 | \n", "0.001 | \n", "... | \n", "80991.400000 | \n", "0.45 | \n", "1778133936053 | \n", "80993.000000 | \n", "-0.000020 | \n", "2026-05-07 06:05:36.703 | \n", "2026-05-07 06:05:36.053 | \n", "0.000082 | \n", "0.000137 | \n", "-0.000137 | \n", "
| 8 | \n", "SOL-USD | \n", "SOLUSDT | \n", "2.213780e+07 | \n", "9.966792e+07 | \n", "0.01 | \n", "0.4200 | \n", "0.1 | \n", "0.01 | \n", "0.01 | \n", "0.01 | \n", "... | \n", "88.560000 | \n", "0.27 | \n", "1778133917319 | \n", "88.590000 | \n", "-0.000339 | \n", "2026-05-07 06:05:36.390 | \n", "2026-05-07 06:05:17.319 | \n", "0.000088 | \n", "0.000170 | \n", "-0.000170 | \n", "
| 9 | \n", "WLFI-USD | \n", "WLFIUSDT | \n", "2.719616e+05 | \n", "1.499330e+06 | \n", "0.00001 | \n", "0.0001000 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.068200 | \n", "0.13 | \n", "1778133657113 | \n", "0.068000 | \n", "0.002941 | \n", "2026-05-07 06:05:09.230 | \n", "2026-05-07 06:00:57.113 | \n", "0.000833 | \n", "0.001381 | \n", "-0.001381 | \n", "
| 10 | \n", "ZEC-USD | \n", "ZECUSDT | \n", "8.617919e+06 | \n", "1.356894e+07 | \n", "0.001 | \n", "0.0100 | \n", "0.1 | \n", "0.001 | \n", "0.1 | \n", "0.001 | \n", "... | \n", "543.360000 | \n", "0.01 | \n", "1778133929212 | \n", "543.606000 | \n", "-0.000453 | \n", "2026-05-07 06:05:35.200 | \n", "2026-05-07 06:05:29.212 | \n", "0.000227 | \n", "-0.000559 | \n", "0.000559 | \n", "
| 11 | \n", "4-USD | \n", "4USDT | \n", "1.821963e+05 | \n", "1.286953e+05 | \n", "0.00001 | \n", "0.0000010 | \n", "100 | \n", "1 | \n", "10 | \n", "1 | \n", "... | \n", "0.012646 | \n", "0.00 | \n", "1778133456831 | \n", "0.012560 | \n", "0.006847 | \n", "2026-05-07 06:05:01.400 | \n", "2026-05-07 05:57:36.831 | \n", "0.004118 | \n", "-0.001560 | \n", "0.001560 | \n", "
12 rows × 35 columns
\n", "