From 5f945f8b08e8411b688c7d3aec2bb2dcd07dafe6 Mon Sep 17 00:00:00 2001 From: stevekeyharvey Date: Tue, 5 May 2026 16:38:45 +0000 Subject: [PATCH] saving --- algo.ipynb | 989 +- algo_config.json | 2 +- aster.ipynb | 6805 +++++++++++++- engine_best_funding_rate.ipynb | 14846 +++++++++++++++++++++++++++++-- engine_best_funding_rate.py | 64 +- extended.ipynb | 36 +- main.py | 933 +- main_trading_only.py | 870 ++ main_v1.py | 1066 +++ modules/structs.py | 92 +- 10 files changed, 24326 insertions(+), 1377 deletions(-) create mode 100644 main_trading_only.py create mode 100644 main_v1.py diff --git a/algo.ipynb b/algo.ipynb index 6be8deb..1b6c89b 100644 --- a/algo.ipynb +++ b/algo.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "id": "d1eed397", "metadata": {}, "outputs": [], @@ -13,6 +13,7 @@ "import valkey\n", "import modules.utils as utils\n", "from decimal import Decimal, ROUND_DOWN\n", + "from typing import Any\n", "\n", "with open('algo_config.json', 'r', encoding='utf-8') as file:\n", " ALGO_CONFIG = json.load(file)\n", @@ -21,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 9, "id": "c6151613", "metadata": {}, "outputs": [], @@ -31,27 +32,16 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "id": "d83c61e5", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "config_update = {\n", " 'Config': {\n", " # 'Price_Worsener_Aster': 1,\n", " # 'Price_Worsener_Extend': -1\n", - " 'Min_Time_To_Funding_Minutes': 55\n", + " 'Min_Time_To_Funding_Minutes': 60\n", " },\n", " 'Logging': {\n", " 'Log_Summary_Each_Loop': False,\n", @@ -64,72 +54,244 @@ " # 'Flatten_Open_Positions_Opportunistic': False,\n", " # },\n", "}\n", - "VAL_KEY.publish('fr_orchestrator_input', json.dumps(config_update))" + "# VAL_KEY.publish('fr_orchestrator_input', json.dumps(config_update))" ] }, { "cell_type": "code", - "execution_count": 52, - "id": "f5260342", + "execution_count": 13, + "id": "7e448690", + "metadata": {}, + "outputs": [], + "source": [ + "### ALGO FLOW ###\n", + "best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_output')) # ty:ignore[invalid-argument-type]\n", + "Aster = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER'])\n", + "Extend = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND'])\n", + " \n", + " # await get_aster_exch_info(symbol_override=Open_Symbols[0])\n", + " # await get_extend_exch_info(symbol_override=Open_Symbols[0])\n", + "\n", + "with open('algo_config.json', mode='r', encoding='utf-8') as file:\n", + " Config = json.load(file)\n", + " Config = structs.Algo_Config(**Config)\n", + "\n", + "Config.Config.Max_Target_Notional = float(min([Aster.mult, Extend.mult]) * Config.Config.Target_Open_Cash_Position)\n", + "# logging.info(f'Initial Algo Config: {ALGO_CONFIG}')\n", + "\n", + "VAL_KEY.set(name='fr_orchestrator_output', value=json.dumps(obj=Config.model_dump()))\n", + "VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)}))\n", + "\n", + "aster_ticker_dict: Any = VAL_KEY.get('fut_ticker_aster')\n", + "aster_ticker_dict: dict = json.loads(s=aster_ticker_dict) if aster_ticker_dict is not None else {}\n", + "if ( aster_ticker_dict.get('symbol', None) != Aster.symbol ) and not(Config.Overrides.Flatten_Open_Positions):\n", + " VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)}))\n", + "\n", + " # raise ValueError(f'ASTER Symbol mismatch: {ASTER_TICKER_DICT}; expected symbol: {ASTER.symbol}')\n", + "\n", + "extend_ticker_dict: Any = VAL_KEY.get('fut_ticker_extended')\n", + "extend_ticker_dict: dict = json.loads(s=extend_ticker_dict) if extend_ticker_dict is not None else {}\n", + "if ( extend_ticker_dict.get('symbol', None) != Extend.symbol) and not(Config.Overrides.Flatten_Open_Positions):\n", + " VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)}))\n", + " # raise ValueError(f'EXTEND Symbol mismatch: {EXTENDED_TICKER_DICT}; expected symbol: {EXTEND.symbol}')\n", + "\n", + "### Load Local Notional Updates from WS ###\n", + "aster_ws_pos_updates: Any = VAL_KEY.get(name='fr_aster_user_positions')\n", + "aster_ws_pos_updates: list = json.loads(s=aster_ws_pos_updates) if aster_ws_pos_updates is not None else []\n", + "extend_ws_pos_updates: Any = VAL_KEY.get('fr_extended_user_positions')\n", + "extend_ws_pos_updates: list = json.loads(extend_ws_pos_updates) if extend_ws_pos_updates is not None else [] \n", + "\n", + "### Load Local Order Updates from WS ###\n", + "aster_ws_order_updates: Any = VAL_KEY.get('fr_aster_user_orders')\n", + "aster_ws_order_updates: list = json.loads(aster_ws_order_updates) if aster_ws_order_updates is not None else [] \n", + "extend_ws_order_updates: Any = VAL_KEY.get('fr_extended_user_orders')\n", + "extend_ws_order_updates: list = json.loads(extend_ws_order_updates) if extend_ws_order_updates is not None else [] " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1d72da04", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1" + "{'timestamp_arrival': 1777965341650,\n", + " 'timestamp_msg': 1777965341629,\n", + " 'timestamp_transaction': 1777965341600,\n", + " 'orderbook_update_id': 459659132993,\n", + " 'symbol': '4USDT',\n", + " 'best_bid_px': '0.0176320',\n", + " 'best_bid_qty': '8160',\n", + " 'best_ask_px': '0.0177000',\n", + " 'best_ask_qty': '388'}" ] }, - "execution_count": 52, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "order = {'order_id':'test_1'}\n", - "VAL_KEY.publish('fr_engine_orders_input', json.dumps(order))" + "aster_ticker_dict" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "0bcf9b05", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Aster.notional_position\n", + "Extend.notional_position" ] }, { "cell_type": "code", "execution_count": null, - "id": "34a85b2e", + "id": "5934a164", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('1.0')" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "Decimal('1.0').quantize()" + "@dataclass(kw_only=True)\n", + "class Signal:\n", + " signal: bool\n", + " exchange: str # ASTER | EXTEND\n", + " side: str # BUY | SELL\n", + " symbol: str # e.g. BTC-USD" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "940586bb", + "execution_count": null, + "id": "27c193de", + "metadata": {}, + "outputs": [], + "source": [ + "def signal_alpha_over_taker(aster_ticker_dict, extend_ticker_dict) -> Signal:\n", + " aster_best_ask = Decimal(aster_ticker_dict['best_ask_px'])\n", + " aster_best_bid = Decimal(aster_ticker_dict['best_bid_px'])\n", + " \n", + " aster_current\n", + " \n", + " extend_best_ask = Decimal(extend_ticker_dict['best_ask_px'])\n", + " extend_best_bid = Decimal(extend_ticker_dict['best_bid_px'])\n", + " \n", + " \n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "407919b8", + "metadata": {}, + "outputs": [], + "source": [ + "aster_mid_px = ( Decimal(str(aster_ticker_dict['best_ask_px'])) + Decimal(str(aster_ticker_dict['best_bid_px'])) ) / 2\n", + "extend_mid_px = ( Decimal(str(extend_ticker_dict['best_ask_px'])) + Decimal(str(extend_ticker_dict['best_bid_px'])) ) / 2\n", + "\n", + "aster_buy_ratio = (extend_mid_px / aster_mid_px) - 1\n", + "extend_buy_ratio = aster_buy_ratio*-1\n", + "\n", + "extend_taker_fee = Decimal(str(0.00025))\n", + "\n", + "aster_buy_ratio_min_taker = Decimal(str(aster_buy_ratio)) - extend_taker_fee\n", + "extend_buy_ratio_min_taker = Decimal(str(extend_buy_ratio)) - extend_taker_fee\n", + "\n", + "aster_buy_expected_alpha = aster_buy_ratio_min_taker - Decimal(str(Aster.buy_ratio))\n", + "extend_buy_expected_alpha = extend_buy_ratio_min_taker - Decimal(str(Extend.buy_ratio))" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "id": "5253967d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'{\"stream\":\"btcusdt@bookTicker\",\"data\":{\"event_type\":\"bookTicker\",\"update_id\":458028589204,\"symbol\":\"BTCUSDT\",\"best_bid_price\":\"76414.9\",\"best_bid_qty\":\"0.507\",\"best_ask_price\":\"76415.0\",\"best_ask_qty\":\"0.878\",\"transaction_time\":1777565596460,\"event_time\":1777565596488}}'" + "Decimal('0.01364809170643964895111000236')" ] }, - "execution_count": 6, + "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "VAL_KEY.get('test_key')" + "(aster_buy_expected_alpha * aster_mid_px)*500" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "extend_buy_expected_alpha" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "extend_buy_expected_alpha" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cee994fa", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5f57c5e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": 13, @@ -191,23 +353,400 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 170, "id": "5f7535df", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'[{\"symbol_ext\":\"BTC-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000009,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"BTC\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":189468858.5763599873,\"min_order_size_ext\":\"0.0001\",\"min_price_ext\":\"1\",\"USDT_Symbol\":\"BTCUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"BTCUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":-0.00002882,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":328819440.9900000095,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"1\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000009,\"net_funding_rate_abs\":0.000009},{\"symbol_ext\":\"ETH-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000019,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ETH\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":63224882.9324000031,\"min_order_size_ext\":\"0.01\",\"min_price_ext\":\"0.1\",\"USDT_Symbol\":\"ETHUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ETHUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00009443,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":213809320.6999999881,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.01\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000019,\"net_funding_rate_abs\":0.000019},{\"symbol_ext\":\"SOL-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000007,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"SOL\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":10765070.9333999995,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"SOLUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SOLUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":27067188.6099999994,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.4200\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000007,\"net_funding_rate_abs\":0.000007},{\"symbol_ext\":\"DOGE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"DOGE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":1930324.1714000001,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"DOGEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"DOGEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":13296700.8699999992,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.002440\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"BNB-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"BNB\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":3295700.7066000002,\"min_order_size_ext\":\"0.01\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"BNBUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"BNBUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00010666,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":7790358.3200000003,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"XRP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XRP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":5508420.1827999996,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"XRPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XRPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":7482797.4900000002,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0143\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"1000PEPE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000004,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"1000PEPE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":227592.6642,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"1000PEPEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"1000PEPEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":120914.4,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000001\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000004,\"net_funding_rate_abs\":0.000004},{\"symbol_ext\":\"WIF-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"WIF\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":93146.9124,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"WIFUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"WIFUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":null,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"NEAR-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000057,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"NEAR\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":93306.3696,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"NEARUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"NEARUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":3933.72,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0480\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000057,\"net_funding_rate_abs\":0.000057},{\"symbol_ext\":\"AVAX-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"AVAX\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":254211.8306,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"AVAXUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"AVAXUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":26078.46,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"LTC-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"LTC\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":71170.9718,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"LTCUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"LTCUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":75557.68,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"3.61\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"TRX-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"TRX\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":87414.5058,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"TRXUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"TRXUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":15626.1,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.00132\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"ADA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ADA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":3600404.0602000002,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"ADAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ADAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":417115.91,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.01740\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"LINK-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"LINK\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":134102.3756,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"LINKUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"LINKUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":66192.38,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.464\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"BCH-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"BCH\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":35350.26124,\"min_order_size_ext\":\"0.01\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"BCHUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"BCHUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":3643.32,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.01\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"ARB-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ARB\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":139556.124,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"ARBUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ARBUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":238353.7,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"WLD-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"WLD\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":193095.591,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"WLDUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"WLDUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":119029.63,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"OP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"OP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":19788.3974,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"OPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"OPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":10476.78,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"DOT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"DOT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":123615.61422,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"DOTUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"DOTUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":10537.37,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.380\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"ONDO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ONDO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":108316.62,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"ONDOUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ONDOUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":11032.63,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"SUI-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"SUI\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":2155321.6787999999,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"SUIUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SUIUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":239633.45,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"UNI-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"UNI\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":38650.92202,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"UNIUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"UNIUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":11907.92,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.3730\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"APT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"APT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":30153.50014,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"APTUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"APTUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":18500.38,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.00010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"JUP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"JUP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":113332.6542,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"JUPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"JUPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":17898.16,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"TIA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"TIA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":24691.5064,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"TIAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"TIAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":3983.33,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"PENDLE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"PENDLE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":344245.4226,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"PENDLEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"PENDLEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":7754.46,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"SEI-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"SEI\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":41069.5738,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"SEIUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SEIUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":6606.12,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"1000BONK-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"1000BONK\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":123493.2368,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"1000BONKUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"1000BONKUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":24847.53,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"1000SHIB-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"1000SHIB\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":97958.255,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"1000SHIBUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"1000SHIBUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":7023.82,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000160\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"MOODENG-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"MOODENG\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":84746.0218,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"MOODENGUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"MOODENGUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":10635.21,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"HYPE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"HYPE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":26765995.3192600012,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"HYPEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"HYPEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00001224,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":3778974.0899999999,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.00100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"PENGU-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"PENGU\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":315985.2558,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"PENGUUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"PENGUUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":73722.37,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"ENA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000023,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ENA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":2492282.3462,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"ENAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ENAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":37328.68,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000023,\"net_funding_rate_abs\":0.000023},{\"symbol_ext\":\"FARTCOIN-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"FARTCOIN\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":695122.24048,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"FARTCOINUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"FARTCOINUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":101092.62,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"VIRTUAL-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"VIRTUAL\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":72374.64556,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"VIRTUALUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"VIRTUALUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":46076.24,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"AAVE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"AAVE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":2883774.2755999998,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"AAVEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"AAVEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":132133.83,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"4.400\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"TRUMP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000002,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"TRUMP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":37716.32,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"TRUMPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"TRUMPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":59716.12,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.00100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000002,\"net_funding_rate_abs\":0.000002},{\"symbol_ext\":\"MELANIA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"MELANIA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":22259.8486,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"MELANIAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"MELANIAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2348.99,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"S-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"S\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":18934.3142,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"SUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":4161.15,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"BERA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"BERA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":44484.9474,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"BERAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"BERAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":12467.19,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"IP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"IP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":49616.355,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"IPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"IPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2407.5,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"KAITO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.00006,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"KAITO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":104154.587,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"KAITOUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"KAITOUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2098.41,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000725,\"net_funding_rate_abs\":0.0000725},{\"symbol_ext\":\"STRK-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000006,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"STRK\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":442499.327,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"STRKUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"STRKUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":-0.00000361,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":25005.18,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000010\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00000239,\"net_funding_rate_abs\":0.00000239},{\"symbol_ext\":\"INIT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"INIT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":72492.70668,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"INITUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"INITUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":11906.86,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"XAU-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000037,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XAU\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":2079852.8214,\"min_order_size_ext\":\"0.001\",\"min_price_ext\":\"0.1\",\"USDT_Symbol\":\"XAUUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XAUUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00067907,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":315499.48,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.0100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000037,\"net_funding_rate_abs\":0.000037},{\"symbol_ext\":\"TAO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"TAO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":1527330.0882000001,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"TAOUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"TAOUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":1394075.8400000001,\"min_order_size_ast\":\"0.0010\",\"min_price_ast\":\"0.010\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"LDO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"LDO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":175597.2782,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"LDOUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"LDOUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":20548.43,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0010000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"GRASS-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"GRASS\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":117799.1704,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"GRASSUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"GRASSUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":1428.95,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"TON-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"TON\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":66589.1098,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"TONUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"TONUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":10894.04,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"RESOLV-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"RESOLV\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":207316.9066,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"RESOLVUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"RESOLVUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":275.66,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"XAG-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000016,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XAG\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":818415.2193999999,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"XAGUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XAGUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00336015,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":669318.14,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.0100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000016,\"net_funding_rate_abs\":0.000016},{\"symbol_ext\":\"PUMP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"PUMP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":693779.5148,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"PUMPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"PUMPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":80779.67,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"SPX-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"SPX\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":92068.54202,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"SPXUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SPXUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":9256.1,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"CRV-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"CRV\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":26951.3659,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"CRVUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"CRVUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":1307.34,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.031\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"ZORA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ZORA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":6654.5056,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"ZORAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ZORAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":6785.2,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"XPL-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000021,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XPL\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":1082667.0989999999,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"XPLUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XPLUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":10590.41,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000021,\"net_funding_rate_abs\":0.000021},{\"symbol_ext\":\"WLFI-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"WLFI\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":116041.5846,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"WLFIUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"WLFIUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":2266115.6099999999,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"LINEA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000063,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"LINEA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":49273.0536,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"LINEAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"LINEAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":7107.87,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000063,\"net_funding_rate_abs\":0.000063},{\"symbol_ext\":\"ASTER-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ASTER\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":429706.4266,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"ASTERUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ASTERUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":38223788.799999997,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.00010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"EIGEN-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000003,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"EIGEN\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":8542.8328,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"EIGENUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"EIGENUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2610.93,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000155,\"net_funding_rate_abs\":0.0000155},{\"symbol_ext\":\"AVNT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"AVNT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":33111.219,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"AVNTUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"AVNTUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":254.95,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"AERO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"AERO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":133203.13926,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"AEROUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"AEROUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":-0.00006777,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2347.44,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00008077,\"net_funding_rate_abs\":0.00008077},{\"symbol_ext\":\"ZRO-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ZRO\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":293940.4106,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"ZROUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ZROUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":12431.36,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.0010000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"EDEN-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"EDEN\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":1873.6608,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"EDENUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"EDENUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":26798.43,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"ZEC-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"ZEC\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":5292431.7835999997,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.001\",\"USDT_Symbol\":\"ZECUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"ZECUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":-0.00007248,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":2044188.3999999999,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.0100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00008548,\"net_funding_rate_abs\":0.00008548},{\"symbol_ext\":\"CAKE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"CAKE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":58487.0856,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"CAKEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"CAKEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00005,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":18448.42,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.00500\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"4-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000243,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"4\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":138792.2906,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"4USDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"4USDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00001999,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":60569.2,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000010\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00022301,\"net_funding_rate_abs\":0.00022301},{\"symbol_ext\":\"MON-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"MON\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":264031.9904,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"MONUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"MONUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":53823.07,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"SNX-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"SNX\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":103545.16,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"SNXUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"SNXUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":4288.01,\"min_order_size_ast\":\"0.1\",\"min_price_ast\":\"0.001\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"MEGA-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000028,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"MEGA\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":839000.41624,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"MEGAUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"MEGAUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":195161.32,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000405,\"net_funding_rate_abs\":0.0000405},{\"symbol_ext\":\"LIT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"LIT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":1305146.7662,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"LITUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"LITUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00007331,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":565632.24,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00006031,\"net_funding_rate_abs\":0.00006031},{\"symbol_ext\":\"XMR-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000092,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XMR\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":870531.0542,\"min_order_size_ext\":\"0.1\",\"min_price_ext\":\"0.01\",\"USDT_Symbol\":\"XMRUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XMRUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00008089,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":104539.19,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.01\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00001111,\"net_funding_rate_abs\":0.00001111},{\"symbol_ext\":\"XCU-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XCU\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":249415.84888,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"XCUUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XCUUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":20607.42,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":-0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"AZTEC-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"AZTEC\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":6813.9412,\"min_order_size_ext\":\"1000\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"AZTECUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"AZTECUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":3045.89,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"XPT-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000002,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XPT\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":167812.5814,\"min_order_size_ext\":\"0.01\",\"min_price_ext\":\"0.1\",\"USDT_Symbol\":\"XPTUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XPTUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00031696,\"next_funding_ts_ast\":1777838400000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":6193213,\"daily_volume_ast\":1679.23,\"min_order_size_ast\":\"0.001\",\"min_price_ast\":\"0.0100\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000002,\"net_funding_rate_abs\":0.000002},{\"symbol_ext\":\"XLM-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"XLM\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":52599.0036,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"XLMUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"XLMUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0001,\"next_funding_ts_ast\":1777852800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":20593213,\"daily_volume_ast\":60599.75,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.000010\",\"next_funding_at_same_time\":false,\"net_funding_rate\":0.000013,\"net_funding_rate_abs\":0.000013},{\"symbol_ext\":\"VVV-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"VVV\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":11389.87446,\"min_order_size_ext\":\"1\",\"min_price_ext\":\"0.0001\",\"USDT_Symbol\":\"VVVUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"VVVUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":53451.46,\"min_order_size_ast\":\"0.01\",\"min_price_ast\":\"0.001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"EDGE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"EDGE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":115807.0158,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"EDGEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"EDGEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":24853.47,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"CC-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"CC\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":2697.8404,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"CCUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"CCUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.0000125,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":18383.45,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.0000005,\"net_funding_rate_abs\":0.0000005},{\"symbol_ext\":\"CHIP-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":-0.000304,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"CHIP\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":520244.184,\"min_order_size_ext\":\"100\",\"min_price_ext\":\"0.000001\",\"USDT_Symbol\":\"CHIPUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"CHIPUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":-0.00038544,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":363869.1,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0000100\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00008144,\"net_funding_rate_abs\":0.00008144},{\"symbol_ext\":\"PIEVERSE-USD\",\"funding_rate_updated_ts_ms_ext\":1777831559598,\"funding_rate_ext\":0.000013,\"funding_rate_updated_dt_ext\":1777831559598,\"assetName\":\"PIEVERSE\",\"status\":\"ACTIVE\",\"next_funding_ts_ext\":1777834800000.0,\"daily_volume_ext\":24060.86516,\"min_order_size_ext\":\"10\",\"min_price_ext\":\"0.00001\",\"USDT_Symbol\":\"PIEVERSEUSDT\",\"time_delta_to_next_funding_ext\":2593202,\"symbol_ast\":\"PIEVERSEUSDT\",\"funding_rate_updated_ts_ms_ast\":1777832205000,\"funding_rate_ast\":0.00002021,\"next_funding_ts_ast\":1777834800000,\"funding_rate_updated_dt_ast\":1777832205000,\"time_delta_to_next_funding_ast\":2593213,\"daily_volume_ast\":75618.52,\"min_order_size_ast\":\"1\",\"min_price_ast\":\"0.0001000\",\"next_funding_at_same_time\":true,\"net_funding_rate\":0.00000721,\"net_funding_rate_abs\":0.00000721}]'" + "[{'symbol_ast': 'BTCUSDT',\n", + " 'max_leverage_ast': 150,\n", + " 'lh_asset_ast': 'BTC',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': -7.975e-05,\n", + " 'min_price_ast': '1',\n", + " 'min_order_size_ast': '0.001',\n", + " 'min_lot_size_ast': '0.001',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'BTC-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'BTC',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -3e-06,\n", + " 'min_price_ext': '1',\n", + " 'min_order_size_ext': '0.0001',\n", + " 'min_lot_size_ext': '0.00001',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'ETHUSDT',\n", + " 'max_leverage_ast': 150,\n", + " 'lh_asset_ast': 'ETH',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': -9.77e-06,\n", + " 'min_price_ast': '0.01',\n", + " 'min_order_size_ast': '0.001',\n", + " 'min_lot_size_ast': '0.001',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'ETH-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'ETH',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -1.3e-05,\n", + " 'min_price_ext': '0.1',\n", + " 'min_order_size_ext': '0.01',\n", + " 'min_lot_size_ext': '0.001',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'SOLUSDT',\n", + " 'max_leverage_ast': 100,\n", + " 'lh_asset_ast': 'SOL',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 2.399e-05,\n", + " 'min_price_ast': '0.4200',\n", + " 'min_order_size_ast': '0.01',\n", + " 'min_lot_size_ast': '0.01',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'SOL-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'SOL',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -1.2e-05,\n", + " 'min_price_ext': '0.01',\n", + " 'min_order_size_ext': '0.1',\n", + " 'min_lot_size_ext': '0.01',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'DOGEUSDT',\n", + " 'max_leverage_ast': 75,\n", + " 'lh_asset_ast': 'DOGE',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 9.699e-05,\n", + " 'min_price_ast': '0.002440',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'DOGE-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'DOGE',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '100',\n", + " 'min_lot_size_ext': '10',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'BNBUSDT',\n", + " 'max_leverage_ast': 100,\n", + " 'lh_asset_ast': 'BNB',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 0.00011803,\n", + " 'min_price_ast': '0.010',\n", + " 'min_order_size_ast': '0.01',\n", + " 'min_lot_size_ast': '0.01',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'BNB-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'BNB',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.01',\n", + " 'min_order_size_ext': '0.01',\n", + " 'min_lot_size_ext': '0.001',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'XRPUSDT',\n", + " 'max_leverage_ast': 100,\n", + " 'lh_asset_ast': 'XRP',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5.373e-05,\n", + " 'min_price_ast': '0.0143',\n", + " 'min_order_size_ast': '0.1',\n", + " 'min_lot_size_ast': '0.1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'XRP-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'XRP',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 6e-06,\n", + " 'min_price_ext': '0.0001',\n", + " 'min_order_size_ext': '10',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'SUIUSDT',\n", + " 'max_leverage_ast': 75,\n", + " 'lh_asset_ast': 'SUI',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 0.0001,\n", + " 'min_price_ast': '0.000100',\n", + " 'min_order_size_ast': '0.1',\n", + " 'min_lot_size_ast': '0.1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'SUI-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'SUI',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.0001',\n", + " 'min_order_size_ext': '10',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'HYPEUSDT',\n", + " 'max_leverage_ast': 300,\n", + " 'lh_asset_ast': 'HYPE',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.00100',\n", + " 'min_order_size_ast': '0.01',\n", + " 'min_lot_size_ast': '0.01',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'HYPE-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'HYPE',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.001',\n", + " 'min_order_size_ext': '0.1',\n", + " 'min_lot_size_ext': '0.01',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'ENAUSDT',\n", + " 'max_leverage_ast': 25,\n", + " 'lh_asset_ast': 'ENA',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.0000100',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'ENA-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'ENA',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '100',\n", + " 'min_lot_size_ext': '10',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'AAVEUSDT',\n", + " 'max_leverage_ast': 10,\n", + " 'lh_asset_ast': 'AAVE',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 0.0001,\n", + " 'min_price_ast': '4.400',\n", + " 'min_order_size_ast': '0.1',\n", + " 'min_lot_size_ast': '0.1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'AAVE-USD',\n", + " 'max_leverage_ext': 50,\n", + " 'lh_asset_ext': 'AAVE',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.01',\n", + " 'min_order_size_ext': '0.1',\n", + " 'min_lot_size_ext': '0.01',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'TRUMPUSDT',\n", + " 'max_leverage_ast': 10,\n", + " 'lh_asset_ast': 'TRUMP',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.00100',\n", + " 'min_order_size_ast': '0.01',\n", + " 'min_lot_size_ast': '0.01',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'TRUMP-USD',\n", + " 'max_leverage_ext': 25,\n", + " 'lh_asset_ext': 'TRUMP',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.001',\n", + " 'min_order_size_ext': '1',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'INITUSDT',\n", + " 'max_leverage_ast': 50,\n", + " 'lh_asset_ast': 'INIT',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 1.25e-05,\n", + " 'min_price_ast': '0.0000100',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'INIT-USD',\n", + " 'max_leverage_ext': 5,\n", + " 'lh_asset_ext': 'INIT',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -1e-06,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '10',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'ZORAUSDT',\n", + " 'max_leverage_ast': 5,\n", + " 'lh_asset_ast': 'ZORA',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.0000100',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'ZORA-USD',\n", + " 'max_leverage_ext': 5,\n", + " 'lh_asset_ext': 'ZORA',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.000001',\n", + " 'min_order_size_ext': '1000',\n", + " 'min_lot_size_ext': '100',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'WLFIUSDT',\n", + " 'max_leverage_ast': 25,\n", + " 'lh_asset_ast': 'WLFI',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.0001000',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'WLFI-USD',\n", + " 'max_leverage_ext': 10,\n", + " 'lh_asset_ext': 'WLFI',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -1.3e-05,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '100',\n", + " 'min_lot_size_ext': '10',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'ASTERUSDT',\n", + " 'max_leverage_ast': 75,\n", + " 'lh_asset_ast': 'ASTER',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 5e-05,\n", + " 'min_price_ast': '0.00010',\n", + " 'min_order_size_ast': '0.01',\n", + " 'min_lot_size_ast': '0.01',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'ASTER-USD',\n", + " 'max_leverage_ext': 25,\n", + " 'lh_asset_ext': 'ASTER',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '10',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'ZECUSDT',\n", + " 'max_leverage_ast': 75,\n", + " 'lh_asset_ast': 'ZEC',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 1.25e-05,\n", + " 'min_price_ast': '0.0100',\n", + " 'min_order_size_ast': '0.001',\n", + " 'min_lot_size_ast': '0.001',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'ZEC-USD',\n", + " 'max_leverage_ext': 10,\n", + " 'lh_asset_ext': 'ZEC',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.001',\n", + " 'min_order_size_ext': '0.1',\n", + " 'min_lot_size_ext': '0.1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': '4USDT',\n", + " 'max_leverage_ast': 50,\n", + " 'lh_asset_ast': '4',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 1.25e-05,\n", + " 'min_price_ast': '0.0000010',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': '4-USD',\n", + " 'max_leverage_ext': 5,\n", + " 'lh_asset_ext': '4',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 0.000179,\n", + " 'min_price_ext': '0.00001',\n", + " 'min_order_size_ext': '100',\n", + " 'min_lot_size_ext': '10',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'LITUSDT',\n", + " 'max_leverage_ast': 50,\n", + " 'lh_asset_ast': 'LIT',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 2.475e-05,\n", + " 'min_price_ast': '0.0001000',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'LIT-USD',\n", + " 'max_leverage_ext': 25,\n", + " 'lh_asset_ext': 'LIT',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.0001',\n", + " 'min_order_size_ext': '10',\n", + " 'min_lot_size_ext': '1',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'XMRUSDT',\n", + " 'max_leverage_ast': 50,\n", + " 'lh_asset_ast': 'XMR',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 1.25e-05,\n", + " 'min_price_ast': '0.01',\n", + " 'min_order_size_ast': '0.001',\n", + " 'min_lot_size_ast': '0.001',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'XMR-USD',\n", + " 'max_leverage_ext': 25,\n", + " 'lh_asset_ext': 'XMR',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.01',\n", + " 'min_order_size_ext': '0.1',\n", + " 'min_lot_size_ext': '0.01',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'XPTUSDT',\n", + " 'max_leverage_ast': 3,\n", + " 'lh_asset_ast': 'XPT',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': 0.0,\n", + " 'min_price_ast': '0.0100',\n", + " 'min_order_size_ast': '0.001',\n", + " 'min_lot_size_ast': '0.001',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'XPT-USD',\n", + " 'max_leverage_ext': 5,\n", + " 'lh_asset_ext': 'XPT',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': -3e-06,\n", + " 'min_price_ext': '0.1',\n", + " 'min_order_size_ext': '0.01',\n", + " 'min_lot_size_ext': '0.001',\n", + " 'min_notional_ext': 0.0},\n", + " {'symbol_ast': 'CHIPUSDT',\n", + " 'max_leverage_ast': 50,\n", + " 'lh_asset_ast': 'CHIP',\n", + " 'rh_asset_ast': 'USDT',\n", + " 'funding_rate_ast': -2.45e-06,\n", + " 'min_price_ast': '0.0000100',\n", + " 'min_order_size_ast': '1',\n", + " 'min_lot_size_ast': '1',\n", + " 'min_notional_ast': '5',\n", + " 'symbol_ext': 'CHIP-USD',\n", + " 'max_leverage_ext': 5,\n", + " 'lh_asset_ext': 'CHIP',\n", + " 'rh_asset_ext': 'USD',\n", + " 'funding_rate_ext': 1.3e-05,\n", + " 'min_price_ext': '0.000001',\n", + " 'min_order_size_ext': '100',\n", + " 'min_lot_size_ext': '10',\n", + " 'min_notional_ext': 0.0}]" ] }, - "execution_count": 4, + "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "VAL_KEY.get('fr_engine_best_fund_rate_master')" + "json.loads(VAL_KEY.get('fr_engine_best_fund_rate_master'))" ] }, { @@ -526,88 +1065,350 @@ "price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_DOWN)" ] }, - { - "cell_type": "code", - "execution_count": 49, - "id": "ad6444a5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "6" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(str(price))" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "74a227cc", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Decimal('0.9066')" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "price" - ] - }, { "cell_type": "code", "execution_count": null, "id": "57fac02c", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "### Locked Values 🔒🔑 ###" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "id": "8c2d003f", + "metadata": {}, + "outputs": [], + "source": [ + "from sqlalchemy.util.typing import Self\n", + "from typing import Any\n", + "from collections.abc import Sequence, Callable\n", + "\n", + "class Locked_Value(Sequence):\n", + " def __init__(self, initial_value: Any, unlock_func: Callable):\n", + " self._value: Any = initial_value\n", + " self._unlock_func: Callable = unlock_func\n", + " self._is_locked: bool = True\n", + "\n", + " def __repr__(self):\n", + " return str((self._value, self._is_locked, self._unlock_func))\n", + "\n", + " def __len__(self):\n", + " return len((self._value, self._is_locked, self._unlock_func))\n", + "\n", + " def __getitem__(self, index):\n", + " return (self._value, self._is_locked, self._unlock_func)[index]\n", + "\n", + " def __str__(self):\n", + " return str((self._value))\n", + "\n", + " def unlock(self) -> Self:\n", + " if self._unlock_func():\n", + " self._is_locked = False\n", + " return self\n", + "\n", + " @property\n", + " def is_locked(self):\n", + " return self._is_locked\n", + "\n", + " @property\n", + " def value(self):\n", + " return self._value\n", + "\n", + " @value.setter\n", + " def value(self, v):\n", + " if not(self._is_locked):\n", + " self._value = v\n", + " else:\n", + " raise ValueError(f'Failed to set value, item is locked: {str(self.__repr__)}')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "id": "6fd6a46c", + "metadata": {}, + "outputs": [], + "source": [ + "class Current_Previous_Value:\n", + " def __init__(self, value: Any = None, previous_value: Any = None):\n", + " self._value: Any = value\n", + " self._previous_value: Any = previous_value\n", + "\n", + " def __repr__(self):\n", + " return str((self._value, self._previous_value))\n", + "\n", + " def __len__(self):\n", + " return len((self._value, self._previous_value))\n", + "\n", + " def __getitem__(self, index):\n", + " return (self._value, self._previous_value)[index]\n", + "\n", + " def __str__(self):\n", + " return str(self._value)\n", + "\n", + " @property\n", + " def value(self):\n", + " return self._value\n", + "\n", + " @property\n", + " def previous_value(self):\n", + " return self._previous_value\n", + "\n", + " @value.setter\n", + " def value(self, v):\n", + " self._previous_value = self._value\n", + " self._value = v\n" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": {}, + "outputs": [], + "source": [ + "vo = Current_Previous_Value()" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "id": "b557d932", + "metadata": {}, + "outputs": [], + "source": [ + "vo.value = 1\n", + "vo.value = 2" + ] }, { "cell_type": "code", "execution_count": null, - "id": "2331e29f", + "id": "ef1d4ce0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 131, + "id": "04efe6cc", + "metadata": {}, + "outputs": [], + "source": [ + "v = 1" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "36b56800", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Decimal('0.000100000000000000004792173602385929598312941379845142364501953125')" + "1" ] }, - "execution_count": 33, + "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "Decimal(min_price)\n" + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "id": "e24ff466", + "metadata": {}, + "outputs": [], + "source": [ + "v = 2" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "b5ee5afa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v" ] }, { "cell_type": "code", "execution_count": null, - "id": "1c139413", + "id": "74051e1d", + "metadata": {}, + "outputs": [], + "source": [ + "def test():\n", + " return False" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "38ee912d", + "metadata": {}, + "outputs": [], + "source": [ + "v = Locked_Value('locked', unlock_func=test)" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "id": "bb703d87", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Failed to set value, item is locked: )>", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mValueError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[129]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m v.unlock().value = \u001b[33m'unlocked'\u001b[39m\n", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[124]\u001b[39m\u001b[32m, line 41\u001b[39m, in \u001b[36mLocked_Value.value\u001b[39m\u001b[34m(self, v)\u001b[39m\n\u001b[32m 37\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m value(self, v):\n\u001b[32m 38\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28;01mnot\u001b[39;00m(self._is_locked):\n\u001b[32m 39\u001b[39m self._value = v\n\u001b[32m 40\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m---> \u001b[39m\u001b[32m41\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m ValueError(f'Failed to set value, item is locked: {str(self.__repr__)}')\n", + "\u001b[31mValueError\u001b[39m: Failed to set value, item is locked: )>" + ] + } + ], + "source": [ + "v.unlock().value = 'unlocked'" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "76c44d97", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('locked', True, )" + ] + }, + "execution_count": 123, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "lv = Locked_Value(initial_value=999)\n", + "# lv.unlock()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "76e21865", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(lv)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "10258f5b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(999, False)" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9270dd8d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [] diff --git a/algo_config.json b/algo_config.json index fd2e5a6..7874156 100644 --- a/algo_config.json +++ b/algo_config.json @@ -1,5 +1,5 @@ { - "Updated_Timestamp": 1777828655743, + "Updated_Timestamp": 1777942827905, "Config": { "Loop_Sleep_Sec": 0.0, "Max_Order_Over_Notional_Ratio": 1.05, diff --git a/aster.ipynb b/aster.ipynb index 1504c15..db27848 100644 --- a/aster.ipynb +++ b/aster.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "4395fabb", "metadata": {}, "outputs": [], @@ -51,7 +51,7 @@ " \"url\": \"/fapi/v3/positionRisk\",\n", " \"method\": \"GET\",\n", " \"params\": {\n", - " 'symbol': 'WLFIUSDT',\n", + " 'symbol': '',\n", " }\n", "}\n", "fut_acct_exchangeInfo = {\n", @@ -92,35 +92,6798 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "2122885a", "metadata": {}, - "outputs": [ - { - "ename": "KeyError", - "evalue": "'params'", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mKeyError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[8]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m j = \u001b[38;5;28;01mawait\u001b[39;00m aster_auth.post_authenticated_url(fut_acct_positionRisk)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/Production/Funding_Rate/modules/aster_auth.py:106\u001b[39m, in \u001b[36mpost_authenticated_url\u001b[39m\u001b[34m(req)\u001b[39m\n\u001b[32m 103\u001b[39m res: requests.Response = requests.delete(url=full_url, headers=headers)\n\u001b[32m 104\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m res.json()\n\u001b[32m--> \u001b[39m\u001b[32m106\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m send_by_url(req=req)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~/Production/Funding_Rate/modules/aster_auth.py:77\u001b[39m, in \u001b[36mpost_authenticated_url..send_by_url\u001b[39m\u001b[34m(req)\u001b[39m\n\u001b[32m 76\u001b[39m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34msend_by_url\u001b[39m(req) -> \u001b[38;5;28mlist\u001b[39m | \u001b[38;5;28mdict\u001b[39m: \u001b[38;5;66;03m# ty:ignore[invalid-return-type]\u001b[39;00m\n\u001b[32m---> \u001b[39m\u001b[32m77\u001b[39m my_dict = \u001b[30;43mreq\u001b[39;49m\u001b[30;43m[\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43mparams\u001b[39;49m\u001b[30;43m'\u001b[39;49m\u001b[30;43m]\u001b[39;49m.copy()\n\u001b[32m 78\u001b[39m url = host + req[\u001b[33m'\u001b[39m\u001b[33murl\u001b[39m\u001b[33m'\u001b[39m]\n\u001b[32m 79\u001b[39m method = req[\u001b[33m'\u001b[39m\u001b[33mmethod\u001b[39m\u001b[33m'\u001b[39m]\n", - "\u001b[31mKeyError\u001b[39m: 'params'" - ] - } - ], + "outputs": [], "source": [ "j = await aster_auth.post_authenticated_url(fut_acct_positionRisk)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "e7341726", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "[{'symbol': 'TRUTHUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SBETUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BANKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EVAAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TSLAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MONUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PNUTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PENDLEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DEXEUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RVVUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AWEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JANITORUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SHELLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NIGHTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WHITEWHALEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CHIPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000BONKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ESPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GRIFFAINUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MORPHOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FHEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CHILLGUYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BROCCOLI714USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '龙虾USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SAPIENUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SOMIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EULUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BREVUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'POLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '200000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OKBUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'UMAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'APEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AIOTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SKLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'B2USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZEREBROUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OPENUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RECALLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SKYAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MTLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VIRTUALUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PROMUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AFEEUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '2500',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HUMAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MANAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRBUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MANTRAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IPUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ONDOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '2ZUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PTBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PIPPINUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FORMUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KOMAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HANAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '42USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'INTCUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ENJUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OPGUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRADOORUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ENSUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ASTEROIDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '200000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CRCLUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZECUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '75',\n", + " 'maxNotionalValue': '6250',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HYPEUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '300',\n", + " 'maxNotionalValue': '1000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SYRUPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GALAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TAGUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MANTAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LISTAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '6000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'METUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RLSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MEMESUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PUMPBTCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AAPLUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LRCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '雪球USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STGUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GIGGLEUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000WOJAKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SENTISUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TAOUSDT',\n", + " 'positionAmt': '0.0000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TURTLEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FILUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRUMPUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PUMPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '3000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLENDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SOLUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '100',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AXLUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LOOMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RONINUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000SATSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLASTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '币安人生USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GMTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LINEAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PIEVERSEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GWEIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SPACEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FLUXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BANDUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SKRUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NATGASUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RPLUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLUAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CRVUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '300000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'METAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DOTUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ACXUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TAKEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'APTUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SEIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BIOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'REDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NOMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ETHUSD1',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FRAXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MMTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PRLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MOODENGUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AVAAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XPINUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TREEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZROUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XCNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BIGTIMEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HYPERUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ETHFIUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ETHUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '2327.94576938',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '150',\n", + " 'maxNotionalValue': '300000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 1777835550378},\n", + " {'symbol': 'ZKCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ORDIUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WOOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ALLOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GOOGUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MSTRUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XANUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SOLUSD1',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SWARMSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XAGUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '75.87000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '100',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CFXUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KGENUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FOLKSUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CLUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KATUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MINAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ONUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SPKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CLANKERUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RESOLVUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COLLECTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LUNA2USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IRUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '15000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PORT3USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MUUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '8000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MITOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '黑马USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EOSUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZBTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EWYUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SUIUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '75',\n", + " 'maxNotionalValue': '20000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MAGMAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'METISUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRUUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MERLUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AVNTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BIRBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'C98USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LABUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GUNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BCHUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'YBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BOMEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000SHIBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BERAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KAITOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BEATUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TONUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '400000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000LUNCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TURBOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AVAXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '800000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PARTIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JUPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IRYSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PENGUINUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '300000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MOVRUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MATICUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JCTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'INXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TIAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MKRUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'UNIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PERPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARKMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COMPUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BTCDOMUSDT',\n", + " 'positionAmt': '0.0000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ATUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000PEPEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FETUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BANANAS31USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARTXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SXPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AKEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZILUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AXSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TOSHIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BSBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CHZUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XPLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KASUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BAYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NEIROUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FUNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VINEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'INJUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '400000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LUMIAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EIGENUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ENSOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'INITUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.08765944',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZORAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARIAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZRXUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HIGHUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZKPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STABLEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STBLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BNBUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '619.51000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '100',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 1777665139181},\n", + " {'symbol': 'ETCUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '20000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XMRUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MEUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ALICEUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AEROUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TOWNSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DOGEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '75',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GPSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SNXUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SOLVUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CFGUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EDENUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XLMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DASHUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KAVAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SAHARAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JELLYJELLYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RUNEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OPUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PLAYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'USELESSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BIRDUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LTCUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '15000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RENDERUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FARTCOINUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '20000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XPTUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '30000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TACUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '700000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FLOWUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '200000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HEMIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '30000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XPDUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CUDISUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AEVOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GALUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OGNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MOVEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ENAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '25',\n", + " 'maxNotionalValue': '800000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AIAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RAVEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'USUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KNCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLURUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MEGAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZRCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ESPORTSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ATOMUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'POWERUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRUSTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NMRUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SQDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GASUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IOSTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HBARUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '800000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LIGHTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'POLYXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VANAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BANUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FLOCKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EDUUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SNDKUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '8000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ALGOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BTRUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PYTHUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '75000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BRUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CARUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SENTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VVVUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARPAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1INCHUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VELOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SIRENUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PIXELUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LINAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OWLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'STRKUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NVDAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AIOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FOGOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLZUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARCUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XAUUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '75',\n", + " 'maxNotionalValue': '2500',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DOODUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LDOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '400000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PENGUUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ORCAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XRPUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '100',\n", + " 'maxNotionalValue': '40000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PORTALUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '4USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BELUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PROVEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'QQQUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DOLOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'USD1USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PROMPTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FIGHTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AIGENSYNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PHAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ANIMEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'API3USDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ELSAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CYSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BULLAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '人生K线USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ADAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JTOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TSTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LITUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.93992527',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '50',\n", + " 'maxNotionalValue': '2500',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 1777819835027},\n", + " {'symbol': 'FFUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XNYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'EDGEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BMTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LYNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SOONUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TRIAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SFPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RLCUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WETUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'XCUUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BOBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MSFTUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GOOGLUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ACUUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PAXGUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VELVETUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SANDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LINKUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'RIFUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'INUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'JASMYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BASUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MELANIAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'YGGUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '我踏马来了USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DAMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AVLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NAORISUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DYMUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'IMXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'VETUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NFPUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'UBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ONTUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '1000CHEEMSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ARBUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '老子USDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GRTUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WLFIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.05870000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '25',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 1777766514881},\n", + " {'symbol': 'RIVERUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AUCTIONUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SPYUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AMZNUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '130000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GENIUSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MASKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SKYUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '800000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZKUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '7500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ALCHUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BBUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '3',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BARDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COMMONUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CYBERUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZENUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '3000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'APRUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'NEARUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ZAMAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'KITEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'COWUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PDDUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SIGNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AAVEUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '3000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ICPUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '750000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GRASSUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WIFUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '30000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PROSUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BABAUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '8000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MBLUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CAKEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ROBOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BTCUSD1',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '500000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'OPNUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': '0GUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '2000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ROSEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PEOPLEUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'MYXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '10',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'CLOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'PUNDIAIUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TSMUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'LAUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '250000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DEGOUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '60000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'TNSRUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BTCUSDT',\n", + " 'positionAmt': '0.000',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '78659.35912065',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '150',\n", + " 'maxNotionalValue': '300000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 1777829275331},\n", + " {'symbol': '1000FLOKIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '25000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BASEDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '125000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'FTMUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HOODUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'SPXUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'QUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'UAIUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'GUAUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '4',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WARDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '2',\n", + " 'maxNotionalValue': '80000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'WLDUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '1000000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'HOLOUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'ASTERUSDT',\n", + " 'positionAmt': '0.00',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '75',\n", + " 'maxNotionalValue': '20000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'AZTECUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '5',\n", + " 'maxNotionalValue': '50000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'BLESSUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '100000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DYDXUSDT',\n", + " 'positionAmt': '0.0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '5000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0},\n", + " {'symbol': 'DUSKUSDT',\n", + " 'positionAmt': '0',\n", + " 'entryPrice': '0.0',\n", + " 'markPrice': '0.00000000',\n", + " 'unRealizedProfit': '0.00000000',\n", + " 'liquidationPrice': '0',\n", + " 'leverage': '20',\n", + " 'maxNotionalValue': '10000',\n", + " 'marginType': 'cross',\n", + " 'isolatedMargin': '0.00000000',\n", + " 'isAutoAddMargin': 'false',\n", + " 'positionSide': 'BOTH',\n", + " 'notional': '0',\n", + " 'isolatedWallet': '0',\n", + " 'updateTime': 0}]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j" + ] }, { "cell_type": "code", diff --git a/engine_best_funding_rate.ipynb b/engine_best_funding_rate.ipynb index 4c57e04..3ae6ed1 100644 --- a/engine_best_funding_rate.ipynb +++ b/engine_best_funding_rate.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 23, "id": "0b5ca901", "metadata": {}, "outputs": [], @@ -24,17 +24,7 @@ }, { "cell_type": "code", - "execution_count": 101, - "id": "20665e82", - "metadata": {}, - "outputs": [], - "source": [ - "### ********** TODO: ADD IN VOLUME DATA TO FILTER MKTS ###" - ] - }, - { - "cell_type": "code", - "execution_count": 102, + "execution_count": 24, "id": "53647b40", "metadata": {}, "outputs": [], @@ -51,7 +41,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 25, "id": "1f3b65ee", "metadata": {}, "outputs": [], @@ -65,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 26, "id": "5176d5b1", "metadata": {}, "outputs": [], @@ -98,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 27, "id": "e33ec721", "metadata": {}, "outputs": [], @@ -125,7 +115,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 28, "id": "62815940", "metadata": {}, "outputs": [], @@ -140,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 29, "id": "271a67c1", "metadata": {}, "outputs": [], @@ -156,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 30, "id": "1ce2fde4", "metadata": {}, "outputs": [], @@ -176,7 +166,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 31, "id": "ff88b413", "metadata": {}, "outputs": [], @@ -196,7 +186,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 32, "id": "f5ade993", "metadata": {}, "outputs": [], @@ -208,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 33, "id": "84bbc5a8", "metadata": {}, "outputs": [], @@ -226,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 34, "id": "7bd849e4", "metadata": {}, "outputs": [], @@ -239,8 +229,75 @@ }, { "cell_type": "code", - "execution_count": 113, - "id": "48d093ce", + "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": [ { @@ -396,176 +453,26 @@ "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": "fb395936-194b-4884-9460-1644ab82f860", + "ref": "adde995a-71f2-4ce5-897e-1b8c94baf122", "rows": [ [ "0", - "LIT-USD", - "LITUSDT", - "1530863.4786", - "557344.16", - "0.0001", - "0.0001000", - "10", - "1", - "1", - "1", - "0.0", - "5", - "1.3e-05", - "7.641e-05", - "25", - "50", - "LIT", - "LIT", - "USD", - "USDT", - "0.0021134552999999994", - "6.340999999999999e-05", - "6.340999999999999e-05", - "True", - "1777838955491.0", - "2.11", - "1777838893573", - "2026-05-03 20:09:15.491000", - "2026-05-03 20:08:13.573000" - ], - [ - "1", - "ZEC-USD", - "ZECUSDT", - "5395747.6736", - "1986811.3", - "0.001", - "0.0100", - "0.1", - "0.001", - "0.1", - "0.001", - "0.0", - "5", - "1.3e-05", - "-7.232e-05", - "10", - "75", - "ZEC", - "ZEC", - "USD", - "USDT", - "0.0015058979999999999", - "8.532e-05", - "8.532e-05", - "True", - "1777838956400.0", - "1.51", - "1777838958681", - "2026-05-03 20:09:16.400000", - "2026-05-03 20:09:18.681000" - ], - [ - "2", - "ETH-USD", - "ETHUSDT", - "63794900.8984", - "215801150.77", - "0.1", - "0.01", - "0.01", - "0.001", - "0.001", - "0.001", - "0.0", - "5", - "-1.6e-05", - "5.828e-05", - "50", - "150", - "ETH", - "ETH", - "USD", - "USDT", - "0.0012", - "1.6e-05", - "-1.6e-05", - "False", - "1777838959171.0", - "1.2", - "1777838943428", - "2026-05-03 20:09:19.171000", - "2026-05-03 20:09:03.428000" - ], - [ - "3", - "HYPE-USD", - "HYPEUSDT", - "25572374.04134", - "3517135.54", - "0.001", - "0.00100", - "0.1", - "0.01", - "0.01", - "0.01", - "0.0", - "5", - "1.3e-05", - "-1.902e-05", - "50", - "300", - "HYPE", - "HYPE", - "USD", - "USDT", - "0.00111423", - "1.3e-05", - "1.3e-05", - "False", - "1777838926707.0", - "1.11", - "1777838941321", - "2026-05-03 20:08:46.707000", - "2026-05-03 20:09:01.321000" - ], - [ - "5", - "XRP-USD", - "XRPUSDT", - "5624796.8796", - "7717251.91", - "0.0001", - "0.0143", - "10", - "0.1", - "1", - "0.1", - "0.0", - "5", - "1.3e-05", - "0.0001", - "50", - "100", - "XRP", - "XRP", - "USD", - "USDT", - "0.0008667099999999999", - "1.3e-05", - "1.3e-05", - "False", - "1777838956056.0", - "0.87", - "1777838873023", - "2026-05-03 20:09:16.056000", - "2026-05-03 20:07:53.023000" - ], - [ - "6", "BNB-USD", "BNBUSDT", - "3508321.26862", - "7656349.56", + "8095373.18022", + "27967490.3", "0.01", "0.010", "0.01", @@ -575,29 +482,99 @@ "0.0", "5", "1.3e-05", - "0.00013255", + "0.0002262", "50", "100", "BNB", "BNB", "USD", "USDT", - "0.0008667099999999999", - "1.3e-05", - "1.3e-05", - "False", - "1777838957563.0", - "0.87", - "1777838862018", - "2026-05-03 20:09:17.563000", - "2026-05-03 20:07:42.018000" + "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" ], [ - "7", + "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", - "2224083.3516", - "13131913.36", + "2591346.53", + "28160254.68", "0.00001", "0.002440", "100", @@ -607,62 +584,202 @@ "0.0", "5", "1.3e-05", - "4.512e-05", + "0.0001", "50", "75", "DOGE", "DOGE", "USD", "USDT", - "0.00078", - "1.3e-05", - "1.3e-05", - "False", - "1777838958745.0", - "0.78", - "1777838861853", - "2026-05-03 20:09:18.745000", - "2026-05-03 20:07:41.853000" + "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" ], [ - "9", - "ASTER-USD", - "ASTERUSDT", - "379897.4992", - "35798413.55", - "0.00001", - "0.00010", + "4", + "XRP-USD", + "XRPUSDT", + "13446078.3648", + "16676498.36", + "0.0001", + "0.0143", "10", - "0.01", + "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", - "5e-05", - "25", - "75", - "ASTER", - "ASTER", + "3.497e-05", + "50", + "300", + "HYPE", + "HYPE", "USD", "USDT", - "0.0004875", - "1.3e-05", - "1.3e-05", - "False", - "1777838956077.0", - "0.49", - "1777838861663", - "2026-05-03 20:09:16.077000", - "2026-05-03 20:07:41.663000" + "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" ], [ - "10", - "CHIP-USD", - "CHIPUSDT", - "601581.80858", - "369037.94", - "0.000001", + "9", + "ENA-USD", + "ENAUSDT", + "11420296.1562", + "400913.34", + "0.00001", "0.0000100", "100", "1", @@ -670,94 +787,32 @@ "1", "0.0", "5", - "-0.000455", - "-0.00050814", - "5", + "1.3e-05", + "5e-05", "50", - "CHIP", - "CHIP", + "25", + "ENA", + "ENA", "USD", "USDT", - "0.0004830426000000002", - "5.314000000000002e-05", - "5.314000000000002e-05", + "0.00123321", + "3.7000000000000005e-05", + "3.7000000000000005e-05", "True", - "1777838833850.0", - "0.48", - "1777838894261", - "2026-05-03 20:07:13.850000", - "2026-05-03 20:08:14.261000" + "1777936593650.0", + "1.23", + "1777936576866", + "2026-05-04 23:16:33.650000", + "2026-05-04 23:16:16.866000", + "-0.0012409275558957766", + "0.0012409275558957766" ], [ - "11", - "SOL-USD", - "SOLUSDT", - "10993777.163", - "28191542.03", - "0.01", - "0.4200", - "0.1", - "0.01", - "0.01", - "0.01", - "0.0", - "5", - "7e-06", - "0.0001", - "50", - "100", - "SOL", - "SOL", - "USD", - "USDT", - "0.00046669", - "7e-06", - "7e-06", - "False", - "1777838959552.0", - "0.47", - "1777838903681", - "2026-05-03 20:09:19.552000", - "2026-05-03 20:08:23.681000" - ], - [ - "12", - "BTC-USD", - "BTCUSDT", - "190699704.69432", - "331787901.64", - "1", - "1", - "0.0001", - "0.001", - "0.00001", - "0.001", - "0.0", - "5", - "-6e-06", - "-9.62e-06", - "50", - "150", - "BTC", - "BTC", - "USD", - "USDT", - "0.00045", - "6e-06", - "-6e-06", - "False", - "1777838959137.0", - "0.45", - "1777838940017", - "2026-05-03 20:09:19.137000", - "2026-05-03 20:09:00.017000" - ], - [ - "14", + "10", "WLFI-USD", "WLFIUSDT", - "118516.608", - "2231254.7", + "760135.4338", + "4159098.72", "0.00001", "0.0001000", "100", @@ -767,27 +822,97 @@ "0.0", "5", "1.3e-05", - "5e-05", + "7.3e-05", "10", "25", "WLFI", "WLFI", "USD", "USDT", - "0.00018576999999999998", + "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", - "False", - "1777838920826.0", - "0.19", - "1777838640653", - "2026-05-03 20:08:40.826000", - "2026-05-03 20:04:00.653000" + "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": 29, - "rows": 12 + "columns": 31, + "rows": 13 } }, "text/html": [ @@ -820,8 +945,6 @@ " min_lot_size_ext\n", " min_lot_size_ast\n", " ...\n", - " rh_asset_ast\n", - " net_mult_x_net_fr_abs\n", " net_funding_rate_abs\n", " net_funding_rate\n", " next_funding_at_same_time\n", @@ -830,135 +953,17 @@ " 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", " \n", " \n", " \n", " \n", " 0\n", - " LIT-USD\n", - " LITUSDT\n", - " 1.530863e+06\n", - " 5.573442e+05\n", - " 0.0001\n", - " 0.0001000\n", - " 10\n", - " 1\n", - " 1\n", - " 1\n", - " ...\n", - " USDT\n", - " 0.002113\n", - " 0.000063\n", - " 0.000063\n", - " True\n", - " 1.777839e+12\n", - " 2.11\n", - " 1777838893573\n", - " 2026-05-03 20:09:15.491\n", - " 2026-05-03 20:08:13.573\n", - " \n", - " \n", - " 1\n", - " ZEC-USD\n", - " ZECUSDT\n", - " 5.395748e+06\n", - " 1.986811e+06\n", - " 0.001\n", - " 0.0100\n", - " 0.1\n", - " 0.001\n", - " 0.1\n", - " 0.001\n", - " ...\n", - " USDT\n", - " 0.001506\n", - " 0.000085\n", - " 0.000085\n", - " True\n", - " 1.777839e+12\n", - " 1.51\n", - " 1777838958681\n", - " 2026-05-03 20:09:16.400\n", - " 2026-05-03 20:09:18.681\n", - " \n", - " \n", - " 2\n", - " ETH-USD\n", - " ETHUSDT\n", - " 6.379490e+07\n", - " 2.158012e+08\n", - " 0.1\n", - " 0.01\n", - " 0.01\n", - " 0.001\n", - " 0.001\n", - " 0.001\n", - " ...\n", - " USDT\n", - " 0.001200\n", - " 0.000016\n", - " -0.000016\n", - " False\n", - " 1.777839e+12\n", - " 1.20\n", - " 1777838943428\n", - " 2026-05-03 20:09:19.171\n", - " 2026-05-03 20:09:03.428\n", - " \n", - " \n", - " 3\n", - " HYPE-USD\n", - " HYPEUSDT\n", - " 2.557237e+07\n", - " 3.517136e+06\n", - " 0.001\n", - " 0.00100\n", - " 0.1\n", - " 0.01\n", - " 0.01\n", - " 0.01\n", - " ...\n", - " USDT\n", - " 0.001114\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 1.11\n", - " 1777838941321\n", - " 2026-05-03 20:08:46.707\n", - " 2026-05-03 20:09:01.321\n", - " \n", - " \n", - " 5\n", - " XRP-USD\n", - " XRPUSDT\n", - " 5.624797e+06\n", - " 7.717252e+06\n", - " 0.0001\n", - " 0.0143\n", - " 10\n", - " 0.1\n", - " 1\n", - " 0.1\n", - " ...\n", - " USDT\n", - " 0.000867\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 0.87\n", - " 1777838873023\n", - " 2026-05-03 20:09:16.056\n", - " 2026-05-03 20:07:53.023\n", - " \n", - " \n", - " 6\n", " BNB-USD\n", " BNBUSDT\n", - " 3.508321e+06\n", - " 7.656350e+06\n", + " 8.095373e+06\n", + " 2.796749e+07\n", " 0.01\n", " 0.010\n", " 0.01\n", @@ -966,119 +971,23 @@ " 0.001\n", " 0.01\n", " ...\n", - " USDT\n", - " 0.000867\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 0.87\n", - " 1777838862018\n", - " 2026-05-03 20:09:17.563\n", - " 2026-05-03 20:07:42.018\n", - " \n", - " \n", - " 7\n", - " DOGE-USD\n", - " DOGEUSDT\n", - " 2.224083e+06\n", - " 1.313191e+07\n", - " 0.00001\n", - " 0.002440\n", - " 100\n", - " 1\n", - " 10\n", - " 1\n", - " ...\n", - " USDT\n", - " 0.000780\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 0.78\n", - " 1777838861853\n", - " 2026-05-03 20:09:18.745\n", - " 2026-05-03 20:07:41.853\n", - " \n", - " \n", - " 9\n", - " ASTER-USD\n", - " ASTERUSDT\n", - " 3.798975e+05\n", - " 3.579841e+07\n", - " 0.00001\n", - " 0.00010\n", - " 10\n", - " 0.01\n", - " 1\n", - " 0.01\n", - " ...\n", - " USDT\n", - " 0.000487\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 0.49\n", - " 1777838861663\n", - " 2026-05-03 20:09:16.077\n", - " 2026-05-03 20:07:41.663\n", - " \n", - " \n", - " 10\n", - " CHIP-USD\n", - " CHIPUSDT\n", - " 6.015818e+05\n", - " 3.690379e+05\n", - " 0.000001\n", - " 0.0000100\n", - " 100\n", - " 1\n", - " 10\n", - " 1\n", - " ...\n", - " USDT\n", - " 0.000483\n", - " 0.000053\n", - " 0.000053\n", + " 2.132000e-04\n", + " 2.132000e-04\n", " True\n", - " 1.777839e+12\n", - " 0.48\n", - " 1777838894261\n", - " 2026-05-03 20:07:13.850\n", - " 2026-05-03 20:08:14.261\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", " \n", " \n", - " 11\n", - " SOL-USD\n", - " SOLUSDT\n", - " 1.099378e+07\n", - " 2.819154e+07\n", - " 0.01\n", - " 0.4200\n", - " 0.1\n", - " 0.01\n", - " 0.01\n", - " 0.01\n", - " ...\n", - " USDT\n", - " 0.000467\n", - " 0.000007\n", - " 0.000007\n", - " False\n", - " 1.777839e+12\n", - " 0.47\n", - " 1777838903681\n", - " 2026-05-03 20:09:19.552\n", - " 2026-05-03 20:08:23.681\n", - " \n", - " \n", - " 12\n", + " 1\n", " BTC-USD\n", " BTCUSDT\n", - " 1.906997e+08\n", - " 3.317879e+08\n", + " 4.883520e+08\n", + " 1.481693e+09\n", " 1\n", " 1\n", " 0.0001\n", @@ -1086,23 +995,215 @@ " 0.00001\n", " 0.001\n", " ...\n", - " USDT\n", - " 0.000450\n", - " 0.000006\n", - " -0.000006\n", - " False\n", - " 1.777839e+12\n", - " 0.45\n", - " 1777838940017\n", - " 2026-05-03 20:09:19.137\n", - " 2026-05-03 20:09:00.017\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", " \n", " \n", - " 14\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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \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", + " \n", + " \n", + " 10\n", " WLFI-USD\n", " WLFIUSDT\n", - " 1.185166e+05\n", - " 2.231255e+06\n", + " 7.601354e+05\n", + " 4.159099e+06\n", " 0.00001\n", " 0.0001000\n", " 100\n", @@ -1110,111 +1211,165 @@ " 10\n", " 1\n", " ...\n", - " USDT\n", - " 0.000186\n", - " 0.000013\n", - " 0.000013\n", - " False\n", - " 1.777839e+12\n", - " 0.19\n", - " 1777838640653\n", - " 2026-05-03 20:08:40.826\n", - " 2026-05-03 20:04:00.653\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", + " \n", + " \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", + " \n", + " \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", " \n", " \n", "\n", - "

12 rows × 29 columns

\n", + "

13 rows × 31 columns

\n", "" ], "text/plain": [ " symbol_ext symbol_ast daily_volume_ext daily_volume_ast min_price_ext \\\n", - "0 LIT-USD LITUSDT 1.530863e+06 5.573442e+05 0.0001 \n", - "1 ZEC-USD ZECUSDT 5.395748e+06 1.986811e+06 0.001 \n", - "2 ETH-USD ETHUSDT 6.379490e+07 2.158012e+08 0.1 \n", - "3 HYPE-USD HYPEUSDT 2.557237e+07 3.517136e+06 0.001 \n", - "5 XRP-USD XRPUSDT 5.624797e+06 7.717252e+06 0.0001 \n", - "6 BNB-USD BNBUSDT 3.508321e+06 7.656350e+06 0.01 \n", - "7 DOGE-USD DOGEUSDT 2.224083e+06 1.313191e+07 0.00001 \n", - "9 ASTER-USD ASTERUSDT 3.798975e+05 3.579841e+07 0.00001 \n", - "10 CHIP-USD CHIPUSDT 6.015818e+05 3.690379e+05 0.000001 \n", - "11 SOL-USD SOLUSDT 1.099378e+07 2.819154e+07 0.01 \n", - "12 BTC-USD BTCUSDT 1.906997e+08 3.317879e+08 1 \n", - "14 WLFI-USD WLFIUSDT 1.185166e+05 2.231255e+06 0.00001 \n", + "0 BNB-USD BNBUSDT 8.095373e+06 2.796749e+07 0.01 \n", + "1 BTC-USD BTCUSDT 4.883520e+08 1.481693e+09 1 \n", + "2 SOL-USD SOLUSDT 2.509109e+07 9.187277e+07 0.01 \n", + "3 DOGE-USD DOGEUSDT 2.591347e+06 2.816025e+07 0.00001 \n", + "4 XRP-USD XRPUSDT 1.344608e+07 1.667650e+07 0.0001 \n", + "5 XMR-USD XMRUSDT 1.649243e+06 3.507893e+05 0.01 \n", + "6 ETH-USD ETHUSDT 1.616961e+08 6.561522e+08 0.1 \n", + "7 4-USD 4USDT 3.027195e+05 4.548348e+05 0.00001 \n", + "8 HYPE-USD HYPEUSDT 4.365432e+07 1.053062e+07 0.001 \n", + "9 ENA-USD ENAUSDT 1.142030e+07 4.009133e+05 0.00001 \n", + "10 WLFI-USD WLFIUSDT 7.601354e+05 4.159099e+06 0.00001 \n", + "11 LIT-USD LITUSDT 1.854604e+06 1.350735e+06 0.0001 \n", + "12 ZEC-USD ZECUSDT 6.512462e+06 4.174327e+06 0.001 \n", "\n", " min_price_ast min_order_size_ext min_order_size_ast min_lot_size_ext \\\n", - "0 0.0001000 10 1 1 \n", - "1 0.0100 0.1 0.001 0.1 \n", - "2 0.01 0.01 0.001 0.001 \n", - "3 0.00100 0.1 0.01 0.01 \n", - "5 0.0143 10 0.1 1 \n", - "6 0.010 0.01 0.01 0.001 \n", - "7 0.002440 100 1 10 \n", - "9 0.00010 10 0.01 1 \n", - "10 0.0000100 100 1 10 \n", - "11 0.4200 0.1 0.01 0.01 \n", - "12 1 0.0001 0.001 0.00001 \n", - "14 0.0001000 100 1 10 \n", + "0 0.010 0.01 0.01 0.001 \n", + "1 1 0.0001 0.001 0.00001 \n", + "2 0.4200 0.1 0.01 0.01 \n", + "3 0.002440 100 1 10 \n", + "4 0.0143 10 0.1 1 \n", + "5 0.01 0.1 0.001 0.01 \n", + "6 0.01 0.01 0.001 0.001 \n", + "7 0.0000010 100 1 10 \n", + "8 0.00100 0.1 0.01 0.01 \n", + "9 0.0000100 100 1 10 \n", + "10 0.0001000 100 1 10 \n", + "11 0.0001000 10 1 1 \n", + "12 0.0100 0.1 0.001 0.1 \n", "\n", - " min_lot_size_ast ... rh_asset_ast net_mult_x_net_fr_abs \\\n", - "0 1 ... USDT 0.002113 \n", - "1 0.001 ... USDT 0.001506 \n", - "2 0.001 ... USDT 0.001200 \n", - "3 0.01 ... USDT 0.001114 \n", - "5 0.1 ... USDT 0.000867 \n", - "6 0.01 ... USDT 0.000867 \n", - "7 1 ... USDT 0.000780 \n", - "9 0.01 ... USDT 0.000487 \n", - "10 1 ... USDT 0.000483 \n", - "11 0.01 ... USDT 0.000467 \n", - "12 0.001 ... USDT 0.000450 \n", - "14 1 ... USDT 0.000186 \n", + " min_lot_size_ast ... net_funding_rate_abs net_funding_rate \\\n", + "0 0.01 ... 2.132000e-04 2.132000e-04 \n", + "1 0.001 ... 1.699800e-04 1.699800e-04 \n", + "2 0.01 ... 1.150000e-04 1.150000e-04 \n", + "3 1 ... 8.700000e-05 8.700000e-05 \n", + "4 0.1 ... 6.291000e-05 6.291000e-05 \n", + "5 0.001 ... 7.744000e-05 7.744000e-05 \n", + "6 0.001 ... 3.223000e-05 3.223000e-05 \n", + "7 1 ... 2.265000e-04 2.265000e-04 \n", + "8 0.01 ... 2.197000e-05 2.197000e-05 \n", + "9 1 ... 3.700000e-05 3.700000e-05 \n", + "10 1 ... 6.000000e-05 6.000000e-05 \n", + "11 1 ... 5.000000e-07 5.000000e-07 \n", + "12 0.001 ... 5.000000e-07 5.000000e-07 \n", "\n", - " net_funding_rate_abs net_funding_rate next_funding_at_same_time \\\n", - "0 0.000063 0.000063 True \n", - "1 0.000085 0.000085 True \n", - "2 0.000016 -0.000016 False \n", - "3 0.000013 0.000013 False \n", - "5 0.000013 0.000013 False \n", - "6 0.000013 0.000013 False \n", - "7 0.000013 0.000013 False \n", - "9 0.000013 0.000013 False \n", - "10 0.000053 0.000053 True \n", - "11 0.000007 0.000007 False \n", - "12 0.000006 -0.000006 False \n", - "14 0.000013 0.000013 False \n", + " next_funding_at_same_time last_trade_ts_ast hourly_dollars_per_1k \\\n", + "0 True 1.777937e+12 14.21 \n", + "1 True 1.777937e+12 12.75 \n", + "2 True 1.777937e+12 7.67 \n", + "3 True 1.777937e+12 5.22 \n", + "4 True 1.777937e+12 4.19 \n", + "5 True 1.777937e+12 2.58 \n", + "6 True 1.777937e+12 2.42 \n", + "7 True 1.777937e+12 2.06 \n", + "8 True 1.777937e+12 1.88 \n", + "9 True 1.777937e+12 1.23 \n", + "10 True 1.777937e+12 0.86 \n", + "11 True 1.777937e+12 0.02 \n", + "12 True 1.777937e+12 0.01 \n", "\n", - " last_trade_ts_ast hourly_dollars_per_1k last_trade_ts_ext \\\n", - "0 1.777839e+12 2.11 1777838893573 \n", - "1 1.777839e+12 1.51 1777838958681 \n", - "2 1.777839e+12 1.20 1777838943428 \n", - "3 1.777839e+12 1.11 1777838941321 \n", - "5 1.777839e+12 0.87 1777838873023 \n", - "6 1.777839e+12 0.87 1777838862018 \n", - "7 1.777839e+12 0.78 1777838861853 \n", - "9 1.777839e+12 0.49 1777838861663 \n", - "10 1.777839e+12 0.48 1777838894261 \n", - "11 1.777839e+12 0.47 1777838903681 \n", - "12 1.777839e+12 0.45 1777838940017 \n", - "14 1.777839e+12 0.19 1777838640653 \n", + " last_trade_ts_ext last_trade_ts_dt_ast last_trade_ts_dt_ext \\\n", + "0 1777936072912 2026-05-04 23:16:38.200 2026-05-04 23:07:52.912 \n", + "1 1777936599985 2026-05-04 23:16:40.931 2026-05-04 23:16:39.985 \n", + "2 1777936544932 2026-05-04 23:16:39.229 2026-05-04 23:15:44.932 \n", + "3 1777936287673 2026-05-04 23:16:40.123 2026-05-04 23:11:27.673 \n", + "4 1777936411533 2026-05-04 23:16:40.008 2026-05-04 23:13:31.533 \n", + "5 1777936419604 2026-05-04 23:15:59.400 2026-05-04 23:13:39.604 \n", + "6 1777936565323 2026-05-04 23:16:40.075 2026-05-04 23:16:05.323 \n", + "7 1777936522376 2026-05-04 23:16:15.650 2026-05-04 23:15:22.376 \n", + "8 1777936590010 2026-05-04 23:16:40.796 2026-05-04 23:16:30.010 \n", + "9 1777936576866 2026-05-04 23:16:33.650 2026-05-04 23:16:16.866 \n", + "10 1777935796212 2026-05-04 23:16:25.617 2026-05-04 23:03:16.212 \n", + "11 1777936593781 2026-05-04 23:16:10.643 2026-05-04 23:16:33.781 \n", + "12 1777936396208 2026-05-04 23:16:31.300 2026-05-04 23:13:16.208 \n", "\n", - " last_trade_ts_dt_ast last_trade_ts_dt_ext \n", - "0 2026-05-03 20:09:15.491 2026-05-03 20:08:13.573 \n", - "1 2026-05-03 20:09:16.400 2026-05-03 20:09:18.681 \n", - "2 2026-05-03 20:09:19.171 2026-05-03 20:09:03.428 \n", - "3 2026-05-03 20:08:46.707 2026-05-03 20:09:01.321 \n", - "5 2026-05-03 20:09:16.056 2026-05-03 20:07:53.023 \n", - "6 2026-05-03 20:09:17.563 2026-05-03 20:07:42.018 \n", - "7 2026-05-03 20:09:18.745 2026-05-03 20:07:41.853 \n", - "9 2026-05-03 20:09:16.077 2026-05-03 20:07:41.663 \n", - "10 2026-05-03 20:07:13.850 2026-05-03 20:08:14.261 \n", - "11 2026-05-03 20:09:19.552 2026-05-03 20:08:23.681 \n", - "12 2026-05-03 20:09:19.137 2026-05-03 20:09:00.017 \n", - "14 2026-05-03 20:08:40.826 2026-05-03 20:04:00.653 \n", + " buy_price_ext buy_price_ast \n", + "0 0.001123 -0.001123 \n", + "1 0.000127 -0.000127 \n", + "2 0.000233 -0.000233 \n", + "3 -0.000405 0.000405 \n", + "4 0.000000 -0.000000 \n", + "5 -0.000003 0.000003 \n", + "6 0.000278 -0.000278 \n", + "7 0.001436 -0.001436 \n", + "8 -0.000182 0.000182 \n", + "9 -0.001241 0.001241 \n", + "10 0.002205 -0.002205 \n", + "11 0.000296 -0.000296 \n", + "12 -0.000177 0.000177 \n", "\n", - "[12 rows x 29 columns]" + "[13 rows x 31 columns]" ] }, - "execution_count": 113, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1223,6 +1378,13 @@ "df_best_fr_rate" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -1232,9 +1394,11 @@ "source": [ "### Candles for Midpoint Dispersion ###\n", "# Aster\n", - "import modules.aster_auth as aster_auth\n", - "symbol = 'BTCUSDT'\n", - "candles = {\n", + "\n", + "\n", + "\n", + "symbol = 'LITUSDT'\n", + "aster_candles = {\n", " \"url\": \"/fapi/v3/klines\",\n", " \"method\": \"GET\",\n", " \"params\": {\n", @@ -1243,125 +1407,13285 @@ " 'limit':'1440'\n", " }\n", "}\n", - "j = await aster_auth.post_authenticated_url(candles)\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" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "421577f1", - "metadata": {}, - "outputs": [], - "source": [ + "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 = 'BTC-USD'\n", - "params = {\n", + "symbol_ext = 'LIT-USD'\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}/trades', params=params).text)\n", - "df_candles_extended = pd.DataFrame(r)\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", + "df_candles_comb['typical_ratio_aster_over_extend'] = ( df_candles_comb['typical_px_ast'] / df_candles_comb['typical_px_ext'] ) - 1" ] }, { "cell_type": "code", - "execution_count": 14, - "id": "f83feeda", + "execution_count": 46, + "id": "799ffa9c", "metadata": {}, "outputs": [ { "data": { - "application/vnd.microsoft.datawrangler.viewer.v0+json": { - "columns": [ - { - "name": "index", - "rawType": "str", - "type": "string" - }, - { - "name": "status", - "rawType": "str", - "type": "string" - }, - { - "name": "error", - "rawType": "object", - "type": "unknown" - } - ], - "ref": "53323547-ff3c-492b-9d00-eb33883ef6b5", - "rows": [ - [ - "code", - "ERROR", - "1001" - ], - [ - "message", - "ERROR", - "Market not found" - ] - ], - "shape": { - "columns": 2, - "rows": 2 - } - }, - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
statuserror
codeERROR1001
messageERRORMarket not found
\n", - "
" - ], "text/plain": [ - " status error\n", - "code ERROR 1001\n", - "message ERROR Market not found" + "np.float64(0.00027310069856325913)" ] }, - "execution_count": 14, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_candles_extended" + "df_candles_comb['med_ratio_aster_over_extend'].median() * df_candles_comb['med_px_ext'].median()" ] }, + { + "cell_type": "code", + "execution_count": 43, + "id": "2bb2d8f2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.941825)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_candles_comb['med_px_ext'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "__________Start___________\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "__________VK Loads Time: 5000.38 ___________\n" + ] + } + ], + "source": [ + "import time\n", + "\n", + "loop_start = time.time()\n", + "print('__________Start___________')\n", + "\n", + "time.sleep(5)\n", + "\n", + "print(f'__________VK Loads Time: {(time.time() - loop_start)*1000:.2f} ___________')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7211dfcf", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0182370c", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "variable=med_ratio_aster_over_extend
open_dt=%{x}
value=%{y}", + "legendgroup": "med_ratio_aster_over_extend", + "line": { + "color": "#636efa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "med_ratio_aster_over_extend", + "showlegend": true, + "type": "scattergl", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "AIC9nOx5QT8AAIVL/HAvPwCMFKVky1I/AJAIK198Pz8A+A0GTz5DPwAgClHc+yQ/AByH0WfpUT8AAOQ8bPhEPwAEuYruKlA/ALxXW+Q6Uz8AOC9hR/ZLPwBQVTrsdU8/ALAiOeHKUj8AOIue31pSPwDgMkmreig/AAAAAAAAoLwAIFVoBH0vPwAQ6ZCzJEQ/AHCOE3zsXD8AQF1wCQNFPwBAvw+w/ks/AOQrEmVgUj8AaCUQ559QPwA42RPY3kw/ABwsVt+CWD8AqAsPqBJYPwCWX6yufmM/AFYpZpjtbj8AZFXmHjVpPwD4VHPGLUs/AABReV+MMT8AkC/MbA8lvwDgya+Xny8/AMC7WTVcQz8A0HBXcxw1PwCgLjm1Jjw/ABDAEOJYMz8AMBvD5wpSPwBg9EaYrj8/AIAtVislNT8AACAFgkn8vgBAJhsmdDM/AAD5AVZI/D4AsMi2V3MzPwD48NhuL00/ADwxz7IbWj8AwAKnC4o6PwAAWzOuU/w+AHABEPIENz8AqD1Obs5APwBARwfPADc/AMBnhuo5JT8AAGBh1BY+PwB4k9gyszG/ACBqtl1ZLD8AIM1XY69JPwBgaIu32z8/ALCehUM8RT8AeBiBlwVTPwDMGXCSbl8/APhkqo1BNb8A0BXCOLghvwBg/xxphTO/AEhWO9eCQz8AiEf39GZQPwB8fRA5YUy/AJBn01/ZKL8AkGLsuxJPPwCApsYYaQw/AFjJFdUITz8AgPkt9bghPwDARkpo5y8/AMAl1QpkRD8A+JGJ10JNPwBI3AYH81c/ALQ4015kXD8AZJJA2oBbPwBow33FS00/AOT7ay+rYj8A8MM6t79BPwDw+fNpMEY/APAl2SzDWT8AIAbj3r0hPwB4mgKos0m/AEAVQBVANT8AgDu4HEEVPwAoK7fe7VM/ADLgynpLWL8ApJwnom1lPwAE1sy6ZlC/AECZmrtmHD8AuN977p9CPwB4hchaDlc/ALhnp+liRD8AgEGVMGMMPwAAQdsGxCG/AMQrf/zeQL8A0IKlqxI3PwAAAAAAAAAAAEAuRja4Or8AYAOahApIPwAAwjAm8zg/ACDyPTBkJT8AII8BNmE1PwBAGO8gXzU/ABBQfAlVNT8AYJW4+cchvwBg7a1N6ii/AACZLL5YFT8AICAmxwAwPwAg0/bmziE/ACTQwDZGUj8AAFLFN4EcPwDw5qcy8Ci/AIC3PoWRHD8AYPVls5gsPwDQT/X5EkC/ALhbcFhZTr8A4PcbqrpCPwCQKN9Mf0Q/AICqIaZ9TD8AMFBwE+0ovwDQrPzJBjA/AOCrBERbJT8A0GMXINIhvwDISOe+0kE/AGC60NnvKD8AAJG1scohPwCgOgaweSy/AAAtrvlx/D4AIFMdBvIvPwCAxSR/oDo/ADAgIvhFJb8AgLhD6D4lPwDAyLZXczM/ACCC0+/HQD8AKIbQaCxdPwB4/V719U6/AGDzCZVbRD8AoBv52EElPwAIpideGk4/AFDOnJHDOD8AoMcy/7BBPwBQC0TKtCG/ANzIEJhlUD8A8NcdmQw3PwAgyaKNujE/AHh9EDlhPL8AUOQlFyc+vwD4Hn+1fUM/ACAH0lE+Nb8A4A7ndrJBPwDgDud2skE/AMBDuCYgRr8A0EJPQOlHPwAAAAAAAAAAAICGcuDVQD8AEFxMYUU1vwBo7Yv9nEo/APB8WuhDJb8AQPZ/qJZCPwDA9FJY4C8/AEC3nu8/FT8AsNKmm3ozPwDoz+SUFT6/ADiEbVx7Vj8APsr1q45nPwAgwVWnFlU/APA/UVXANj8AUF/OfHJPPwB4SkPVskY/AMh4EeovOr8AF86Hyy1jvwAMR3kV1EW/AACPecp5P78AAAAAAACgvABIvXeMOzO/AHDkeJH5JL8AgJTG8/gLPwBgXDQ2dz8/AIAyOSL1Cz8ALM1qHmhVPwDw9T3110U/AMjQMT9zVT8A+OqNc61OPwDYoTDxJVQ/ADjq3v32VD8AWL/GQRNUPwBQUFkLH1A/AADSoI8qOj8AmA7+8stMPwBIqq8er0Y/ABj1qmgwQz8ApOsWtPRkPwD0Z++cxGQ/AExSyRTiUT8AMAjnllsvvwDg/vmBIEM/AJx3XaVfXz8AMOQuV2o/PwDa6gzKeFS/AOAvillqIT8A6JSUu0RJPwDQpW/c6TQ/AIDKpiZeLz8A0H7Da+5EPwDQlBSoXD+/AKimqEN7Vz8AkGEk9YhAPwBAt7cZJjM/AKBTpaYERD8AQMoOHNc7PwDs4Rf371o/AEDpDxoVQz8AADk3JrP7PgB4MIPMU0c/ADAecTRHMT8AQJQiyp4bPwAAQxs7nvs+ADBc+YD7Mj8ACJYtQ6NLPwDA4NT6xUo/AGDEf4+hWD8A0HjkzSY/PwDUdAMAD1k/AHBPaen8Qj8APBn5X+FZPwCI1px+3Ek/AMC3aMHOUD8A3D4dYjBePwAgOfIrKCg/AJgc4YtfQD8AXK3/KKlUPwDYbse0EUI/AJDO0InySD8AUI7CBjc9PwDQkewtyDk/AFjfw9LmSD8AgNiSSUxTPwDALnLBazs/ACwsVdkBUj8AYG6iwic9PwCQzXdIITG/ALCEq+NBRj8AuLSeZPxUPwCADdtPLzE/ABhEd8+ESz8A0H56vDs9PwBgeEtoVEY/AMDS8EFUNj8AOHdWy8tPPwDAelHrmSS/ACAzEIVlKz8AUO0YrUNGPwCozc92RUY/ACD4XPlDRj8AssqnEhJjPwC45T592Eg/AHQt4eGIVz8AWEsDtTlMPwD8HrALGVE/APjDthWDRD8AnDltbupaPwBYHoeaLkY/ACQ0d+I0YD8AEE3bvxExvwDo2wprvE4/AFhHLjKXTz8AsM+tgZVJPwBIh96f5FQ/AGhjVxvvUT8AAJjmRVsbvwAAAXSjWxs/AAAqPydlKz8AGKEEjdZCPwDY/wVA/ze/ABBBVvAHOD8AIMz6DHY7PwAA0w8zLCE/AIBNZD6mFD8AYJghGosrPwAgV3UGQEc/AKBA/jM1IT8ASBqhQvpIPwBQvvRHQFQ/AGjFXP4wTr8AEF1dv242PwDQz3YNSkc/AJCEd3aYOz8A4Cz1/foyPwDgh4hVEC8/ACDR4zEnKD8ACEGnID5BPwAYyiFz20k/AGBXPlUtTj8AAD+rQJv7PgCwG1feDj8/AJDbFCYpKL8AQHzW1bUUPwAwXPmA+zI/ACCvq72nG78AUKcuILxEPwBEdmsLalA/ABjCjEsCQz8AwHi9rNxDPwCgERP2H1I/AHRyUBViUD8AYJVZkUAhPwAQMIZJD08/ANBq85tQPb8AoOen5AovvwBgEPV12UM/AHCtZS5kQL8AsO1EthpCPwCUX40cj1U/AFAEgyhpRj8A4DSlmpY7PwDgTxBUAj+/ALgDrAbhST8A4LmnR6ArPwBgrrcxDT8/AOjXD0QKTz8A3LBlTb9aPwCO7QITS2Q/AHBvo5IVPz8AgOjdwUQhPwDgAeCInxu/AABgzYHrST8AaP1etiVCPwBgf8ZyGz8/AAAAAAAAsDwAwMxH4u85PwDARF0VPSg/AGACoYDGRD8AkFOLjC1PPwBw6cC0SlE/AOwIErJMeD8AeE6XznlGPwDcidiX5FM/AIReHodAWD8A2I49iXBdPwAoOSx5X0c/AMys+z8qUj8AANr+xihSPwB0ECo6dVM/AODCVBf0OT8AsKGX+k1BPwDQ6wJweVM/AJSXNe9wXb8AtAJWKXhAvwCcARgp/0m/AGB8/3sNMz8AECq1BCtPPwDAqrc/UyE/AKDWjdzKFL8ArMMRiuJQPwDQRaO7fzY/ALACWfevSz8AAA7QYiovPwBogRZogUY/AOQ3nYTjUz8AEPCOICpCPwAAnvAmbT0/ANiiI48+SD8AiJv/Wg1DPwDAtc5RUFE/AMiyepc8SD8AwOHmw2o9PwAoIb6JVFQ/AERkkBubUj8AIOLJc31GPwDQs8VdW0c/AMiCZus8SD8AMEyM46ZFPwBgfP97DTM/ACDvqGb9ST8ASNjCmXZAPwAo8f2JVEE/AOhOOn0yQj8A4E99aohGPwCwVcK1eD0/ACAhzA15QD8A+NNFXBVDPwCAVOvwNUI/AEg4ZptpRz8AgNzjiksoPwAgz6ujljY/ALAhnaE1ST8AYIhj9tkkPwBQ0yILkjY/AOB3yqNBLz8ASMWbqU9IPwCQY+jpCTo/AEAIbbs/Pz8A2CCc4TpCPwDQhak06Uo/AAAkUcwaQz8AwDtras4LvwCAqS++TT8/AEBVEqNSLz8AAMvXTeYUvwBAhI324Bu/AJR2k7GAVz8AAAAAAAAAAACQjAOeGzo/AHBT0TyhRj8AqLBHSgNEPwBAbbiLXTg/ALhNtC6JQD8A8C1VBmUxPwDwvPefnEY/AODuoe6cRj8AsBcLVeFEPwB4IxSRsEw/AFDd8BBgMT8A4BWMU449PwBYjZjU2EQ/APCF2zxJKL8A2K7O2vBDvwCAqOaZ0xQ/AGB9P9xMKD8AwAQ0vsUbPwCYBpGAckc/AFDxA/cbMz8AAOjyplA4PwDwWa5LXDE/AGC5Sd/UND8AACGqaVoxPwD4zPviVkG/AHAfyMFHSD8ArGQA3SpZPwAg+JB0FDM/AADo8qZQOL8AwC3hq4JAPwBw+S1VTzi/AGgu6iA7Qj8AAElxpMoLPwBwnzGYXzE/AAB7/gTLGz8AuIhDBRpDPwAwr3GAgT0/AJhZhFJvRz8AgKuw2cALvwAANZN3vRs/AJB0fyv8OT8AiJ1wKKBFPwBALoeSaT0/AKD5UNBuQD8AQJkC6QEzPwCAntpy/kI/AGAQ9XXZQz8AOD4tQ+ZJPwAAZljTvBS/AOBDoxQ0SD8AoEp/aOlJPwDgharlLDg/AAhKy39OVD8AwMEU+awrPwDAFZmuW0c/AICaH+b2OT8ANFHdFrBgPwB4wsvM51A/AAAvnx7GCz8AQL9oy9xEPwCQM86zH0o/AFAIrb5nIb8APLxpcv1TPwAwz6ujljY/ABB7HTmCQD8AePktVU9IPwBAHp8a2hQ/APD8dKRIPz8AsMSFnPFKPwDAkVsBSC8/AOB6/gTLOz8A4GAs8pY2PwAAcy0K/UM/ACCHzWDbRD8A2Flv3xxDPwAQ1OQ+RT8/AOAeHTFLTz8A0K/u1tQ7PwAw1m7qd0c/AABNmrfM+z4AwJFbAUgvPwDAxKp5u0U/AJCZyk3QOz8AAAAAAAAAAAAgbYFc3TQ/ABCkNR4gMz8AkHpNh8w7vwAIpHY/IEM/ADAZuO6PPT8A0LF9Zpk2PwBwxXXWvUU/AMCj8fLSSz8AEFVkZZtGPwA44qXOIUM/AJDz7i2WVj8A2IVuXvRDPwCsBmp/xVE/AOB+L8UxPz8AABhD70YoPwCAfSPTWzE/AECgeQVlTj8AACKyRJM2PwDsGmlpdEe/AABSLZLSO78AbH94HoxNvwBIAAcbhk0/AJBoOfFZMT8A8MnFrQU6PwDgBRv/jEY/AIB6mA03Lz8AkINV3f9JPwCAncGWuws/AMj5an9CSD8AkN66moQ2PwDA3XSYdEA/AADCgvnDJD8AeAQPTklBPwCAmk1qY00/AMBCDOE1KD8AQNBmLHs2PwBo3WCKfEY/ADBS+Ph+Rj8A4OkGtgwzPwCYDlLvD0M/AICac7h0PT8AoN66moQ2PwCcIq4N61M/AIC1JeY3Lz8A8O5qDEs4PwDgBDS+xSu/AGgS36FSOL8AmIE2GBxDPwCgIzkagz0/ABCD4JZbMT8AgOzne8MrPwCQYSHiWjE/ACAVc+I+Pz8AYIGID0o4PwBgtZMXBEo/AJA93E18PT8AGNaLTaZFPwDApNcmOSg/AAAAAAAAsDwASGJUMX5APwBOto6PbGU/AABA3qtHMT8AgPzNfSA/PwCgTSg8qTs/AEA0PoClG78AoFhQ4gAzPwBwd14sSzE/ADw5n9mZUj8A8LvS8ZxFPwAYfI6ROFs/AKCVS324JL8AjPkfxvZCvwCgtDuFJyg/ADAqDMsxOD8ADDI0475hPwBMsApaWWQ/AEQEXgtQTr8AiNvEiOVDPwDwWTeYIl8/ABBEqsHNWj8A+ObUtQpWPwAs8fSl2VA/ANDIOwxpQD8AcE93iwhcPwCkmNbUN2k/AKD21qHDWj8ADeJp9h1wPwB09eTBxWc/AJiLSmlwRj8AAAAAAACgvABgICjrHC8/AEjo4WrnQz8AiIJSe21APwAQ3nz+piu/AJBNKDypK78AAG/8L8AUvwAA/Aqqq/s+AIDe5dmrCz8AHIJZgUZRvwCwGgGkIii/APCww0U/PT8A0CVBRew+PwAgaOZQfCu/ACjCNcacVz8AEI2p3F02PwDgjglkDji/ABhYcm/BST8AcPLwbbw5PwCo/njye0s/ABBrXYgUOD8AVMLWuKRaPwDQjTZoLj0/AEBrWvyXJD8AWMhbksA5vwAw1txdmTQ/APCsjr+aND8AwOnVRJwUPwAAALgBgBs/ABiqNFAyUT8ARE+fF8BQPwAAn+OenjQ/ANiHjLB4RT8AWGqb05lKPwB4PKeSAlI/AAxXQEwCVT8AeG4sU9lCPwAwRuQW/ye/AOC4AQWXFL8AAMnuc3/7vgAA4f+opiQ/AIAJ97KvFD8AmI3Xf61KPwCYBzTBoko/AIiwCm3iQj8A4LHwwu4+PwCI8iF7qEo/ABgaFupeVj8AIFewS0o9vwD2yj+z0VC/AAiwFN0oTj8AMJSJGdc5PwBguYbOsUo/ANhux7QRQj8AQCxV4YgLvwDQ7v/pqUo/AICYIRqLC78A8E8QVAI/PwCgxEIp8UI/AEAIfur4SD8AgI2HlYwLPwAgjNad/y4/AOB0bf+4Sj8AaER/JKRgvwBjfsYetmm/AHA/fo+FTD8A4A34evoyPwDAfWBPAFY/AADWb3yd+z4AuGQwJkExvwBAlsZMnRs/AMCt5NqQVT8AcIstO9o5PwCoW0WcrVQ/ABAPnc0iOD8A4DSlmpZLPwAAXQ8vszQ/AJABUEQrOD8AaAQZPbxKPwCYAJGdGlU/AACnFPCmJD8AnBemwl9TPwBAgpKAPDE/AHhyUBViUD8A8I+opNBDPwAAAAAAAAAAAJQJlWXwUj8AlAmVZfBSPwAAAAAAAAAAANh7TruKSz8AEHmecKREPwAcpjsXgFI/ALADCzY9Rz8ArMsM0FpTPwBI+STe8Ug/AJRlKvJeWT8AwPmqpMs5PwAYqN8Q0E8/ABBEd8+EOz8AgKkeDBQoPwDIJjlUEEg/AORI7oW+Vj8AIFe+Mg8ovwDoLMzgOjG/AGAdaqYwKD8A+OcH5IZGvwDYsPJ81zu/AHwXYeKlTb8AHofRZ+lRvwDM6Vg+oEC/AL51i2zuYb8AQthUzilUvwC0q4PdbEK/AGT2N80nWL8AuLkErttWvwDoMbrXrlS/AGiCU/urP78A0DtlEO5NvwDEVoccdlq/AEpNb4LkU78AXmYaI5FSvwBsF1MC506/AKSn/pqKQr8ALPBmITFFvwBgkNAOtSg/ANC7opG1SL8AgFATHkEcvwCQOtHfxD8/APAJHrcxJb8AYE9Xl7Y4vwDgAqeZ/z0/AIDGISkr/L4A4B/61/ZFPwDALl9NxE0/AMgZQBDXRT8AGAKNMXFVPwBQ+0ZM7Vg/AHKRC+jhaD8A+LO5oIBlPwAybv0E4GI/AMx3R03WZj8APpqNNj1rPwB8TcrvkF0/AOg/QbV5TT8ABAVoM0hUPwBwTYvWSFE/AGCHaty2UT8ACAFFuWZQPwD45gssgEw/AKw+Z42tUT8AYPvvjrdKPwDIpr1T6Fg/ADDRPRtaRj8AAPejt6REPwDQ2t4CUkY/AFgiALRRQD8AYGxHRhhCPwCIPoJgakA/ABCrL2hLQT8AAKCFSN5DPwCA2/ltCU8/AFBl3bYZOD8A8Nrc7dI5PwAA8IP/Az8/AMCcibb5Mj8AcKlfFFw9PwAAMfS3tBQ/ADBS+Ph+Rj8AaNtTdtRKPwBAvsOgTSE/AGBN5YwuQj8AEK5O8G89PwAwQffsMD8/ACCcgpQQMz8AkI5/e3NAPwBo4p35j0w/AFBe9nW0Oz8AUJEfOGRHPwDw2NhH/jk/ACBEhtMyLz8AIKUqOxUzPwCYL6ZijEY/AOAENL7FOz8AQGK/h00vPwAA1Z3r1vs+AIBBoEvoFL8AcFPgyiM6PwBAM9Bs7CQ/APDGoLpzMT8AqCQUN9BFPwDgR2d8Ljo/AADLbrGDPz8AAAWRhwsVPwBAUkRCDSy/ALwVZjgqRL8A57rI9aZgvwAAgQxlDBW/AGL9Len1Ub8AIGfYlf4UvwAAcAA4ACw/AICz0tUN/L4AyOlhN7BHPwBgeZ3aTzo/AJA2eG3NNj8AsOoQjw41vwBAqKCdzza/AEAWNVSKIT8AMHd1KXNJPwAAAAAAAAAAAHwcreU+UD8AiOSr4xs8vwDETVCCIVi/AAAqQzc4S78ARNHC64lYPwAA13h+S0O/AHA4ZUyOMT8AUIAxEbZHPwAUMRo0OXE/AAiccU/sRT8A2GtgP4lBPwBUI1QzBlU/APjwMX2DQT8ACNo7GkE6vwDcu/9UCFE/AAgprqozSr8AiIbug/U7vwBoU9PEbU8/ACT2UYyZUD8AsNChEnwxPwCIhu6D9Tu/AKi08Sh3OL8AwLGC2/oUPwCe4G4KkVe/AODZIhGkPT8AkGMstPA0PwBktTfrhVQ/APhVW6J0P78A8L+GRqVTvwCwPuvSazg/AIABvZDtJD8AgEkzJ+g0vwCAYtk+lVO/AJDL5vgbOj8AkPqcYsFFPwCwBLad4SS/AAhLTIv/Sj8A6rgbbQNUvwCAsxZWQy8/AFBVoYAFSr8AwBtjdroLvwCga2YZ5Eo/AJB+GPGLUz8AAGmbXtwUvwAwy0heRz+/ACAIOnkWSr8A7BzRGntHvwAANj124xQ/AK6WdXFBUr8A4LTmQ8obvwAgsep8Qi+/AADgEZtGKD8AgGjdRcMUPwCw6BquAjM/AGBC3C2PK78AoB3RJ3crPwAAPQw80jk/ALghj1c7QT8AUL70R0BUPwAarLab+mI/AMAUrWeRG78A4JilxqIkPwCUW4g1FFg/AJDpTyhbNr8APgnsU11hPwAq7UGZZ2U/AOgJmjLuTD8AZJufDrFaPwBw6j7pAlM/ANCkV3rmML8AiihTcKpVvwB8le+p9Ee/AEByJJSBFD8AYDm3fkRQvwC0lJIVLFE/AKD+ePJ7Kz8A+NpHfNpIPwDAezEPzS4/AJzVYkxDQL8AIMz6DHZLPwCo50974Eg/AODsId3NSD8AVK+GUVlVPwDYH22mXV0/AHipnS8JXD8AYNX0BJMuPwAAmlVKGEy/ANBJycPmJ78AbLKAYDVTPwBwLFLDFjE/ABCuiMnzWj8AgEQI1NIuPwBQwAMqcDs/ACgSJSRSQL8ACPidpS9XPwCo0govJUE/AHCQdKfTMr8AfJXvqfRXPwCE3uzyGVc/ADBEvVXWPr8AoKwtt48kPwCI9exs3z6/AHBZS1IpQT8A0PXuclNMPwB4S83aZlI/AECjcMlkKz8ArMZZ2HpePwCEqmt9cFU/AJiv3Hh6S78A4AbNJ1g2PwAAAAAAAAAAACC+rWMxMT8AANbIDX0LvwCgAoEEU0A/ALCoc3HPU78A5LtcUMhgvwAYAvOSOzG/ALqBzAWSV78AxArO2p1dPwDQeyNcPzY/ABxpqfenWT8A9KidTtdCvwAAAnHwa/s+AMi7pkqZVz8AwENbWhVCvwCAm1rTQyE/ALgB4IifSz8AFHzIeFtQPwBgZdiNHzg/ADiDFTqDVT8AWGvnDfVYPwBIDBDv3kk/AJxERLMpYD8AOCPxUyBCPwCA+h0dnfu+AFSJRsJLVD8AIK+rvac7PwAoTtvEuEQ/ALBeyyJzRj8AGL8weqtLPwDyvvXBOmI/AIiDVd3/ST8AALG3jcMUPwDAffwJRkE/AHBRKkAXPz8A7GkIPgBcPwDA725MEUg/ABYwLOu5YD8AHAFjQv5dPwBgMM3ZrlA/AEinGTAaUT8AsLbTPhwxvwCwkv+dpFM/APCNQw8CPT8ASMdbkzhMPwDgoBYm0D4/AEB3u1CLJL8A5KPzIxNUPwBANshPv0g/ANQhtb3xVD8AAKS769UyPwAoUZ1V2kI/AAqlIZBNYT8AWNKwGskyvwCgB5TenTk/AEA1FikdMT8AwFzgNZBKPwD85979Dlo/ADzNt8l5RL8ACAFiwgBaPwB0pWbjd1E/AHwIefkMUT8AxJraV39RPwCAERadVfu+ANDzGXGBNL8A4BkwHMA+PwC4dsi6uD6/AGD79chRKz8AKPtyR9tNPwCgnY84ek8/AEDsmfSbLj8AjOGR199RPwB4r9pYekk/AOh1KbqTSD8AWHskRJZNvwBAYveKKEo/APDRRDt8VT8AMJqSwkMkvwD8swQWHEC/ABjIhXHjTD8AwAqqu2kkvwDwO7hYwjI/ANASZFq9Mj8AfDq7S6BDvwAA8YVkYAu/AGhid8kCSD8A4AaMrsM5PwC80og8LUG/ABhEd8+ESz8AsP548ns7PwAUHZtXt1A/ADicGHRmVT8A4NPBHecyPwAAqgl3xUM/AGopdeKRZj8A9qjUHJxhPwBYmcWcJU0/AFBRihCORD8AWKzERQFOvwCIdHQvpEo/AEDn6L4CPz8AGF1dv242vwCgldwunCs/AECdJXH0OT8AUJjrKoI2PwAQ0ZkJMz8/ADi+LPnMRD8AcL7lQZlMPwBAWN0WsUs/AISlGVptUz8AAAAAAAAAAABkjaL1UVE/ACATannAKz8A4JKTJrlMPwBAOwHxE1c/AACGLbvWC78AYJTNWXExvwDgR2d8Ljq/ABg2gMMyQ78AVFUHHqlNvwCYV5hIRkI/AMCV7g0oQz8AoMXR/e4kvwBenIrMomE/AFDLROgYUD8AqHld2p82vwAwT7/YYzg/AMAXUgFmKL8AxMh0aRxQPwAAw9ir4vs+ABDCCFMxMz8AgCbjLWsxPwAgS4uT6UQ/ALi51MQgSj8AqA1ds/hDPwBwEC20hD0/ADDfm9vsSj8A2K/u1tQ7vwAAUi2S0is/ALgvhRWfRj8AAAAAAAAAAABwX/MvYkg/AEDGcITaG78AAKAiheUbPwDwt7+ceCG/AMrNSi2dUL8A0C1UL8c2vwBo7hLzG0s/AAA/ANb/Gz8AQBY1VIohPwCQ2sEdUUo/AKDzVCqyRz8A+OMM705TPwDY6V/HO1A/AKArhp+PIT8ASDeUdHRCvwDgKMUlLks/ALDBkpeSL78AANdM5gIcPwDIpFa9NEo/AKCWpL7TUT8AoJDZdbc7PwCYQWmmCjO/ALRh38MwQr8AQO3oNjRCPwBc8e2c0kS/AECcKMVVKD8A4Oy4t1wovwBg+BdP5TQ/AESPi1MkSr8ArpixDf9QvwBGi0NgTVK/APAmhpIlOj8AII1rq2YoPwB8oEwREVQ/AEDzzlssM78ATGxxAUxCvwDApsJ34jQ/AIBH/PLZ+74AQNGmKVsvPwAIVdH6mE0/AOhZLjFhOL8AMIf8JSQ6PwBIFAoGSEK/AJiCeHd6R78ACGwv9GExvwA0flx8hkC/AABpm17cFL8A7Bt6ZdlEvwDAOeankjY/AEglYx25RT8AUGBOFdQ7vwCghF/MZiG/AFAIrb5nIb8AGB9JBA9EPwAAkx/k8fs+ADArimQ5Sj8AoHtiSAMsPwAQMrfIyE0/AAAAAAAAAAAAEL4fFxZRPwC4PbPxCUW/AFi0wUbIRj8AcGSChX84PwBAStOeS0k/AGxuIopyQb8AgDt/Ue37vgAAIEa/7As/AHQTgn1TQr8A4HZC/fAkvwBI2FJpq0Y/ALQXC1XhRL8AmIJ4d3pHvwA44uK2Fzq/AMAJuh2LPT8AYPHtnNIkvwBQCE+p2zS/AEjw4GIBRD8AwDJyBzhJPwA8mptHGkO/AEDKwjfVC78AqIGftyIzvwDQpW/c6TS/ALCHRPtnIb8Anmy4ph1TvwCAZcI+2As/AACSa6fbC78AcMqmJl4vvwDAPTsCpEY/AIjDx+0kQ78A4MJxKeYkPwBQ6qeILUO/AHw6RJiPR78A8JDWOfMrvwAAL/7Z9vu+AICUxvP4Cz8ABEYAI4BBvwDgaCvjATW/AOCTv+nEPb8AOBaYjIQ4vwDU94kbgU+/AAAXMq9+KD8AYNyJmTwzvwDAXXuybC8/ANDSa5WZPT8AYEoqCeM0vwD86hQA60S/AICBdUC0PT8A4NGMBgFFvwBw/GE+iy+/AJiyx1VBM78AABUA4XoxvwBI/AUDDEQ/AIDmyUnqFD8AAMJdwOj7vgCIOnJ9VEK/AGDrem36NL8A8GwTfj8zPwCwInzfPTo/AIArg7j8ND8AIGSwR2JCvwCsKXbt9FG/AAAfOiAOFb8AdBhTO05KvwD48GrYakK/AEgEYW4sRL8A/JLOfLZTPwDAE68BhiE/AKCfN+IHHL8AxMCH3IBIvwBMARVQAUW/ABDthU3/JL8A4NGMBgElPwCQDeoEfyi/AKDRlQwEHL8AYENwWQYsPwDQlfW3ECy/ADBVgKywQL8ATMg8Z8BOvwBYGXkL5j2/AGSco13bRr8AOAVqx9w2vwAAt6QgJvw+APjPCOuYQb8A0K3hzxc1PwD4btuBskC/AICNCgAbJT8ADmP4IXhSvwBA6gn02TY/ALCYwQJbMz8AMBBN+uo9PwBwEDgD5DY/AFCYvbDmVj8AoPKnOSAlPwCwuI1BKCy/AKgyR8lOPL8AkKJmswVUvwBw1UhAbCy/APhylyIoTj8A8BuUkYJLPwDIkoBAkzO/AMjm76XHST8AMCxiQjg+PwBALmCebiw/ANCXZJLoKL8A4AEgB4AsPwAAuDNs7Si/ACB5dcpdFb8AwoQcqwJQvwCgoAI6WhW/ACCqBfHKIb8AAAAAAAAAAADgzPbkz0k/ALDcgnxkRT8Atp4ibAVUvwAAhDTAXCW/AOaeeT2AWL8ASHMFeupIPwCImbhW+T+/AABtZ2th/D4A4BQ/+r4xPwD8LH3b80e/AKwgupIqRr8A1JRBO05FvwAA/h8A/i+/AKge44ObSr8AEHU6eL8xPwCAIZjDZAw/ALwl1QpkRL8A+B7aEGJEvwDAmJLiRxW/AMwOONBsRL8A0CiozjI+vwBYbifXpEK/AAB4FJbVKD8AgAFjEWscPwAgd10lYxW/AAAm1hJ7/L4AQL+ziF4lvwAg+03KhCw/ABgW7kb2SD8AiArVh85BvwDIFd5A0Em/ADDyD21fNb8AyAEgB4A8vwA4A/suCki/AED80HLbQT8A4CvXJsBCPwBAT6lS+yi/AIhgb5LDSr8AIMixwLZCPwDAQu+zmzM/ACDnychkNT8AQA+8M4McPwCAEmBrKlM/AIA4I5/SIT8AiHqqlYFEPwCg2WJa1SG/ACCjAZX5KD8AADt2nZ0zPwAg97CU2SE/AFAE2TUUMD8AwDh7g5MMvwCIjdHayjq/AOBGUYhvNb8A+ONh8ttBvwAYXXTRRUe/AJDjyQV6NT8AONSyof1APwDYuR6i5jq/AHBfmbqPJb8AAJIBe9T8vgBAXdg/Bks/AAx+CPOtRL8AMBfW1jU5PwAQ4P6fGEE/AHivwwP4Or8A4MyHD8I8PwCQZ3hYeUY/ANABlm2+PD8A6GoT8NVLPwAwPrwyXDc/AMzKsTvdUj8AAH5iRo8VPwAACrXrx/y+AGiCM6XMQz8AaB9qsa9EPwCcdOHojGG/ALDerfVtNz8AgIinTtYMPwBcOqdE7Eu/AFDJ+YzKLL8AMIbU7fohvwBAdsGLjT4/AICmdOPEDD8AIDTovw9BPwCoNuVxC0G/AACo95knMD8ApOTmJ4VFvwBAlKHD5zo/ALAzBbnEMz8AYJYcjJYVvwAAAAAAAAAAAOA7T97CLD8AAJIHh8ZDPwBgaUhqMzA/AADpCDT9IT8AMMXjK/ohvwCATrdFwxw/AFCmdOPELL8AIHAw+JMlvwBQpnTjxCy/AIgnI7CMPr8AMHAw+JM1PwBAME130zy/AHBvjIbXPL8AoCABoKMVvwAgOz1oPCk/AEBVpfbZHD8A0KxlkQ0yvwAAMh617Aw/ABA2gzBLOT8AYPrreOAsvwDAetAHQSm/AAhnQniSUb8AmJx9wBtBvwBAwmSyxSw/ACS9crQsQL8AgEDrSsUMPwAAMkhIxPw+ACBgSpxXNz8AQF9hxbYcvwBwvUoLHym/AOAbU162LD8A8F/kaW1PPwCAQ3arjhU/AFj3/S3uOr8AgD3r3oclvwCIvpX27kG/AIAmvxbvIT8AiIZyLLdMPwBQkhqM1Uu/AOhpgFUhOb8AwKDXVbAcPwBU9ihqI1A/AJSY+HwnQL8AyIP3UL9DvwDgKWFy8Dq/AAAqd6O/DD8AsCJwi4c+vwCc4grMi0W/AADxzje9DL8AAMFQBr4MPwAAwVAGvgw/AECz6jZbN78ALIE9eYxOvwB8Vp6sXUe/ADA+GeL1Ib8AAFdSNSpAPwBA+WWOCFo/APBJLCNWVz8AADE69LMMPwDIPuZBM0i/AKD+pRHqIT8AUKBsm7YzPwDA7drUfjU/AGDdjRqnPL8AwL5ZRLAzvwAg6aAv5jG/AIBThpN8FT8A+HVqNTBIPwCQaGaI+l0/AIDdj+mTHD8AJEA/+DNHvwA4p8OK/Ei/AIDveBbYIT8A4LPBtZQsvwDQ9/TCEzA/ACCnXfIBKT8AwL0QpQIpPwDsmiJ7+VA/AACbqxic/D4AIMHjGKNMPwBAzHYFdyU/AABTWBifLD8AIFdBT+QhvwAAbd6tRDc/AAAewI/mIT8A6Mk2D1pPPwBQj62O0FI/AIzw77OmTL8AQJsuGkE3PwAoeUa5c0U/AHDKxU/gIb8AEEkgL2E+vwCInOudNEc/AFgIA51mUT8AYDR/IXAlvwAwQNx/mSy/AAC4ANHdIb8AQFLjOXIlPwAAXKdPlAw/AODOa01qFb8AbBn8+tRBvwCowU4rZzW/ANwgiDSdQ78AmL5x2fBAvwCAbiG/i/y+AEBntSHEOr8AAAAAAAAAAABwNI1sU04/AKizr4WcM78AAMqnUvMovwCQOAWzYiW/AJAS85/2OD8AgMigkmYlPwBoVuWaLze/AFCFE3tUPr8AKE3G7VBSPwAwhIRsw1I/AADyz+iU/D4AoHvcrf84vwDgFfvmlzw/AAy5vGCtQ78AqLbZh341vwBEC8GHzUK/AEhmHvtFN78AwDt6GKEsPwBMW+Pv5lE/AChXt4GURL8ApMxQIitIvwAYGbyJmES/AODpcpndOr8AskzeIX9VvwAYjEJllE2/AICC+8AjML8AiF6kePBBvwD42zvsC0G/AABGaxmMJT8AcG9TkSIpvwAARmsZjCU/AJCGciy3PL8AABP5mLr8Pg==", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "variable=typical_ratio_aster_over_extend
open_dt=%{x}
value=%{y}", + "legendgroup": "typical_ratio_aster_over_extend", + "line": { + "color": "#EF553B", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "typical_ratio_aster_over_extend", + "showlegend": true, + "type": "scattergl", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "legend": { + "title": { + "text": "variable" + }, + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "open_dt" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "value" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.express as px\n", + "\n", + "px.line(df_candles_comb, y=['med_ratio_aster_over_extend','typical_ratio_aster_over_extend'], x='open_dt')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "a9bd45c0", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "name": "Aster Px", + "type": "scatter", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "name": "Extend Px", + "type": "scatter", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "name": "Ast/Ext", + "type": "scatter", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f8" + }, + "yaxis": "y2" + } + ], + "layout": { + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 0.94 + ] + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "Price" + } + }, + "yaxis2": { + "anchor": "x", + "overlaying": "y", + "side": "right", + "title": { + "text": "Ratio" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.graph_objects as go\n", + "from plotly.subplots import make_subplots\n", + "\n", + "# 1. Create figure with secondary y-axis\n", + "fig = make_subplots(specs=[[{\"secondary_y\": True}]])\n", + "\n", + "# 2. Add traces\n", + "fig.add_trace(\n", + " go.Scatter(x=df_candles_comb['open_dt'], y=df_candles_comb['med_px_ast'], name=\"Aster Px\"),\n", + " secondary_y=False\n", + ")\n", + "fig.add_trace(\n", + " go.Scatter(x=df_candles_comb['open_dt'], y=df_candles_comb['med_px_ext'], name=\"Extend Px\"),\n", + " secondary_y=False\n", + ")\n", + "fig.add_trace(\n", + " go.Scatter(x=df_candles_comb['open_dt'], y=df_candles_comb['med_ratio_aster_over_extend']*10000, name=\"Ast/Ext\"),\n", + " secondary_y=True\n", + ")\n", + "\n", + "\n", + "# 3. Update axes titles\n", + "fig.update_yaxes(title_text=\"Price\", secondary_y=False)\n", + "fig.update_yaxes(title_text=\"Ratio\", secondary_y=True)\n", + "\n", + "fig.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "fada6f1d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.00032550317365598325)" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_candles_comb['med_ratio_aster_over_extend'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "869d70b0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "open_dt=%{x}
med_ratio_aster_over_extend=%{y}", + "legendgroup": "", + "line": { + "color": "#636efa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "", + "showlegend": false, + "type": "scattergl", + "x": [ + "2026-05-03T22:43:00", + "2026-05-03T22:44:00", + "2026-05-03T22:45:00", + "2026-05-03T22:46:00", + "2026-05-03T22:47:00", + "2026-05-03T22:48:00", + "2026-05-03T22:49:00", + "2026-05-03T22:50:00", + "2026-05-03T22:51:00", + "2026-05-03T22:52:00", + "2026-05-03T22:53:00", + "2026-05-03T22:54:00", + "2026-05-03T22:55:00", + "2026-05-03T22:56:00", + "2026-05-03T22:57:00", + "2026-05-03T22:58:00", + "2026-05-03T22:59:00", + "2026-05-03T23:00:00", + "2026-05-03T23:01:00", + "2026-05-03T23:02:00", + "2026-05-03T23:03:00", + "2026-05-03T23:04:00", + "2026-05-03T23:05:00", + "2026-05-03T23:06:00", + "2026-05-03T23:07:00", + "2026-05-03T23:08:00", + "2026-05-03T23:09:00", + "2026-05-03T23:10:00", + "2026-05-03T23:11:00", + "2026-05-03T23:12:00", + "2026-05-03T23:13:00", + "2026-05-03T23:14:00", + "2026-05-03T23:15:00", + "2026-05-03T23:16:00", + "2026-05-03T23:17:00", + "2026-05-03T23:18:00", + "2026-05-03T23:19:00", + "2026-05-03T23:20:00", + "2026-05-03T23:21:00", + "2026-05-03T23:22:00", + "2026-05-03T23:23:00", + "2026-05-03T23:24:00", + "2026-05-03T23:25:00", + "2026-05-03T23:26:00", + "2026-05-03T23:27:00", + "2026-05-03T23:28:00", + "2026-05-03T23:29:00", + "2026-05-03T23:30:00", + "2026-05-03T23:31:00", + "2026-05-03T23:32:00", + "2026-05-03T23:33:00", + "2026-05-03T23:34:00", + "2026-05-03T23:35:00", + "2026-05-03T23:36:00", + "2026-05-03T23:37:00", + "2026-05-03T23:38:00", + "2026-05-03T23:39:00", + "2026-05-03T23:40:00", + "2026-05-03T23:41:00", + "2026-05-03T23:42:00", + "2026-05-03T23:43:00", + "2026-05-03T23:44:00", + "2026-05-03T23:45:00", + "2026-05-03T23:46:00", + "2026-05-03T23:47:00", + "2026-05-03T23:48:00", + "2026-05-03T23:49:00", + "2026-05-03T23:50:00", + "2026-05-03T23:51:00", + "2026-05-03T23:52:00", + "2026-05-03T23:53:00", + "2026-05-03T23:54:00", + "2026-05-03T23:55:00", + "2026-05-03T23:56:00", + "2026-05-03T23:57:00", + "2026-05-03T23:58:00", + "2026-05-03T23:59:00", + "2026-05-04T00:00:00", + "2026-05-04T00:01:00", + "2026-05-04T00:02:00", + "2026-05-04T00:03:00", + "2026-05-04T00:04:00", + "2026-05-04T00:05:00", + "2026-05-04T00:06:00", + "2026-05-04T00:07:00", + "2026-05-04T00:08:00", + "2026-05-04T00:09:00", + "2026-05-04T00:10:00", + "2026-05-04T00:11:00", + "2026-05-04T00:12:00", + "2026-05-04T00:13:00", + "2026-05-04T00:14:00", + "2026-05-04T00:15:00", + "2026-05-04T00:16:00", + "2026-05-04T00:17:00", + "2026-05-04T00:18:00", + "2026-05-04T00:19:00", + "2026-05-04T00:20:00", + "2026-05-04T00:21:00", + "2026-05-04T00:22:00", + "2026-05-04T00:23:00", + "2026-05-04T00:24:00", + "2026-05-04T00:25:00", + "2026-05-04T00:26:00", + "2026-05-04T00:27:00", + "2026-05-04T00:28:00", + "2026-05-04T00:29:00", + "2026-05-04T00:30:00", + "2026-05-04T00:31:00", + "2026-05-04T00:32:00", + "2026-05-04T00:33:00", + "2026-05-04T00:34:00", + "2026-05-04T00:35:00", + "2026-05-04T00:36:00", + "2026-05-04T00:37:00", + "2026-05-04T00:38:00", + "2026-05-04T00:39:00", + "2026-05-04T00:40:00", + "2026-05-04T00:41:00", + "2026-05-04T00:42:00", + "2026-05-04T00:43:00", + "2026-05-04T00:44:00", + "2026-05-04T00:45:00", + "2026-05-04T00:46:00", + "2026-05-04T00:47:00", + "2026-05-04T00:48:00", + "2026-05-04T00:49:00", + "2026-05-04T00:50:00", + "2026-05-04T00:51:00", + "2026-05-04T00:52:00", + "2026-05-04T00:53:00", + "2026-05-04T00:54:00", + "2026-05-04T00:55:00", + "2026-05-04T00:56:00", + "2026-05-04T00:57:00", + "2026-05-04T00:58:00", + "2026-05-04T00:59:00", + "2026-05-04T01:00:00", + "2026-05-04T01:01:00", + "2026-05-04T01:02:00", + "2026-05-04T01:03:00", + "2026-05-04T01:04:00", + "2026-05-04T01:05:00", + "2026-05-04T01:06:00", + "2026-05-04T01:07:00", + "2026-05-04T01:08:00", + "2026-05-04T01:09:00", + "2026-05-04T01:10:00", + "2026-05-04T01:11:00", + "2026-05-04T01:12:00", + "2026-05-04T01:13:00", + "2026-05-04T01:14:00", + "2026-05-04T01:15:00", + "2026-05-04T01:16:00", + "2026-05-04T01:17:00", + "2026-05-04T01:18:00", + "2026-05-04T01:19:00", + "2026-05-04T01:20:00", + "2026-05-04T01:21:00", + "2026-05-04T01:22:00", + "2026-05-04T01:23:00", + "2026-05-04T01:24:00", + "2026-05-04T01:25:00", + "2026-05-04T01:26:00", + "2026-05-04T01:27:00", + "2026-05-04T01:28:00", + "2026-05-04T01:29:00", + "2026-05-04T01:30:00", + "2026-05-04T01:31:00", + "2026-05-04T01:32:00", + "2026-05-04T01:33:00", + "2026-05-04T01:34:00", + "2026-05-04T01:35:00", + "2026-05-04T01:36:00", + "2026-05-04T01:37:00", + "2026-05-04T01:38:00", + "2026-05-04T01:39:00", + "2026-05-04T01:40:00", + "2026-05-04T01:41:00", + "2026-05-04T01:42:00", + "2026-05-04T01:43:00", + "2026-05-04T01:44:00", + "2026-05-04T01:45:00", + "2026-05-04T01:46:00", + "2026-05-04T01:47:00", + "2026-05-04T01:48:00", + "2026-05-04T01:49:00", + "2026-05-04T01:50:00", + "2026-05-04T01:51:00", + "2026-05-04T01:52:00", + "2026-05-04T01:53:00", + "2026-05-04T01:54:00", + "2026-05-04T01:55:00", + "2026-05-04T01:56:00", + "2026-05-04T01:57:00", + "2026-05-04T01:58:00", + "2026-05-04T01:59:00", + "2026-05-04T02:00:00", + "2026-05-04T02:01:00", + "2026-05-04T02:02:00", + "2026-05-04T02:03:00", + "2026-05-04T02:04:00", + "2026-05-04T02:05:00", + "2026-05-04T02:06:00", + "2026-05-04T02:07:00", + "2026-05-04T02:08:00", + "2026-05-04T02:09:00", + "2026-05-04T02:10:00", + "2026-05-04T02:11:00", + "2026-05-04T02:12:00", + "2026-05-04T02:13:00", + "2026-05-04T02:14:00", + "2026-05-04T02:15:00", + "2026-05-04T02:16:00", + "2026-05-04T02:17:00", + "2026-05-04T02:18:00", + "2026-05-04T02:19:00", + "2026-05-04T02:20:00", + "2026-05-04T02:21:00", + "2026-05-04T02:22:00", + "2026-05-04T02:23:00", + "2026-05-04T02:24:00", + "2026-05-04T02:25:00", + "2026-05-04T02:26:00", + "2026-05-04T02:27:00", + "2026-05-04T02:28:00", + "2026-05-04T02:29:00", + "2026-05-04T02:30:00", + "2026-05-04T02:31:00", + "2026-05-04T02:32:00", + "2026-05-04T02:33:00", + "2026-05-04T02:34:00", + "2026-05-04T02:35:00", + "2026-05-04T02:36:00", + "2026-05-04T02:37:00", + "2026-05-04T02:38:00", + "2026-05-04T02:39:00", + "2026-05-04T02:40:00", + "2026-05-04T02:41:00", + "2026-05-04T02:42:00", + "2026-05-04T02:43:00", + "2026-05-04T02:44:00", + "2026-05-04T02:45:00", + "2026-05-04T02:46:00", + "2026-05-04T02:47:00", + "2026-05-04T02:48:00", + "2026-05-04T02:49:00", + "2026-05-04T02:50:00", + "2026-05-04T02:51:00", + "2026-05-04T02:52:00", + "2026-05-04T02:53:00", + "2026-05-04T02:54:00", + "2026-05-04T02:55:00", + "2026-05-04T02:56:00", + "2026-05-04T02:57:00", + "2026-05-04T02:58:00", + "2026-05-04T02:59:00", + "2026-05-04T03:00:00", + "2026-05-04T03:01:00", + "2026-05-04T03:02:00", + "2026-05-04T03:03:00", + "2026-05-04T03:04:00", + "2026-05-04T03:05:00", + "2026-05-04T03:06:00", + "2026-05-04T03:07:00", + "2026-05-04T03:08:00", + "2026-05-04T03:09:00", + "2026-05-04T03:10:00", + "2026-05-04T03:11:00", + "2026-05-04T03:12:00", + "2026-05-04T03:13:00", + "2026-05-04T03:14:00", + "2026-05-04T03:15:00", + "2026-05-04T03:16:00", + "2026-05-04T03:17:00", + "2026-05-04T03:18:00", + "2026-05-04T03:19:00", + "2026-05-04T03:20:00", + "2026-05-04T03:21:00", + "2026-05-04T03:22:00", + "2026-05-04T03:23:00", + "2026-05-04T03:24:00", + "2026-05-04T03:25:00", + "2026-05-04T03:26:00", + "2026-05-04T03:27:00", + "2026-05-04T03:28:00", + "2026-05-04T03:29:00", + "2026-05-04T03:30:00", + "2026-05-04T03:31:00", + "2026-05-04T03:32:00", + "2026-05-04T03:33:00", + "2026-05-04T03:34:00", + "2026-05-04T03:35:00", + "2026-05-04T03:36:00", + "2026-05-04T03:37:00", + "2026-05-04T03:38:00", + "2026-05-04T03:39:00", + "2026-05-04T03:40:00", + "2026-05-04T03:41:00", + "2026-05-04T03:42:00", + "2026-05-04T03:43:00", + "2026-05-04T03:44:00", + "2026-05-04T03:45:00", + "2026-05-04T03:46:00", + "2026-05-04T03:47:00", + "2026-05-04T03:48:00", + "2026-05-04T03:49:00", + "2026-05-04T03:50:00", + "2026-05-04T03:51:00", + "2026-05-04T03:52:00", + "2026-05-04T03:53:00", + "2026-05-04T03:54:00", + "2026-05-04T03:55:00", + "2026-05-04T03:56:00", + "2026-05-04T03:57:00", + "2026-05-04T03:58:00", + "2026-05-04T03:59:00", + "2026-05-04T04:00:00", + "2026-05-04T04:01:00", + "2026-05-04T04:02:00", + "2026-05-04T04:03:00", + "2026-05-04T04:04:00", + "2026-05-04T04:05:00", + "2026-05-04T04:06:00", + "2026-05-04T04:07:00", + "2026-05-04T04:08:00", + "2026-05-04T04:09:00", + "2026-05-04T04:10:00", + "2026-05-04T04:11:00", + "2026-05-04T04:12:00", + "2026-05-04T04:13:00", + "2026-05-04T04:14:00", + "2026-05-04T04:15:00", + "2026-05-04T04:16:00", + "2026-05-04T04:17:00", + "2026-05-04T04:18:00", + "2026-05-04T04:19:00", + "2026-05-04T04:20:00", + "2026-05-04T04:21:00", + "2026-05-04T04:22:00", + "2026-05-04T04:23:00", + "2026-05-04T04:24:00", + "2026-05-04T04:25:00", + "2026-05-04T04:26:00", + "2026-05-04T04:27:00", + "2026-05-04T04:28:00", + "2026-05-04T04:29:00", + "2026-05-04T04:30:00", + "2026-05-04T04:31:00", + "2026-05-04T04:32:00", + "2026-05-04T04:33:00", + "2026-05-04T04:34:00", + "2026-05-04T04:35:00", + "2026-05-04T04:36:00", + "2026-05-04T04:37:00", + "2026-05-04T04:38:00", + "2026-05-04T04:39:00", + "2026-05-04T04:40:00", + "2026-05-04T04:41:00", + "2026-05-04T04:42:00", + "2026-05-04T04:43:00", + "2026-05-04T04:44:00", + "2026-05-04T04:45:00", + "2026-05-04T04:46:00", + "2026-05-04T04:47:00", + "2026-05-04T04:48:00", + "2026-05-04T04:49:00", + "2026-05-04T04:50:00", + "2026-05-04T04:51:00", + "2026-05-04T04:52:00", + "2026-05-04T04:53:00", + "2026-05-04T04:54:00", + "2026-05-04T04:55:00", + "2026-05-04T04:56:00", + "2026-05-04T04:57:00", + "2026-05-04T04:58:00", + "2026-05-04T04:59:00", + "2026-05-04T05:00:00", + "2026-05-04T05:01:00", + "2026-05-04T05:02:00", + "2026-05-04T05:03:00", + "2026-05-04T05:04:00", + "2026-05-04T05:05:00", + "2026-05-04T05:06:00", + "2026-05-04T05:07:00", + "2026-05-04T05:08:00", + "2026-05-04T05:09:00", + "2026-05-04T05:10:00", + "2026-05-04T05:11:00", + "2026-05-04T05:12:00", + "2026-05-04T05:13:00", + "2026-05-04T05:14:00", + "2026-05-04T05:15:00", + "2026-05-04T05:16:00", + "2026-05-04T05:17:00", + "2026-05-04T05:18:00", + "2026-05-04T05:19:00", + "2026-05-04T05:20:00", + "2026-05-04T05:21:00", + "2026-05-04T05:22:00", + "2026-05-04T05:23:00", + "2026-05-04T05:24:00", + "2026-05-04T05:25:00", + "2026-05-04T05:26:00", + "2026-05-04T05:27:00", + "2026-05-04T05:28:00", + "2026-05-04T05:29:00", + "2026-05-04T05:30:00", + "2026-05-04T05:31:00", + "2026-05-04T05:32:00", + "2026-05-04T05:33:00", + "2026-05-04T05:34:00", + "2026-05-04T05:35:00", + "2026-05-04T05:36:00", + "2026-05-04T05:37:00", + "2026-05-04T05:38:00", + "2026-05-04T05:39:00", + "2026-05-04T05:40:00", + "2026-05-04T05:41:00", + "2026-05-04T05:42:00", + "2026-05-04T05:43:00", + "2026-05-04T05:44:00", + "2026-05-04T05:45:00", + "2026-05-04T05:46:00", + "2026-05-04T05:47:00", + "2026-05-04T05:48:00", + "2026-05-04T05:49:00", + "2026-05-04T05:50:00", + "2026-05-04T05:51:00", + "2026-05-04T05:52:00", + "2026-05-04T05:53:00", + "2026-05-04T05:54:00", + "2026-05-04T05:55:00", + "2026-05-04T05:56:00", + "2026-05-04T05:57:00", + "2026-05-04T05:58:00", + "2026-05-04T05:59:00", + "2026-05-04T06:00:00", + "2026-05-04T06:01:00", + "2026-05-04T06:02:00", + "2026-05-04T06:03:00", + "2026-05-04T06:04:00", + "2026-05-04T06:05:00", + "2026-05-04T06:06:00", + "2026-05-04T06:07:00", + "2026-05-04T06:08:00", + "2026-05-04T06:09:00", + "2026-05-04T06:10:00", + "2026-05-04T06:11:00", + "2026-05-04T06:12:00", + "2026-05-04T06:13:00", + "2026-05-04T06:14:00", + "2026-05-04T06:15:00", + "2026-05-04T06:16:00", + "2026-05-04T06:17:00", + "2026-05-04T06:18:00", + "2026-05-04T06:19:00", + "2026-05-04T06:20:00", + "2026-05-04T06:21:00", + "2026-05-04T06:22:00", + "2026-05-04T06:23:00", + "2026-05-04T06:24:00", + "2026-05-04T06:25:00", + "2026-05-04T06:26:00", + "2026-05-04T06:27:00", + "2026-05-04T06:28:00", + "2026-05-04T06:29:00", + "2026-05-04T06:30:00", + "2026-05-04T06:31:00", + "2026-05-04T06:32:00", + "2026-05-04T06:33:00", + "2026-05-04T06:34:00", + "2026-05-04T06:35:00", + "2026-05-04T06:36:00", + "2026-05-04T06:37:00", + "2026-05-04T06:38:00", + "2026-05-04T06:39:00", + "2026-05-04T06:40:00", + "2026-05-04T06:41:00", + "2026-05-04T06:42:00", + "2026-05-04T06:43:00", + "2026-05-04T06:44:00", + "2026-05-04T06:45:00", + "2026-05-04T06:46:00", + "2026-05-04T06:47:00", + "2026-05-04T06:48:00", + "2026-05-04T06:49:00", + "2026-05-04T06:50:00", + "2026-05-04T06:51:00", + "2026-05-04T06:52:00", + "2026-05-04T06:53:00", + "2026-05-04T06:54:00", + "2026-05-04T06:55:00", + "2026-05-04T06:56:00", + "2026-05-04T06:57:00", + "2026-05-04T06:58:00", + "2026-05-04T06:59:00", + "2026-05-04T07:00:00", + "2026-05-04T07:01:00", + "2026-05-04T07:02:00", + "2026-05-04T07:03:00", + "2026-05-04T07:04:00", + "2026-05-04T07:05:00", + "2026-05-04T07:06:00", + "2026-05-04T07:07:00", + "2026-05-04T07:08:00", + "2026-05-04T07:09:00", + "2026-05-04T07:10:00", + "2026-05-04T07:11:00", + "2026-05-04T07:12:00", + "2026-05-04T07:13:00", + "2026-05-04T07:14:00", + "2026-05-04T07:15:00", + "2026-05-04T07:16:00", + "2026-05-04T07:17:00", + "2026-05-04T07:18:00", + "2026-05-04T07:19:00", + "2026-05-04T07:20:00", + "2026-05-04T07:21:00", + "2026-05-04T07:22:00", + "2026-05-04T07:23:00", + "2026-05-04T07:24:00", + "2026-05-04T07:25:00", + "2026-05-04T07:26:00", + "2026-05-04T07:27:00", + "2026-05-04T07:28:00", + "2026-05-04T07:29:00", + "2026-05-04T07:30:00", + "2026-05-04T07:31:00", + "2026-05-04T07:32:00", + "2026-05-04T07:33:00", + "2026-05-04T07:34:00", + "2026-05-04T07:35:00", + "2026-05-04T07:36:00", + "2026-05-04T07:37:00", + "2026-05-04T07:38:00", + "2026-05-04T07:39:00", + "2026-05-04T07:40:00", + "2026-05-04T07:41:00", + "2026-05-04T07:42:00", + "2026-05-04T07:43:00", + "2026-05-04T07:44:00", + "2026-05-04T07:45:00", + "2026-05-04T07:46:00", + "2026-05-04T07:47:00", + "2026-05-04T07:48:00", + "2026-05-04T07:49:00", + "2026-05-04T07:50:00", + "2026-05-04T07:51:00", + "2026-05-04T07:52:00", + "2026-05-04T07:53:00", + "2026-05-04T07:54:00", + "2026-05-04T07:55:00", + "2026-05-04T07:56:00", + "2026-05-04T07:57:00", + "2026-05-04T07:58:00", + "2026-05-04T07:59:00", + "2026-05-04T08:00:00", + "2026-05-04T08:01:00", + "2026-05-04T08:02:00", + "2026-05-04T08:03:00", + "2026-05-04T08:04:00", + "2026-05-04T08:05:00", + "2026-05-04T08:06:00", + "2026-05-04T08:07:00", + "2026-05-04T08:08:00", + "2026-05-04T08:09:00", + "2026-05-04T08:10:00", + "2026-05-04T08:11:00", + "2026-05-04T08:12:00", + "2026-05-04T08:13:00", + "2026-05-04T08:14:00", + "2026-05-04T08:15:00", + "2026-05-04T08:16:00", + "2026-05-04T08:17:00", + "2026-05-04T08:18:00", + "2026-05-04T08:19:00", + "2026-05-04T08:20:00", + "2026-05-04T08:21:00", + "2026-05-04T08:22:00", + "2026-05-04T08:23:00", + "2026-05-04T08:24:00", + "2026-05-04T08:25:00", + "2026-05-04T08:26:00", + "2026-05-04T08:27:00", + "2026-05-04T08:28:00", + "2026-05-04T08:29:00", + "2026-05-04T08:30:00", + "2026-05-04T08:31:00", + "2026-05-04T08:32:00", + "2026-05-04T08:33:00", + "2026-05-04T08:34:00", + "2026-05-04T08:35:00", + "2026-05-04T08:36:00", + "2026-05-04T08:37:00", + "2026-05-04T08:38:00", + "2026-05-04T08:39:00", + "2026-05-04T08:40:00", + "2026-05-04T08:41:00", + "2026-05-04T08:42:00", + "2026-05-04T08:43:00", + "2026-05-04T08:44:00", + "2026-05-04T08:45:00", + "2026-05-04T08:46:00", + "2026-05-04T08:47:00", + "2026-05-04T08:48:00", + "2026-05-04T08:49:00", + "2026-05-04T08:50:00", + "2026-05-04T08:51:00", + "2026-05-04T08:52:00", + "2026-05-04T08:53:00", + "2026-05-04T08:54:00", + "2026-05-04T08:55:00", + "2026-05-04T08:56:00", + "2026-05-04T08:57:00", + "2026-05-04T08:58:00", + "2026-05-04T08:59:00", + "2026-05-04T09:00:00", + "2026-05-04T09:01:00", + "2026-05-04T09:02:00", + "2026-05-04T09:03:00", + "2026-05-04T09:04:00", + "2026-05-04T09:05:00", + "2026-05-04T09:06:00", + "2026-05-04T09:07:00", + "2026-05-04T09:08:00", + "2026-05-04T09:09:00", + "2026-05-04T09:10:00", + "2026-05-04T09:11:00", + "2026-05-04T09:12:00", + "2026-05-04T09:13:00", + "2026-05-04T09:14:00", + "2026-05-04T09:15:00", + "2026-05-04T09:16:00", + "2026-05-04T09:17:00", + "2026-05-04T09:18:00", + "2026-05-04T09:19:00", + "2026-05-04T09:20:00", + "2026-05-04T09:21:00", + "2026-05-04T09:22:00", + "2026-05-04T09:23:00", + "2026-05-04T09:24:00", + "2026-05-04T09:25:00", + "2026-05-04T09:26:00", + "2026-05-04T09:27:00", + "2026-05-04T09:28:00", + "2026-05-04T09:29:00", + "2026-05-04T09:30:00", + "2026-05-04T09:31:00", + "2026-05-04T09:32:00", + "2026-05-04T09:33:00", + "2026-05-04T09:34:00", + "2026-05-04T09:35:00", + "2026-05-04T09:36:00", + "2026-05-04T09:37:00", + "2026-05-04T09:38:00", + "2026-05-04T09:39:00", + "2026-05-04T09:40:00", + "2026-05-04T09:41:00", + "2026-05-04T09:42:00", + "2026-05-04T09:43:00", + "2026-05-04T09:44:00", + "2026-05-04T09:45:00", + "2026-05-04T09:46:00", + "2026-05-04T09:47:00", + "2026-05-04T09:48:00", + "2026-05-04T09:49:00", + "2026-05-04T09:50:00", + "2026-05-04T09:51:00", + "2026-05-04T09:52:00", + "2026-05-04T09:53:00", + "2026-05-04T09:54:00", + "2026-05-04T09:55:00", + "2026-05-04T09:56:00", + "2026-05-04T09:57:00", + "2026-05-04T09:58:00", + "2026-05-04T09:59:00", + "2026-05-04T10:00:00", + "2026-05-04T10:01:00", + "2026-05-04T10:02:00", + "2026-05-04T10:03:00", + "2026-05-04T10:04:00", + "2026-05-04T10:05:00", + "2026-05-04T10:06:00", + "2026-05-04T10:07:00", + "2026-05-04T10:08:00", + "2026-05-04T10:09:00", + "2026-05-04T10:10:00", + "2026-05-04T10:11:00", + "2026-05-04T10:12:00", + "2026-05-04T10:13:00", + "2026-05-04T10:14:00", + "2026-05-04T10:15:00", + "2026-05-04T10:16:00", + "2026-05-04T10:17:00", + "2026-05-04T10:18:00", + "2026-05-04T10:19:00", + "2026-05-04T10:20:00", + "2026-05-04T10:21:00", + "2026-05-04T10:22:00", + "2026-05-04T10:23:00", + "2026-05-04T10:24:00", + "2026-05-04T10:25:00", + "2026-05-04T10:26:00", + "2026-05-04T10:27:00", + "2026-05-04T10:28:00", + "2026-05-04T10:29:00", + "2026-05-04T10:30:00", + "2026-05-04T10:31:00", + "2026-05-04T10:32:00", + "2026-05-04T10:33:00", + "2026-05-04T10:34:00", + "2026-05-04T10:35:00", + "2026-05-04T10:36:00", + "2026-05-04T10:37:00", + "2026-05-04T10:38:00", + "2026-05-04T10:39:00", + "2026-05-04T10:40:00", + "2026-05-04T10:41:00", + "2026-05-04T10:42:00", + "2026-05-04T10:43:00", + "2026-05-04T10:44:00", + "2026-05-04T10:45:00", + "2026-05-04T10:46:00", + "2026-05-04T10:47:00", + "2026-05-04T10:48:00", + "2026-05-04T10:49:00", + "2026-05-04T10:50:00", + "2026-05-04T10:51:00", + "2026-05-04T10:52:00", + "2026-05-04T10:53:00", + "2026-05-04T10:54:00", + "2026-05-04T10:55:00", + "2026-05-04T10:56:00", + "2026-05-04T10:57:00", + "2026-05-04T10:58:00", + "2026-05-04T10:59:00", + "2026-05-04T11:00:00", + "2026-05-04T11:01:00", + "2026-05-04T11:02:00", + "2026-05-04T11:03:00", + "2026-05-04T11:04:00", + "2026-05-04T11:05:00", + "2026-05-04T11:06:00", + "2026-05-04T11:07:00", + "2026-05-04T11:08:00", + "2026-05-04T11:09:00", + "2026-05-04T11:10:00", + "2026-05-04T11:11:00", + "2026-05-04T11:12:00", + "2026-05-04T11:13:00", + "2026-05-04T11:14:00", + "2026-05-04T11:15:00", + "2026-05-04T11:16:00", + "2026-05-04T11:17:00", + "2026-05-04T11:18:00", + "2026-05-04T11:19:00", + "2026-05-04T11:20:00", + "2026-05-04T11:21:00", + "2026-05-04T11:22:00", + "2026-05-04T11:23:00", + "2026-05-04T11:24:00", + "2026-05-04T11:25:00", + "2026-05-04T11:26:00", + "2026-05-04T11:27:00", + "2026-05-04T11:28:00", + "2026-05-04T11:29:00", + "2026-05-04T11:30:00", + "2026-05-04T11:31:00", + "2026-05-04T11:32:00", + "2026-05-04T11:33:00", + "2026-05-04T11:34:00", + "2026-05-04T11:35:00", + "2026-05-04T11:36:00", + "2026-05-04T11:37:00", + "2026-05-04T11:38:00", + "2026-05-04T11:39:00", + "2026-05-04T11:40:00", + "2026-05-04T11:41:00", + "2026-05-04T11:42:00", + "2026-05-04T11:43:00", + "2026-05-04T11:44:00", + "2026-05-04T11:45:00", + "2026-05-04T11:46:00", + "2026-05-04T11:47:00", + "2026-05-04T11:48:00", + "2026-05-04T11:49:00", + "2026-05-04T11:50:00", + "2026-05-04T11:51:00", + "2026-05-04T11:52:00", + "2026-05-04T11:53:00", + "2026-05-04T11:54:00", + "2026-05-04T11:55:00", + "2026-05-04T11:56:00", + "2026-05-04T11:57:00", + "2026-05-04T11:58:00", + "2026-05-04T11:59:00", + "2026-05-04T12:00:00", + "2026-05-04T12:01:00", + "2026-05-04T12:02:00", + "2026-05-04T12:03:00", + "2026-05-04T12:04:00", + "2026-05-04T12:05:00", + "2026-05-04T12:06:00", + "2026-05-04T12:07:00", + "2026-05-04T12:08:00", + "2026-05-04T12:09:00", + "2026-05-04T12:10:00", + "2026-05-04T12:11:00", + "2026-05-04T12:12:00", + "2026-05-04T12:13:00", + "2026-05-04T12:14:00", + "2026-05-04T12:15:00", + "2026-05-04T12:16:00", + "2026-05-04T12:17:00", + "2026-05-04T12:18:00", + "2026-05-04T12:19:00", + "2026-05-04T12:20:00", + "2026-05-04T12:21:00", + "2026-05-04T12:22:00", + "2026-05-04T12:23:00", + "2026-05-04T12:24:00", + "2026-05-04T12:25:00", + "2026-05-04T12:26:00", + "2026-05-04T12:27:00", + "2026-05-04T12:28:00", + "2026-05-04T12:29:00", + "2026-05-04T12:30:00", + "2026-05-04T12:31:00", + "2026-05-04T12:32:00", + "2026-05-04T12:33:00", + "2026-05-04T12:34:00", + "2026-05-04T12:35:00", + "2026-05-04T12:36:00", + "2026-05-04T12:37:00", + "2026-05-04T12:38:00", + "2026-05-04T12:39:00", + "2026-05-04T12:40:00", + "2026-05-04T12:41:00", + "2026-05-04T12:42:00", + "2026-05-04T12:43:00", + "2026-05-04T12:44:00", + "2026-05-04T12:45:00", + "2026-05-04T12:46:00", + "2026-05-04T12:47:00", + "2026-05-04T12:48:00", + "2026-05-04T12:49:00", + "2026-05-04T12:50:00", + "2026-05-04T12:51:00", + "2026-05-04T12:52:00", + "2026-05-04T12:53:00", + "2026-05-04T12:54:00", + "2026-05-04T12:55:00", + "2026-05-04T12:56:00", + "2026-05-04T12:57:00", + "2026-05-04T12:58:00", + "2026-05-04T12:59:00", + "2026-05-04T13:00:00", + "2026-05-04T13:01:00", + "2026-05-04T13:02:00", + "2026-05-04T13:03:00", + "2026-05-04T13:04:00", + "2026-05-04T13:05:00", + "2026-05-04T13:06:00", + "2026-05-04T13:07:00", + "2026-05-04T13:08:00", + "2026-05-04T13:09:00", + "2026-05-04T13:10:00", + "2026-05-04T13:11:00", + "2026-05-04T13:12:00", + "2026-05-04T13:13:00", + "2026-05-04T13:14:00", + "2026-05-04T13:15:00", + "2026-05-04T13:16:00", + "2026-05-04T13:17:00", + "2026-05-04T13:18:00", + "2026-05-04T13:19:00", + "2026-05-04T13:20:00", + "2026-05-04T13:21:00", + "2026-05-04T13:22:00", + "2026-05-04T13:23:00", + "2026-05-04T13:24:00", + "2026-05-04T13:25:00", + "2026-05-04T13:26:00", + "2026-05-04T13:27:00", + "2026-05-04T13:28:00", + "2026-05-04T13:29:00", + "2026-05-04T13:30:00", + "2026-05-04T13:31:00", + "2026-05-04T13:32:00", + "2026-05-04T13:33:00", + "2026-05-04T13:34:00", + "2026-05-04T13:35:00", + "2026-05-04T13:36:00", + "2026-05-04T13:37:00", + "2026-05-04T13:38:00", + "2026-05-04T13:39:00", + "2026-05-04T13:40:00", + "2026-05-04T13:41:00", + "2026-05-04T13:42:00", + "2026-05-04T13:43:00", + "2026-05-04T13:44:00", + "2026-05-04T13:45:00", + "2026-05-04T13:46:00", + "2026-05-04T13:47:00", + "2026-05-04T13:48:00", + "2026-05-04T13:49:00", + "2026-05-04T13:50:00", + "2026-05-04T13:51:00", + "2026-05-04T13:52:00", + "2026-05-04T13:53:00", + "2026-05-04T13:54:00", + "2026-05-04T13:55:00", + "2026-05-04T13:56:00", + "2026-05-04T13:57:00", + "2026-05-04T13:58:00", + "2026-05-04T13:59:00", + "2026-05-04T14:00:00", + "2026-05-04T14:01:00", + "2026-05-04T14:02:00", + "2026-05-04T14:03:00", + "2026-05-04T14:04:00", + "2026-05-04T14:05:00", + "2026-05-04T14:06:00", + "2026-05-04T14:07:00", + "2026-05-04T14:08:00", + "2026-05-04T14:09:00", + "2026-05-04T14:10:00", + "2026-05-04T14:11:00", + "2026-05-04T14:12:00", + "2026-05-04T14:13:00", + "2026-05-04T14:14:00", + "2026-05-04T14:15:00", + "2026-05-04T14:16:00", + "2026-05-04T14:17:00", + "2026-05-04T14:18:00", + "2026-05-04T14:19:00", + "2026-05-04T14:20:00", + "2026-05-04T14:21:00", + "2026-05-04T14:22:00", + "2026-05-04T14:23:00", + "2026-05-04T14:24:00", + "2026-05-04T14:25:00", + "2026-05-04T14:26:00", + "2026-05-04T14:27:00", + "2026-05-04T14:28:00", + "2026-05-04T14:29:00", + "2026-05-04T14:30:00", + "2026-05-04T14:31:00", + "2026-05-04T14:32:00", + "2026-05-04T14:33:00", + "2026-05-04T14:34:00", + "2026-05-04T14:35:00", + "2026-05-04T14:36:00", + "2026-05-04T14:37:00", + "2026-05-04T14:38:00", + "2026-05-04T14:39:00", + "2026-05-04T14:40:00", + "2026-05-04T14:41:00", + "2026-05-04T14:42:00", + "2026-05-04T14:43:00", + "2026-05-04T14:44:00", + "2026-05-04T14:45:00", + "2026-05-04T14:46:00", + "2026-05-04T14:47:00", + "2026-05-04T14:48:00", + "2026-05-04T14:49:00", + "2026-05-04T14:50:00", + "2026-05-04T14:51:00", + "2026-05-04T14:52:00", + "2026-05-04T14:53:00", + "2026-05-04T14:54:00", + "2026-05-04T14:55:00", + "2026-05-04T14:56:00", + "2026-05-04T14:57:00", + "2026-05-04T14:58:00", + "2026-05-04T14:59:00", + "2026-05-04T15:00:00", + "2026-05-04T15:01:00", + "2026-05-04T15:02:00", + "2026-05-04T15:03:00", + "2026-05-04T15:04:00", + "2026-05-04T15:05:00", + "2026-05-04T15:06:00", + "2026-05-04T15:07:00", + "2026-05-04T15:08:00", + "2026-05-04T15:09:00", + "2026-05-04T15:10:00", + "2026-05-04T15:11:00", + "2026-05-04T15:12:00", + "2026-05-04T15:13:00", + "2026-05-04T15:14:00", + "2026-05-04T15:15:00", + "2026-05-04T15:16:00", + "2026-05-04T15:17:00", + "2026-05-04T15:18:00", + "2026-05-04T15:19:00", + "2026-05-04T15:20:00", + "2026-05-04T15:21:00", + "2026-05-04T15:22:00", + "2026-05-04T15:23:00", + "2026-05-04T15:24:00", + "2026-05-04T15:25:00", + "2026-05-04T15:26:00", + "2026-05-04T15:27:00", + "2026-05-04T15:28:00", + "2026-05-04T15:29:00", + "2026-05-04T15:30:00", + "2026-05-04T15:31:00", + "2026-05-04T15:32:00", + "2026-05-04T15:33:00", + "2026-05-04T15:34:00", + "2026-05-04T15:35:00", + "2026-05-04T15:36:00", + "2026-05-04T15:37:00", + "2026-05-04T15:38:00", + "2026-05-04T15:39:00", + "2026-05-04T15:40:00", + "2026-05-04T15:41:00", + "2026-05-04T15:42:00", + "2026-05-04T15:43:00", + "2026-05-04T15:44:00", + "2026-05-04T15:45:00", + "2026-05-04T15:46:00", + "2026-05-04T15:47:00", + "2026-05-04T15:48:00", + "2026-05-04T15:49:00", + "2026-05-04T15:50:00", + "2026-05-04T15:51:00", + "2026-05-04T15:52:00", + "2026-05-04T15:53:00", + "2026-05-04T15:54:00", + "2026-05-04T15:55:00", + "2026-05-04T15:56:00", + "2026-05-04T15:57:00", + "2026-05-04T15:58:00", + "2026-05-04T15:59:00", + "2026-05-04T16:00:00", + "2026-05-04T16:01:00", + "2026-05-04T16:02:00", + "2026-05-04T16:03:00", + "2026-05-04T16:04:00", + "2026-05-04T16:05:00", + "2026-05-04T16:06:00", + "2026-05-04T16:07:00", + "2026-05-04T16:08:00", + "2026-05-04T16:09:00", + "2026-05-04T16:10:00", + "2026-05-04T16:11:00", + "2026-05-04T16:12:00", + "2026-05-04T16:13:00", + "2026-05-04T16:14:00", + "2026-05-04T16:15:00", + "2026-05-04T16:16:00", + "2026-05-04T16:17:00", + "2026-05-04T16:18:00", + "2026-05-04T16:19:00", + "2026-05-04T16:20:00", + "2026-05-04T16:21:00", + "2026-05-04T16:22:00", + "2026-05-04T16:23:00", + "2026-05-04T16:24:00", + "2026-05-04T16:25:00", + "2026-05-04T16:26:00", + "2026-05-04T16:27:00", + "2026-05-04T16:28:00", + "2026-05-04T16:29:00", + "2026-05-04T16:30:00", + "2026-05-04T16:31:00", + "2026-05-04T16:32:00", + "2026-05-04T16:33:00", + "2026-05-04T16:34:00", + "2026-05-04T16:35:00", + "2026-05-04T16:36:00", + "2026-05-04T16:37:00", + "2026-05-04T16:38:00", + "2026-05-04T16:39:00", + "2026-05-04T16:40:00", + "2026-05-04T16:41:00", + "2026-05-04T16:42:00", + "2026-05-04T16:43:00", + "2026-05-04T16:44:00", + "2026-05-04T16:45:00", + "2026-05-04T16:46:00", + "2026-05-04T16:47:00", + "2026-05-04T16:48:00", + "2026-05-04T16:49:00", + "2026-05-04T16:50:00", + "2026-05-04T16:51:00", + "2026-05-04T16:52:00", + "2026-05-04T16:53:00", + "2026-05-04T16:54:00", + "2026-05-04T16:55:00", + "2026-05-04T16:56:00", + "2026-05-04T16:57:00", + "2026-05-04T16:58:00", + "2026-05-04T16:59:00", + "2026-05-04T17:00:00", + "2026-05-04T17:01:00", + "2026-05-04T17:02:00", + "2026-05-04T17:03:00", + "2026-05-04T17:04:00", + "2026-05-04T17:05:00", + "2026-05-04T17:06:00", + "2026-05-04T17:07:00", + "2026-05-04T17:08:00", + "2026-05-04T17:09:00", + "2026-05-04T17:10:00", + "2026-05-04T17:11:00", + "2026-05-04T17:12:00", + "2026-05-04T17:13:00", + "2026-05-04T17:14:00", + "2026-05-04T17:15:00", + "2026-05-04T17:16:00", + "2026-05-04T17:17:00", + "2026-05-04T17:18:00", + "2026-05-04T17:19:00", + "2026-05-04T17:20:00", + "2026-05-04T17:21:00", + "2026-05-04T17:22:00", + "2026-05-04T17:23:00", + "2026-05-04T17:24:00", + "2026-05-04T17:25:00", + "2026-05-04T17:26:00", + "2026-05-04T17:27:00", + "2026-05-04T17:28:00", + "2026-05-04T17:29:00", + "2026-05-04T17:30:00", + "2026-05-04T17:31:00", + "2026-05-04T17:32:00", + "2026-05-04T17:33:00", + "2026-05-04T17:34:00", + "2026-05-04T17:35:00", + "2026-05-04T17:36:00", + "2026-05-04T17:37:00", + "2026-05-04T17:38:00", + "2026-05-04T17:39:00", + "2026-05-04T17:40:00", + "2026-05-04T17:41:00", + "2026-05-04T17:42:00", + "2026-05-04T17:43:00", + "2026-05-04T17:44:00", + "2026-05-04T17:45:00", + "2026-05-04T17:46:00", + "2026-05-04T17:47:00", + "2026-05-04T17:48:00", + "2026-05-04T17:49:00", + "2026-05-04T17:50:00", + "2026-05-04T17:51:00", + "2026-05-04T17:52:00", + "2026-05-04T17:53:00", + "2026-05-04T17:54:00", + "2026-05-04T17:55:00", + "2026-05-04T17:56:00", + "2026-05-04T17:57:00", + "2026-05-04T17:58:00", + "2026-05-04T17:59:00", + "2026-05-04T18:00:00", + "2026-05-04T18:01:00", + "2026-05-04T18:02:00", + "2026-05-04T18:03:00", + "2026-05-04T18:04:00", + "2026-05-04T18:05:00", + "2026-05-04T18:06:00", + "2026-05-04T18:07:00", + "2026-05-04T18:08:00", + "2026-05-04T18:09:00", + "2026-05-04T18:10:00", + "2026-05-04T18:11:00", + "2026-05-04T18:12:00", + "2026-05-04T18:13:00", + "2026-05-04T18:14:00", + "2026-05-04T18:15:00", + "2026-05-04T18:16:00", + "2026-05-04T18:17:00", + "2026-05-04T18:18:00", + "2026-05-04T18:19:00", + "2026-05-04T18:20:00", + "2026-05-04T18:21:00", + "2026-05-04T18:22:00", + "2026-05-04T18:23:00", + "2026-05-04T18:24:00", + "2026-05-04T18:25:00", + "2026-05-04T18:26:00", + "2026-05-04T18:27:00", + "2026-05-04T18:28:00", + "2026-05-04T18:29:00", + "2026-05-04T18:30:00", + "2026-05-04T18:31:00", + "2026-05-04T18:32:00", + "2026-05-04T18:33:00", + "2026-05-04T18:34:00", + "2026-05-04T18:35:00", + "2026-05-04T18:36:00", + "2026-05-04T18:37:00", + "2026-05-04T18:38:00", + "2026-05-04T18:39:00", + "2026-05-04T18:40:00", + "2026-05-04T18:41:00", + "2026-05-04T18:42:00", + "2026-05-04T18:43:00", + "2026-05-04T18:44:00", + "2026-05-04T18:45:00", + "2026-05-04T18:46:00", + "2026-05-04T18:47:00", + "2026-05-04T18:48:00", + "2026-05-04T18:49:00", + "2026-05-04T18:50:00", + "2026-05-04T18:51:00", + "2026-05-04T18:52:00", + "2026-05-04T18:53:00", + "2026-05-04T18:54:00", + "2026-05-04T18:55:00", + "2026-05-04T18:56:00", + "2026-05-04T18:57:00", + "2026-05-04T18:58:00", + "2026-05-04T18:59:00", + "2026-05-04T19:00:00", + "2026-05-04T19:01:00", + "2026-05-04T19:02:00", + "2026-05-04T19:03:00", + "2026-05-04T19:04:00", + "2026-05-04T19:05:00", + "2026-05-04T19:06:00", + "2026-05-04T19:07:00", + "2026-05-04T19:08:00", + "2026-05-04T19:09:00", + "2026-05-04T19:10:00", + "2026-05-04T19:11:00", + "2026-05-04T19:12:00", + "2026-05-04T19:13:00", + "2026-05-04T19:14:00", + "2026-05-04T19:15:00", + "2026-05-04T19:16:00", + "2026-05-04T19:17:00", + "2026-05-04T19:18:00", + "2026-05-04T19:19:00", + "2026-05-04T19:20:00", + "2026-05-04T19:21:00", + "2026-05-04T19:22:00", + "2026-05-04T19:23:00", + "2026-05-04T19:24:00", + "2026-05-04T19:25:00", + "2026-05-04T19:26:00", + "2026-05-04T19:27:00", + "2026-05-04T19:28:00", + "2026-05-04T19:29:00", + "2026-05-04T19:30:00", + "2026-05-04T19:31:00", + "2026-05-04T19:32:00", + "2026-05-04T19:33:00", + "2026-05-04T19:34:00", + "2026-05-04T19:35:00", + "2026-05-04T19:36:00", + "2026-05-04T19:37:00", + "2026-05-04T19:38:00", + "2026-05-04T19:39:00", + "2026-05-04T19:40:00", + "2026-05-04T19:41:00", + "2026-05-04T19:42:00", + "2026-05-04T19:43:00", + "2026-05-04T19:44:00", + "2026-05-04T19:45:00", + "2026-05-04T19:46:00", + "2026-05-04T19:47:00", + "2026-05-04T19:48:00", + "2026-05-04T19:49:00", + "2026-05-04T19:50:00", + "2026-05-04T19:51:00", + "2026-05-04T19:52:00", + "2026-05-04T19:53:00", + "2026-05-04T19:54:00", + "2026-05-04T19:55:00", + "2026-05-04T19:56:00", + "2026-05-04T19:57:00", + "2026-05-04T19:58:00", + "2026-05-04T19:59:00", + "2026-05-04T20:00:00", + "2026-05-04T20:01:00", + "2026-05-04T20:02:00", + "2026-05-04T20:03:00", + "2026-05-04T20:04:00", + "2026-05-04T20:05:00", + "2026-05-04T20:06:00", + "2026-05-04T20:07:00", + "2026-05-04T20:08:00", + "2026-05-04T20:09:00", + "2026-05-04T20:10:00", + "2026-05-04T20:11:00", + "2026-05-04T20:12:00", + "2026-05-04T20:13:00", + "2026-05-04T20:14:00", + "2026-05-04T20:15:00", + "2026-05-04T20:16:00", + "2026-05-04T20:17:00", + "2026-05-04T20:18:00", + "2026-05-04T20:19:00", + "2026-05-04T20:20:00", + "2026-05-04T20:21:00", + "2026-05-04T20:22:00", + "2026-05-04T20:23:00", + "2026-05-04T20:24:00", + "2026-05-04T20:25:00", + "2026-05-04T20:26:00", + "2026-05-04T20:27:00", + "2026-05-04T20:28:00", + "2026-05-04T20:29:00", + "2026-05-04T20:30:00", + "2026-05-04T20:31:00", + "2026-05-04T20:32:00", + "2026-05-04T20:33:00", + "2026-05-04T20:34:00", + "2026-05-04T20:35:00", + "2026-05-04T20:36:00", + "2026-05-04T20:37:00", + "2026-05-04T20:38:00", + "2026-05-04T20:39:00", + "2026-05-04T20:40:00", + "2026-05-04T20:41:00", + "2026-05-04T20:42:00", + "2026-05-04T20:43:00", + "2026-05-04T20:44:00", + "2026-05-04T20:45:00", + "2026-05-04T20:46:00", + "2026-05-04T20:47:00", + "2026-05-04T20:48:00", + "2026-05-04T20:49:00", + "2026-05-04T20:50:00", + "2026-05-04T20:51:00", + "2026-05-04T20:52:00", + "2026-05-04T20:53:00", + "2026-05-04T20:54:00", + "2026-05-04T20:55:00", + "2026-05-04T20:56:00", + "2026-05-04T20:57:00", + "2026-05-04T20:58:00", + "2026-05-04T20:59:00", + "2026-05-04T21:00:00", + "2026-05-04T21:01:00", + "2026-05-04T21:02:00", + "2026-05-04T21:03:00", + "2026-05-04T21:04:00", + "2026-05-04T21:05:00", + "2026-05-04T21:06:00", + "2026-05-04T21:07:00", + "2026-05-04T21:08:00", + "2026-05-04T21:09:00", + "2026-05-04T21:10:00", + "2026-05-04T21:11:00", + "2026-05-04T21:12:00", + "2026-05-04T21:13:00", + "2026-05-04T21:14:00", + "2026-05-04T21:15:00", + "2026-05-04T21:16:00", + "2026-05-04T21:17:00", + "2026-05-04T21:18:00", + "2026-05-04T21:19:00", + "2026-05-04T21:20:00", + "2026-05-04T21:21:00", + "2026-05-04T21:22:00", + "2026-05-04T21:23:00", + "2026-05-04T21:24:00", + "2026-05-04T21:25:00", + "2026-05-04T21:26:00", + "2026-05-04T21:27:00", + "2026-05-04T21:28:00", + "2026-05-04T21:29:00", + "2026-05-04T21:30:00", + "2026-05-04T21:31:00", + "2026-05-04T21:32:00", + "2026-05-04T21:33:00", + "2026-05-04T21:34:00", + "2026-05-04T21:35:00", + "2026-05-04T21:36:00", + "2026-05-04T21:37:00", + "2026-05-04T21:38:00", + "2026-05-04T21:39:00", + "2026-05-04T21:40:00", + "2026-05-04T21:41:00", + "2026-05-04T21:42:00", + "2026-05-04T21:43:00", + "2026-05-04T21:44:00", + "2026-05-04T21:45:00", + "2026-05-04T21:46:00", + "2026-05-04T21:47:00", + "2026-05-04T21:48:00", + "2026-05-04T21:49:00", + "2026-05-04T21:50:00", + "2026-05-04T21:51:00", + "2026-05-04T21:52:00", + "2026-05-04T21:53:00", + "2026-05-04T21:54:00", + "2026-05-04T21:55:00", + "2026-05-04T21:56:00", + "2026-05-04T21:57:00", + "2026-05-04T21:58:00", + "2026-05-04T21:59:00", + "2026-05-04T22:00:00", + "2026-05-04T22:01:00", + "2026-05-04T22:02:00", + "2026-05-04T22:03:00", + "2026-05-04T22:04:00", + "2026-05-04T22:05:00", + "2026-05-04T22:06:00", + "2026-05-04T22:07:00", + "2026-05-04T22:08:00", + "2026-05-04T22:09:00", + "2026-05-04T22:10:00", + "2026-05-04T22:11:00", + "2026-05-04T22:12:00", + "2026-05-04T22:13:00", + "2026-05-04T22:14:00", + "2026-05-04T22:15:00", + "2026-05-04T22:16:00", + "2026-05-04T22:17:00", + "2026-05-04T22:18:00", + "2026-05-04T22:19:00", + "2026-05-04T22:20:00", + "2026-05-04T22:21:00", + "2026-05-04T22:22:00", + "2026-05-04T22:23:00", + "2026-05-04T22:24:00", + "2026-05-04T22:25:00", + "2026-05-04T22:26:00", + "2026-05-04T22:27:00", + "2026-05-04T22:28:00", + "2026-05-04T22:29:00", + "2026-05-04T22:30:00", + "2026-05-04T22:31:00", + "2026-05-04T22:32:00", + "2026-05-04T22:33:00", + "2026-05-04T22:34:00", + "2026-05-04T22:35:00", + "2026-05-04T22:36:00", + "2026-05-04T22:37:00", + "2026-05-04T22:38:00", + "2026-05-04T22:39:00", + "2026-05-04T22:40:00", + "2026-05-04T22:41:00" + ], + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "legend": { + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "open_dt" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "med_ratio_aster_over_extend" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.express as px\n", + "\n", + "px.line(df_candles_comb, y='med_ratio_aster_over_extend', x='open_dt')" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "11df4770", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.00032550317365598325)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_candles_comb['med_ratio_aster_over_extend'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "89cbf119", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.00032550317365598325)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_candles_comb['med_ratio_aster_over_extend'].median()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "f83feeda", + "metadata": {}, + "outputs": [], + "source": [ + "# df_mp_by_hour = df_candles_comb.groupby(df_candles_comb['open_dt'].dt.year).agg({'med_ratio_aster_over_extend':['min','max','median'],'volume_ast':'sum','volume_ext':'sum'})\n", + "# df_mp_by_hour = df_candles_comb.agg({'med_ratio_aster_over_extend':['min','max','median'],'volume_ast':'sum','volume_ext':'sum'})\n", + "df_mp_by_hour = df_candles_comb.agg({'med_ratio_aster_over_extend':['min','max','median']}).T\n", + "# df_mp_by_hour.columns = ['_'.join(col).strip() for col in df_mp_by_hour.columns.values]\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9ed1f5af", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(-0.00313859949887918)" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "9bac094e", + "metadata": {}, + "outputs": [], + "source": [ + "extend_buy_signal = {\n", + " 'median': df_mp_by_hour['median'].iloc[0],\n", + " 'min': df_mp_by_hour['min'].iloc[0],\n", + " 'max': df_mp_by_hour['max'].iloc[0],\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "99da860f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "9db1fc65", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "variable=med_ratio_aster_over_extend_min
open_dt=%{x}
value=%{y}", + "legendgroup": "med_ratio_aster_over_extend_min", + "line": { + "color": "#636efa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "med_ratio_aster_over_extend_min", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": { + "bdata": "6gcAAA==", + "dtype": "i4" + }, + "xaxis": "x", + "y": { + "bdata": "AGN+xh62ab8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "variable=med_ratio_aster_over_extend_max
open_dt=%{x}
value=%{y}", + "legendgroup": "med_ratio_aster_over_extend_max", + "line": { + "color": "#EF553B", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "med_ratio_aster_over_extend_max", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": { + "bdata": "6gcAAA==", + "dtype": "i4" + }, + "xaxis": "x", + "y": { + "bdata": "AOwIErJMeD8=", + "dtype": "f8" + }, + "yaxis": "y" + }, + { + "hovertemplate": "variable=med_ratio_aster_over_extend_median
open_dt=%{x}
value=%{y}", + "legendgroup": "med_ratio_aster_over_extend_median", + "line": { + "color": "#00cc96", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "med_ratio_aster_over_extend_median", + "orientation": "v", + "showlegend": true, + "type": "scatter", + "x": { + "bdata": "6gcAAA==", + "dtype": "i4" + }, + "xaxis": "x", + "y": { + "bdata": "ABBQfAlVNT8=", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "legend": { + "title": { + "text": "variable" + }, + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "open_dt" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "value" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.line(df_mp_by_hour, y=df_mp_by_hour.columns.values[:3])" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "aa9225ca", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hovertemplate": "open_dt=%{x}
volume_ast_sum=%{y}", + "legendgroup": "", + "line": { + "color": "#636efa", + "dash": "solid" + }, + "marker": { + "symbol": "circle" + }, + "mode": "lines", + "name": "", + "orientation": "v", + "showlegend": false, + "type": "scatter", + "x": { + "bdata": "6gcAAA==", + "dtype": "i4" + }, + "xaxis": "x", + "y": { + "bdata": "AAAAAHvONUE=", + "dtype": "f8" + }, + "yaxis": "y" + } + ], + "layout": { + "legend": { + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "open_dt" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "volume_ast_sum" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.line(df_mp_by_hour, y='volume_ast_sum')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a9a28ee", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/engine_best_funding_rate.py b/engine_best_funding_rate.py index 30b499e..0442003 100644 --- a/engine_best_funding_rate.py +++ b/engine_best_funding_rate.py @@ -14,6 +14,7 @@ import valkey from dotenv import load_dotenv import modules.manual_leverage as leverage import modules.aster_auth as aster_auth +import modules.utils as utils ### MANUAL LEVERAGE DATA ### df_leverage_by_exch = pd.DataFrame(data=leverage.LEVERAGE_BY_EXCH) @@ -117,6 +118,48 @@ def load_extend_current_fr(df_mkt_stats: pd.DataFrame) -> pd.DataFrame: return df +async def get_candles(symbol: str) -> pd.DataFrame: + ### Candles for Midpoint Dispersion ### + # Aster + symbol_ast = utils.symbol_to_aster_fmt(symbol) + aster_candles = { + "url": "/fapi/v3/klines", + "method": "GET", + "params": { + 'symbol': symbol_ast, + 'interval': '1m', + 'limit':'1440' + } + } + j = await aster_auth.post_authenticated_url(aster_candles) + 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']) + df_candles_aster = df_candles_aster[['open_px', 'low_px', 'high_px', 'close_px', 'volume', 'open_ts']] + 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) + + df_candles_aster['med_px'] = ( df_candles_aster['high_px'] + df_candles_aster['low_px'] ) / 2 + 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 + + # Extend + symbol_ext = utils.symbol_to_extend_fmt(symbol) + ext_params = { + 'interval':'1m', + 'limit':1440, + } + r = json.loads(requests.get(f'https://api.starknet.extended.exchange/api/v1/info/candles/{symbol_ext}/trades', params=ext_params).text) + df_candles_extended = pd.DataFrame(r['data']) + 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) + 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) + df_candles_extended['med_px'] = ( df_candles_extended['high_px'] + df_candles_extended['low_px'] ) / 2 + 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 + + df_candles_comb = df_candles_aster.merge(df_candles_extended, on='open_ts', how='inner', suffixes=('_ast','_ext')) + df_candles_comb['open_dt'] = pd.to_datetime(df_candles_comb['open_ts'], unit='ms') + df_candles_comb['med_ratio_aster_over_extend'] = ( df_candles_comb['med_px_ast'] / df_candles_comb['med_px_ext'] ) - 1 + + return df_candles_comb + + + async def loop() -> None: global Mkt_Info_Last_Refresh_TS_ms try: @@ -163,6 +206,15 @@ async def loop() -> None: # print(df_best_fr_rate.columns) # print(df_best_fr_rate.iloc[0]) + candles_ratios = [] + + for index, row in df_best_fr_rate.iterrows(): + df = await get_candles(symbol=row['symbol_ext']) + buy_ratio_ext = float(df['med_ratio_aster_over_extend'].median()) + candles_ratios.append({'symbol_ext':row['symbol_ext'], 'buy_ratio_ext':buy_ratio_ext,'buy_ratio_ast':buy_ratio_ext*-1}) + + df_best_fr_rate = df_best_fr_rate.merge(pd.DataFrame(candles_ratios), on='symbol_ext', how='left') + if len(df_best_fr_rate) < 1: raise ValueError(f'NO BFR RATE: {df_best_fr_rate}') @@ -177,6 +229,7 @@ async def loop() -> None: min_order_size=float(df_best_fr_rate['min_order_size_ast'].iloc[0]), min_lot_size=float(df_best_fr_rate['min_lot_size_ast'].iloc[0]), min_notional=float(df_best_fr_rate['min_notional_ast'].iloc[0]), + buy_ratio=float(df_best_fr_rate['buy_ratio_ast'].iloc[0]), ) EXTEND = structs.Perpetual_Exchange( mult = int(df_best_fr_rate['max_leverage_ext'].iloc[0]), @@ -188,6 +241,7 @@ async def loop() -> None: min_order_size=float(df_best_fr_rate['min_order_size_ext'].iloc[0]), min_lot_size=float(df_best_fr_rate['min_lot_size_ext'].iloc[0]), min_notional=float(df_best_fr_rate['min_notional_ext'].iloc[0]), + buy_ratio=float(df_best_fr_rate['buy_ratio_ext'].iloc[0]), ) except Exception as e: logging.critical(f'Failed to build ASTER/EXTEND objs err: {e}; df cols: {df_best_fr_rate.columns}') @@ -196,13 +250,13 @@ async def loop() -> None: best_next_funding_pair: dict[str, dict] = {'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)} VAL_KEY.set(name='fr_engine_best_fund_rate_output', value=json.dumps(obj=best_next_funding_pair)) - master_data = df_comb_fr[ - ['symbol_ast','max_leverage_ast','lh_asset_ast','rh_asset_ast','funding_rate_ast','min_price_ast','min_order_size_ast','min_lot_size_ast','min_notional_ast', - 'symbol_ext','max_leverage_ext','lh_asset_ext','rh_asset_ext','funding_rate_ext','min_price_ext','min_order_size_ext','min_lot_size_ext','min_notional_ext'] + master_data = df_best_fr_rate[ + ['symbol_ast','max_leverage_ast','lh_asset_ast','rh_asset_ast','funding_rate_ast','min_price_ast','min_order_size_ast','min_lot_size_ast','min_notional_ast','buy_ratio_ast', + 'symbol_ext','max_leverage_ext','lh_asset_ext','rh_asset_ext','funding_rate_ext','min_price_ext','min_order_size_ext','min_lot_size_ext','min_notional_ext','buy_ratio_ext'] ].to_json(orient='records') - + VAL_KEY.set(name='fr_engine_best_fund_rate_master', value=str(master_data)) - print(df_best_fr_rate[['symbol_ext','max_leverage_ext','funding_rate_ast','funding_rate_ext','net_funding_rate','daily_volume_ast']].head(10)) + print(df_best_fr_rate[['symbol_ext','max_leverage_ext','buy_ratio_ext','net_funding_rate','daily_volume_ast']].head(10)) logging.info(f'BFR REFRESHED @ {datetime.now()}') time.sleep(LOOP_SLEEP_SEC) continue diff --git a/extended.ipynb b/extended.ipynb index 846b8a4..f616ccf 100644 --- a/extended.ipynb +++ b/extended.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 25, + "execution_count": 1, "id": "6c70a8c3", "metadata": {}, "outputs": [], @@ -27,7 +27,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 2, "id": "ff971ca9", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 3, "id": "fc2c6d2b", "metadata": {}, "outputs": [], @@ -154,9 +154,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "4b39754d", "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'status': 'OK', 'data': EmptyModel(), 'error': None, 'pagination': None}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict(await trading_client.orders.cancel_order(order_id='123'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "976ca20d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] }, diff --git a/main.py b/main.py index 47e147a..9ee221c 100644 --- a/main.py +++ b/main.py @@ -50,26 +50,11 @@ EXTEND: structs.Perpetual_Exchange Open_Symbols: list[str] = [] Last_Aster_Fill_Time_Ts: float = 0.00 Just_Rejected_Or_Expired: bool = False +at_notional_target: structs.Locked_Value = structs.Locked_Value(None) +ALPHA_TGT_NOTIONAL: structs.Current_Previous_Value = structs.Current_Previous_Value(None) -ASTER_AVAIL_COLLATERAL = 0 -EXTEND_AVAIL_COLLATERAL = 0 - -ASTER_NOTIONAL_POSITION = 0 -EXTEND_NOTIONAL_POSITION = 0 - -ASTER_NOTIONAL_OBJ: dict | None = None -EXTEND_NOTIONAL_OBJ: dict | None = None - -ASTER_UNREALIZED_PNL = 0 -EXTEND_UNREALIZED_PNL = 0 - -ASTER_OPEN_ORDERS = [] -EXTEND_OPEN_ORDERS = [] - -# ASTER_OPEN_POSITIONS = [] -# EXTEND_OPEN_POSITIONS = [] - -# EXCHANGES: list = [ Aster(), Extend() ] +ASTER_OPEN_ORDERS: list[dict] = [] +EXTEND_OPEN_ORDERS: list[dict] = [] ### FLAGS ### Flags = structs.Flags() @@ -81,7 +66,67 @@ Flags = structs.Flags() # precision = Decimal(fmt) # return Decimal(str(value)).quantize(precision, rounding=ROUND_HALF_UP) + ### OPEN ORDERS ### +async def handle_order_updates(exch: str, local_open_orders: list[dict], ws_open_orders: list[dict]) -> list[dict]: # exch = 'ASTER' | 'EXTEND' + global Just_Rejected_Or_Expired + global Last_Aster_Fill_Time_Ts + + if ws_open_orders: + for idx, o in enumerate(local_open_orders): + o = dict(o) + if o.get('order_id') is not None: + ws_order_id_field = 'order_id' + elif o.get('orderId') is not None: + ws_order_id_field = 'orderId' + else: + ws_order_id_field = 'id' + + order_id = o[ws_order_id_field] + order_orig_status: str = o.get('status') if o.get('status') is not None else o['order_status'] # ty:ignore[invalid-assignment] + order_update: list[dict] = [dict(ou) for ou in ws_open_orders if dict(ou).get('order_id', None) == order_id] + + if len(order_update) > 0: + order_update: dict = order_update[0] + order_update_status: str = order_update.get('status') if order_update.get('status') is not None else order_update['order_status'] # ty:ignore[invalid-assignment] + order_status_changed: bool = order_orig_status.upper() != order_update_status.upper() + + local_open_orders[idx]['order_id'] = order_id + local_open_orders[idx]['status'] = order_update_status + local_open_orders[idx]['price'] = order_update.get('price', 0) if order_update.get('price') is not None else order_update['original_price'] + + if order_status_changed: + logging.info(f'{exch} ORDER ({order_id}): {order_orig_status} -> {order_update_status}') + local_open_orders[idx] = order_update + if order_update_status in ['CANCELLED','CANCELED','EXPIRED','REJECTED']: + logging.info(f'{exch} ORDER CANCELLED or EXPIRED: {order_id}') + local_open_orders.pop(idx) + Just_Rejected_Or_Expired = True + utils.send_tg_alert(f'FR_ALGO - {exch} REJECTED ({order_id})') + elif order_update_status in ['PARTIALLY_FILLED']: + logging.info(f'{exch} ORDER PARTIALLY FILLED: {order_id}') + # await get_aster_collateral() + if exch=='ASTER': + await get_aster_notional_position(resp=ws_open_orders) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + else: + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - {exch} PARTIALLY FILLED ({order_id})') + elif order_update_status in ['FILLED']: + logging.info(f'{exch} ORDER FILLED: {order_id}') + local_open_orders.pop(idx) + # await get_aster_collateral() + if exch=='ASTER': + await get_aster_notional_position(resp=ws_open_orders) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + else: + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - {exch} FILLED ({order_id})') + else: + logging.critical(f'{exch} ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') + await kill_algo() + return local_open_orders + async def get_aster_open_orders(): global ASTER_OPEN_ORDERS @@ -90,7 +135,7 @@ async def get_aster_open_orders(): "method": "GET", "params": {} } - ASTER_OPEN_ORDERS = await aster_auth.post_authenticated_url(fut_acct_openOrders) + ASTER_OPEN_ORDERS = await aster_auth.post_authenticated_url(fut_acct_openOrders) # ty:ignore[invalid-assignment] async def get_extend_open_orders(): global EXTEND_OPEN_ORDERS @@ -98,17 +143,6 @@ async def get_extend_open_orders(): EXTEND_OPEN_ORDERS = list(dict(await EXTEND_CLIENT.account.get_open_orders()).get('data', 0)) ### WALLLET ### -# async def get_aster_collateral(): -# global ASTER_AVAIL_COLLATERAL - -# fut_acct_balances = { -# "url": "/fapi/v3/balance", -# "method": "GET", -# "params": {} -# } -# r = await aster_auth.post_authenticated_url(fut_acct_balances) -# ASTER_AVAIL_COLLATERAL = float([d for d in r if d.get('asset')==ASTER.rh_asset][0].get('availableBalance')) - async def get_aster_account_open_symbols() -> list[str]: fut_acct_positionRisk: dict = { "url": "/fapi/v3/positionRisk", @@ -127,19 +161,25 @@ async def get_aster_account_open_symbols() -> list[str]: return ld async def get_aster_notional_position(resp: list | None = None): - global ASTER_NOTIONAL_OBJ - global ASTER_NOTIONAL_POSITION - global ASTER_UNREALIZED_PNL global ASTER - previous_notional_obj = ASTER_NOTIONAL_OBJ - previous_notional_position = ASTER_NOTIONAL_POSITION + previous_notional_obj = ASTER.notional_obj + previous_notional_position = ASTER.notional_position if resp: - d = [x for x in resp if x.get('symbol', None) == ASTER.symbol] - d = d[0] if d else {} - - if ( not resp ) or ( not d ): + pos_dict = [x for x in resp if x.get('symbol', None) == ASTER.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['entry_price'] = 0.00 + pos_dict['position_amount'] = 0.00 + pos_dict['unrealized_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + # logging.info('get_aster_notional - No Positions') + else: + logging.info('Getting Aster Notionals from API') fut_acct_positionRisk: dict = { "url": "/fapi/v3/positionRisk", "method": "GET", @@ -153,40 +193,42 @@ async def get_aster_notional_position(resp: list | None = None): logging.critical(f'JSONDecodeError trying to get Aster notional: {e}; resp: {resp}') await kill_algo() resp: list = [] + pos_dict = [x for x in resp if x.get('symbol', None) == ASTER.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['entry_price'] = 0.00 + pos_dict['position_amount'] = 0.00 + pos_dict['unrealized_pnl'] = 0.00 + logging.info('get_aster_notional - No Positions') + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) - d = [x for x in resp if x.get('symbol', None) == ASTER.symbol][0] - d['timestamp_arrival'] = round(datetime.now().timestamp()*1000) - - if previous_notional_obj is not None: - if previous_notional_obj['timestamp_arrival'] > d['timestamp_arrival']: - # logging.info(f'ASTER NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(d['timestamp_arrival'], unit='ms')}); skipping') + if previous_notional_obj: + if previous_notional_obj['timestamp_arrival'] > pos_dict['timestamp_arrival']: + # logging.info(f'ASTER NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(pos_dict['timestamp_arrival'], unit='ms')}); skipping') return - ASTER_NOTIONAL_OBJ = d + ASTER.notional_obj = pos_dict - if len(d) < 1: - logging.info(f'BAD NOTIONAL - ASTER CHANGE: Empty d: {d}; resp: {resp}') + if len(pos_dict) < 1: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: Empty pos_dict: {pos_dict}; resp: {resp}') await kill_algo() - ASTER_UNREALIZED_PNL = float(d['unrealized_pnl']) if d.get('unrealized_pnl') is not None else float(d['unRealizedProfit']) + ASTER.unrealized_pnl = float(pos_dict['unrealized_pnl']) if pos_dict.get('unrealized_pnl') is not None else float(pos_dict['unRealizedProfit']) - if d.get('notional') is not None: - ASTER_NOTIONAL_POSITION = float(d['notional']) - ASTER_UNREALIZED_PNL + if pos_dict.get('notional') is not None: + ASTER.notional_position = float(pos_dict['notional']) - ASTER.unrealized_pnl else: - ASTER_NOTIONAL_POSITION = float(d['position_amount'])*float(d['entry_price']) - if d.get('leverage') is not None: - ASTER.mult = int(d['leverage']) - if abs(ASTER_NOTIONAL_POSITION) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: - logging.info(f'BAD NOTIONAL - ASTER CHANGE: {previous_notional_position} -> {ASTER_NOTIONAL_POSITION}; UR PNL: {ASTER_UNREALIZED_PNL}; MULT: {ASTER.mult}; d: {d}; resp: {resp}; max_tgt_notional: {ALGO_CONFIG.Config.Max_Target_Notional}') + ASTER.notional_position = float(pos_dict['position_amount'])*float(pos_dict['entry_price']) + if pos_dict.get('leverage') is not None: + ASTER.mult = int(pos_dict['leverage']) + if abs(ASTER.notional_position) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: {previous_notional_position} -> {ASTER.notional_position}; UR PNL: {ASTER.unrealized_pnl}; MULT: {ASTER.mult}; pos_dict: {pos_dict}; resp: {resp}; max_tgt_notional: {ALGO_CONFIG.Config.Max_Target_Notional}') await kill_algo() - if ASTER_NOTIONAL_POSITION != previous_notional_position: - logging.info(f'ASTER NOTIONAL CHANGE: {previous_notional_position:.2f} -> {ASTER_NOTIONAL_POSITION:.2f}; UR PNL: {ASTER_UNREALIZED_PNL:.2f}; MULT: {ASTER.mult:.0f}; resp: {bool(resp)}') - -# async def get_extend_collateral(): -# global EXTEND_AVAIL_COLLATERAL - -# get_bals = dict(dict(await EXTEND_CLIENT.account.get_balance()).get('data', {})) -# EXTEND_AVAIL_COLLATERAL = get_bals.get('available_for_trade', 0) if get_bals.get('collateral_name', None)==EXTEND.rh_asset else 0 + if ASTER.notional_position != previous_notional_position: + logging.info(f'ASTER NOTIONAL CHANGE: {previous_notional_position:.2f} -> {ASTER.notional_position:.2f}; UR PNL: {ASTER.unrealized_pnl:.2f}; MULT: {ASTER.mult:.0f}; resp: {bool(resp)}') async def get_extend_account_open_symbols() -> list[str]: resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) @@ -201,15 +243,11 @@ async def set_comb_open_symbols() -> None: Open_Symbols = list(set(open_aster_symbols + open_extend_symbols)) - async def get_extend_notional(resp: list | None = None): - global EXTEND_NOTIONAL_OBJ - global EXTEND_NOTIONAL_POSITION - global EXTEND_UNREALIZED_PNL global EXTEND - previous_notional_obj = EXTEND_NOTIONAL_OBJ - previous_notional_position = EXTEND_NOTIONAL_POSITION + previous_notional_obj = EXTEND.notional_obj + previous_notional_position = EXTEND.notional_position if not resp: resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) @@ -224,7 +262,6 @@ async def get_extend_notional(resp: list | None = None): pos_dict['unrealised_pnl'] = 0.00 pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) logging.info('get_extend_notional - No Positions') - else: pos_dict = [dict(d) for d in resp if dict(d).get('market') == EXTEND.symbol] if pos_dict: @@ -239,16 +276,16 @@ async def get_extend_notional(resp: list | None = None): # pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) - if previous_notional_obj is not None: + if previous_notional_obj: if previous_notional_obj['timestamp_arrival'] > pos_dict['timestamp_arrival']: # logging.info(f'EXTEND NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(pos_dict['timestamp_arrival'], unit='ms')}); skipping') return else: previous_notional_obj = {} - EXTEND_NOTIONAL_OBJ = pos_dict + EXTEND.notional_obj = pos_dict - EXTEND_UNREALIZED_PNL = pos_dict.get('unrealised_pnl', 0) + EXTEND.unrealized_pnl = pos_dict.get('unrealised_pnl', 0) position_side = pos_dict['side'] # LONG or SHORT notional_pos_abs = abs(float(pos_dict['value'])) if position_side == 'LONG': @@ -258,13 +295,13 @@ async def get_extend_notional(resp: list | None = None): else: logging.info(f'EXTEND BAD SIDE ON POSITION UPDATE: {pos_dict}') - EXTEND_NOTIONAL_POSITION = notional_pos_sided - float(EXTEND_UNREALIZED_PNL) + EXTEND.notional_position = notional_pos_sided - float(EXTEND.unrealized_pnl) EXTEND.mult = pos_dict.get('leverage', EXTEND.mult) - if abs(EXTEND_NOTIONAL_POSITION) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: - logging.info(f'BAD NOTIONAL - EXTEND CHANGE: {previous_notional_position} -> {EXTEND_NOTIONAL_POSITION}; UR PNL: {EXTEND_UNREALIZED_PNL}; MULT: {EXTEND.mult}; d: {pos_dict}; resp: {resp}') + if abs(EXTEND.notional_position) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - EXTEND CHANGE: {previous_notional_position} -> {EXTEND.notional_position}; UR PNL: {EXTEND.unrealized_pnl}; MULT: {EXTEND.mult}; pos_dict: {pos_dict}; resp: {resp}') await kill_algo() - if EXTEND_NOTIONAL_POSITION != previous_notional_position: - logging.info(f'EXTEND NOTIONAL CHANGE: {previous_notional_position} [{previous_notional_obj.get('timestamp_arrival')}] -> {EXTEND_NOTIONAL_POSITION:.2f} [{EXTEND_NOTIONAL_OBJ['timestamp_arrival']}]; UR PNL: {EXTEND_UNREALIZED_PNL:.2f}; MULT: {EXTEND.mult}; resp: {bool(resp)}') + if EXTEND.notional_position != previous_notional_position: + logging.info(f'EXTEND NOTIONAL CHANGE: {previous_notional_position} [{previous_notional_obj.get('timestamp_arrival')}] -> {EXTEND.notional_position:.2f} [{EXTEND.notional_obj['timestamp_arrival']}]; UR PNL: {EXTEND.unrealized_pnl:.2f}; MULT: {EXTEND.mult}; resp: {bool(resp)}') ### EXCHANGE INFO ### async def get_aster_exch_info(symbol_override: str | None = None): @@ -304,7 +341,6 @@ async def get_extend_exch_info(symbol_override: str | None = None): EXTEND.min_order_size = float(r[EXTEND.symbol].trading_config.min_order_size) EXTEND.min_price = float(r[EXTEND.symbol].trading_config.min_price_change) - ### CANCEL ORDERS ### async def aster_cancel_all_orders(): cancel_all_open_orders = { @@ -328,7 +364,6 @@ async def kill_algo(): logging.info('ALGO KILL FLAG ACTIVATED; CANCELLING OPEN ORDERS AND SHUTTING DOWN') raise ValueError('KILL FLAG ACTIVATED') - ### ALGO LOOP ### async def run_algo(): global ASTER @@ -338,16 +373,18 @@ async def run_algo(): global MIN_TIME_TO_FUNDING global ASTER_OPEN_ORDERS global EXTEND_OPEN_ORDERS + global Last_Aster_Fill_Time_Ts global Just_Rejected_Or_Expired - # global Best_Symbol_by_Exchange + + global ALPHA_TGT_NOTIONAL + global at_notional_target try: while True: loop_start = time.time() # print('__________Start___________') - ### ALGO CONIFG ### - + ### Load ALGO CONIFG ### ALGO_CONFIG = json.loads(VAL_KEY.get('fr_orchestrator_output')) # ty:ignore[invalid-argument-type] ALGO_CONFIG = structs.Algo_Config(**ALGO_CONFIG) ALGO_CONFIG.Config.Max_Target_Notional = float(min([ASTER.mult, EXTEND.mult]) * ALGO_CONFIG.Config.Target_Open_Cash_Position) @@ -359,7 +396,6 @@ async def run_algo(): best_symbol_by_exchange_aster = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER']) best_symbol_by_exchange_extend = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND']) - ASTER_FUND_RATE_DICT: Any = VAL_KEY.get('fund_rate_aster') ASTER_FUND_RATE_DICT: dict = json.loads(s=ASTER_FUND_RATE_DICT) if ASTER_FUND_RATE_DICT is not None else {} if ASTER_FUND_RATE_DICT.get('symbol', None) != ASTER.symbol: @@ -405,31 +441,35 @@ async def run_algo(): time.sleep(5) continue # raise ValueError(f'EXTEND Symbol mismatch: {EXTENDED_TICKER_DICT}; expected symbol: {EXTEND.symbol}') - - ### Manage Local Collateral Using Updates from WS ### - # ASTER_WS_COLLATERAL_UPDATES = VAL_KEY.get('fr_aster_user_positions') - # ASTER_WS_COLLATERAL_UPDATES = json.loads(ASTER_WS_COLLATERAL_UPDATES) if ASTER_WS_COLLATERAL_UPDATES is not None else [] # ty:ignore[invalid-argument-type] - # EXTEND_WS_COLLATERAL_UPDATES = VAL_KEY.get('fr_extended_user_positions') - # EXTEND_WS_COLLATERAL_UPDATES = json.loads(EXTEND_WS_COLLATERAL_UPDATES) if EXTEND_WS_COLLATERAL_UPDATES is not None else [] # ty:ignore[invalid-argument-type] - ### Manage Local Notionals Using Updates from WS ### + ### Load Local Notional Updates from WS ### ASTER_WS_POS_UPDATES: Any = VAL_KEY.get(name='fr_aster_user_positions') ASTER_WS_POS_UPDATES: list = json.loads(s=ASTER_WS_POS_UPDATES) if ASTER_WS_POS_UPDATES is not None else [] EXTEND_WS_POS_UPDATES: Any = VAL_KEY.get('fr_extended_user_positions') EXTEND_WS_POS_UPDATES: list = json.loads(EXTEND_WS_POS_UPDATES) if EXTEND_WS_POS_UPDATES is not None else [] - ### Manage Local Orders Using Updates from WS ### + if len(ASTER_WS_POS_UPDATES) > 0: + await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) + + if len(EXTEND_WS_POS_UPDATES) > 0: + await get_extend_notional(resp=EXTEND_WS_POS_UPDATES) + + ### Load Local Order Updates from WS ### ASTER_WS_ORDER_UPDATES: Any = VAL_KEY.get('fr_aster_user_orders') ASTER_WS_ORDER_UPDATES: list = json.loads(ASTER_WS_ORDER_UPDATES) if ASTER_WS_ORDER_UPDATES is not None else [] EXTEND_WS_ORDER_UPDATES: Any = VAL_KEY.get('fr_extended_user_orders') EXTEND_WS_ORDER_UPDATES: list = json.loads(EXTEND_WS_ORDER_UPDATES) if EXTEND_WS_ORDER_UPDATES is not None else [] - - # CHECK NO MORE THAN 1 OPEN ORDER ON EITHER EXCHANGE # + + ### CHECK NO MORE THAN 1 OPEN ORDER ON EITHER EXCHANGE ### if len(ASTER_OPEN_ORDERS) > 1 or len(EXTEND_OPEN_ORDERS) > 1: logging.info(f'MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS ({len(ASTER_OPEN_ORDERS)}): {ASTER_OPEN_ORDERS}; EXTEND_OPEN_ORDERS ({len(EXTEND_OPEN_ORDERS)}): {EXTEND_OPEN_ORDERS}') await kill_algo() raise ValueError('NOT HERE: MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS') + ### Update Local Open Orders w Changes from WS ### + ASTER_OPEN_ORDERS = await handle_order_updates(exch='ASTER', local_open_orders=ASTER_OPEN_ORDERS, ws_open_orders=ASTER_WS_ORDER_UPDATES) + EXTEND_OPEN_ORDERS = await handle_order_updates(exch='EXTEND', local_open_orders=EXTEND_OPEN_ORDERS, ws_open_orders=EXTEND_WS_ORDER_UPDATES) + ### CHECK TIME TO FUNDING AND WHETHER TO BE ACTIVE ### now_ms = round(datetime.now().timestamp()*1000) time_to_funding_ms = min([ASTER_FUND_RATE_TIME, EXTEND_FUND_RATE_TIME]) - now_ms @@ -438,134 +478,7 @@ async def run_algo(): time.sleep(5) continue - if len(ASTER_WS_POS_UPDATES) > 0: - # await get_aster_notional_position() - await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) - ###### *** returned 0 notional even though had a position, need to handle and safety check to not order above max notional. - ##### NEED TO UPDATE SO IT TAKES THE LATEST MSG, ie drop the WS msg if its older than the exisiting one from the API. - if len(EXTEND_WS_POS_UPDATES) > 0: - await get_extend_notional(resp=EXTEND_WS_POS_UPDATES) - # await get_extend_notional() # ************** NOT USING WEBSOCKET FEED DUE TO ISSUES WITH IT OVERWRITING API DATA ie the WS just statically shows last update and doesnt pull new when you start the algo. - ### Also WS was just stale and caused issues where it sees a fill then gets new API Collateral (correct) and then the next loop would be the old incorrect collateral in the WS, causing bad orders. Do not have issue on ASTER. - - if ASTER_WS_ORDER_UPDATES is not None: - for idx, o in enumerate(ASTER_OPEN_ORDERS): - order_id = o.get('order_id') if o.get('order_id') is not None else o['orderId'] - order_orig_status = o.get('status') if o.get('status') is not None else o['order_status'] - order_update = [ou for ou in ASTER_WS_ORDER_UPDATES if ou.get('order_id', None) == order_id] - - if len(order_update) > 0: - order_update = order_update[0] - order_update_status = order_update.get('status') if order_update.get('status') is not None else order_update.get('order_status') - order_status_changed = order_orig_status.upper() != order_update_status.upper() - - if order_status_changed: - logging.info(f'ASTER ORDER ({order_id}): {order_orig_status} -> {order_update_status}') - ASTER_OPEN_ORDERS[idx] = order_update - if order_update_status in ['CANCELED','EXPIRED']: - logging.info(f'ASTER ORDER CANCELLED or EXPIRED: {order_id}') - ASTER_OPEN_ORDERS.pop(idx) - Just_Rejected_Or_Expired = True - utils.send_tg_alert(f'FR_ALGO - ASTER REJECTED ({order_id})') - elif order_update_status in ['PARTIALLY_FILLED']: - logging.info(f'ASTER ORDER PARTIALLY FILLED: {order_id}') - # await get_aster_collateral() - await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) - Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 - utils.send_tg_alert(f'FR_ALGO - ASTER PARTIALLY FILLED ({order_id})') - elif order_update_status in ['FILLED']: - logging.info(f'ASTER ORDER FILLED: {order_id}') - ASTER_OPEN_ORDERS.pop(idx) - # await get_aster_collateral() - await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) - Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 - utils.send_tg_alert(f'FR_ALGO - ASTER FILLED ({order_id})') - else: - logging.critical(f'EXTEND ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') - if EXTEND_WS_ORDER_UPDATES is not None: - for idx, o in enumerate(EXTEND_OPEN_ORDERS): - o = dict(o) - order_id = o.get('order_id') if o.get('order_id') is not None else o.get('id') - order_orig_status = o['status'] - order_update = [dict(ou) for ou in EXTEND_WS_ORDER_UPDATES if dict(ou).get('order_id', None) == order_id] - - if len(order_update) > 0: - order_update: dict = order_update[0] - order_update_status: str = order_update['status'] - order_status_changed: bool = order_orig_status.upper() != order_update_status.upper() - - if order_status_changed: - logging.info(f'EXTEND ORDER ({order_id}): {order_orig_status} -> {order_update_status}') - EXTEND_OPEN_ORDERS[idx] = order_update - if order_update_status in ['CANCELLED','EXPIRED','REJECTED']: - logging.info(f'EXTEND ORDER CANCELLED, REJECTED or EXPIRED: {order_id}') - EXTEND_OPEN_ORDERS.pop(idx) - Just_Rejected_Or_Expired = True - utils.send_tg_alert(f'FR_ALGO - EXTEND REJECTED ({order_id})') - elif order_update_status in ['PARTIALLY_FILLED']: - logging.info(f'EXTEND ORDER PARTIALLY FILLED: {order_id}') - # await get_extend_collateral() - await get_extend_notional() - utils.send_tg_alert(f'FR_ALGO - EXTEND PARTIALLY FILLED ({order_id})') - elif order_update_status in ['FILLED']: - logging.info(f'EXTEND ORDER FILLED: {order_id}') - EXTEND_OPEN_ORDERS.pop(idx) - # await get_extend_collateral() - await get_extend_notional() - utils.send_tg_alert(f'FR_ALGO - EXTEND FILLED ({order_id})') - else: - logging.critical(f'EXTEND ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') - - - if ALGO_CONFIG.Overrides.Allow_Symbol_Change: - if (best_symbol_by_exchange_aster.symbol != ASTER.symbol) or (best_symbol_by_exchange_extend.symbol != EXTEND.symbol): - if abs( ASTER_NOTIONAL_POSITION ) > 0.00 or abs( EXTEND_NOTIONAL_POSITION ) > 0.00: - if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: - print(f'Symbol switch [{ASTER.symbol} > {best_symbol_by_exchange_aster.symbol}] - Flattening Positions') - ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic = True - else: - logging.info('Balances Flattened - Updating to Trade New Symbols:') - logging.info(f' ASTER.symbol -> {best_symbol_by_exchange_aster.symbol}') - logging.info(f' EXTEND.symbol -> {best_symbol_by_exchange_extend.symbol}') - ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic = False - if Open_Symbols: - logging.info(f'OPEN SYMBOLS TO CLOSE: {Open_Symbols}') - master_data = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_master')) # ty:ignore[invalid-argument-type] - open_symbol_to_work = Open_Symbols[0] - current_pos_master_ast = [d for d in master_data if d.get('symbol_ext') == open_symbol_to_work][0] - ASTER = structs.Perpetual_Exchange( - mult = int(current_pos_master_ast['max_leverage_ast']), - lh_asset = current_pos_master_ast['lh_asset_ast'], - rh_asset = current_pos_master_ast['rh_asset_ast'], - symbol_asset_separator = '', - initial_funding_rate=float(current_pos_master_ast['funding_rate_ast']), - min_price=float(current_pos_master_ast['min_price_ast']), - min_order_size=float(current_pos_master_ast['min_order_size_ast']), - min_lot_size=float(current_pos_master_ast['min_lot_size_ast']), - min_notional=float(current_pos_master_ast['min_notional_ast']), - ) - EXTEND = structs.Perpetual_Exchange( - mult = int(current_pos_master_ast['max_leverage_ext']), - lh_asset = current_pos_master_ast['lh_asset_ext'], - rh_asset = current_pos_master_ast['rh_asset_ext'], - symbol_asset_separator = '-', - initial_funding_rate=float(current_pos_master_ast['funding_rate_ext']), - min_price=float(current_pos_master_ast['min_price_ext']), - min_order_size=float(current_pos_master_ast['min_order_size_ext']), - min_lot_size=float(current_pos_master_ast['min_lot_size_ext']), - min_notional=float(current_pos_master_ast['min_notional_ext']), - ) - Open_Symbols.pop(0) - await get_aster_notional_position() - await get_extend_notional() - else: - ASTER = best_symbol_by_exchange_aster - EXTEND = best_symbol_by_exchange_extend - - VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)})) - - min_between_fundings = round((abs(ASTER_FUND_RATE_TIME - EXTEND_FUND_RATE_TIME) / 1000 / 60)) FUNDINGS_AT_SAME_TIME_NEXT_HR = min_between_fundings < 5 @@ -578,10 +491,10 @@ async def run_algo(): if ALPHA_FUND_RATE < 0: ALPHA_CARRY_SIDE = 'BUY' - ALPHA_TGT_NOTIONAL = ALGO_CONFIG.Config.Max_Target_Notional + ALPHA_TGT_NOTIONAL.value = ALGO_CONFIG.Config.Max_Target_Notional else: ALPHA_CARRY_SIDE = 'SELL' - ALPHA_TGT_NOTIONAL = ALGO_CONFIG.Config.Max_Target_Notional*-1 + ALPHA_TGT_NOTIONAL.value = ALGO_CONFIG.Config.Max_Target_Notional*-1 def calc_next_net_fund_rate(FUNDINGS_AT_SAME_TIME_NEXT_HR: bool) -> float: if FUNDINGS_AT_SAME_TIME_NEXT_HR: @@ -589,133 +502,135 @@ async def run_algo(): else: return EXTEND_FUND_RATE + ### Calculate Alpha ### + def unlock_notional_tgt() -> bool: + return ( ALPHA_TGT_NOTIONAL.value != ALPHA_TGT_NOTIONAL.previous_value ) + + at_notional_target.unlock() + sec_until_funding = round(( EXTEND_FUND_RATE_TIME - (datetime.now().timestamp()*1000) ) / 1000) + if at_notional_target.is_locked and ( sec_until_funding > ( 60*5 ) ) and at_notional_target.value: + ALPHA_TGT_NOTIONAL_FINAL = 0.00 + ALPHA_CARRY_SIDE = 'BUY' if ALPHA_CARRY_SIDE == 'SELL' else 'SELL' + else: + ALPHA_TGT_NOTIONAL_FINAL = ALPHA_TGT_NOTIONAL.value + ALPHA_CARRY_SIDE = ALPHA_CARRY_SIDE + NEXT_NET_FUNDING_RATE = calc_next_net_fund_rate(FUNDINGS_AT_SAME_TIME_NEXT_HR) Flags.NET_FUNDING_IS_ZERO = ( NEXT_NET_FUNDING_RATE >= ( (ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade*-1) / 100) ) and ( NEXT_NET_FUNDING_RATE <= ( ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade / 100 ) ) - if Flags.NET_FUNDING_IS_ZERO or ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic: - ALPHA_TGT_NOTIONAL = 0.00 - # if ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS: - # logging.info('NET FUNDING = 0.00; Cancelling Open Orders! then Waiting...') - # aster_cancel_all_orders() - # extend_cancel_all_orders() - # time.sleep(5) - # else: - # logging.info('NET FUNDING = 0.00; NO OPEN ORDERS; Waiting...') - # time.sleep(5) + + # if Flags.NET_FUNDING_IS_ZERO or ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic: + # ALPHA_TGT_NOTIONAL.value = 0.00 - if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL==0.00: + if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL_FINAL==0.00: # ROUNDING = ROUND_UP ROUNDING = ROUND_HALF_UP else: ROUNDING = ROUND_DOWN - if ALPHA_EXCH == 'EXTEND': - ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL*-1 - EXTEND_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL + ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL_FINAL*-1 if ALPHA_CARRY_SIDE == 'BUY': ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_ask_px']) EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_bid_px']) - Alpha_Nominator = ASTER_TOB_PX - Alpha_Denominator = EXTEND_TOB_PX - ALPHA_RATIO = ASTER_TOB_PX / EXTEND_TOB_PX - Expected_Alpha = ( ( ASTER_TOB_PX - EXTEND_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + current_ratio = ( ASTER_TOB_PX / EXTEND_TOB_PX ) - 1 + alpha_model_ratio = EXTEND.buy_ratio + alpha_signal: bool = current_ratio > EXTEND.buy_ratio else: ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_bid_px']) EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_ask_px']) - Alpha_Nominator = EXTEND_TOB_PX - Alpha_Denominator = ASTER_TOB_PX - ALPHA_RATIO = EXTEND_TOB_PX / ASTER_TOB_PX - Expected_Alpha = ( ( EXTEND_TOB_PX - ASTER_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + current_ratio = ( ASTER_TOB_PX / EXTEND_TOB_PX ) - 1 + alpha_model_ratio = EXTEND.buy_ratio + alpha_signal: bool = current_ratio < EXTEND.buy_ratio else: - ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL - EXTEND_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL*-1 + ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL_FINAL if ALPHA_CARRY_SIDE == 'BUY': ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_bid_px']) EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_ask_px']) - Alpha_Nominator = EXTEND_TOB_PX - Alpha_Denominator = ASTER_TOB_PX - ALPHA_RATIO = EXTEND_TOB_PX / ASTER_TOB_PX - Expected_Alpha = ( ( EXTEND_TOB_PX - ASTER_TOB_PX ) / (( EXTEND_TOB_PX + ASTER_TOB_PX ) / 2) ) + current_ratio = ( ( ASTER_TOB_PX / EXTEND_TOB_PX ) - 1 ) * -1 + alpha_model_ratio = ASTER.buy_ratio + alpha_signal: bool = current_ratio > ASTER.buy_ratio else: ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_ask_px']) EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_bid_px']) - Alpha_Nominator = ASTER_TOB_PX - Alpha_Denominator = EXTEND_TOB_PX - ALPHA_RATIO = ASTER_TOB_PX / EXTEND_TOB_PX - Expected_Alpha = ( ( ASTER_TOB_PX - EXTEND_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + current_ratio = ( ( ASTER_TOB_PX / EXTEND_TOB_PX ) - 1 ) * -1 + alpha_model_ratio = ASTER.buy_ratio + alpha_signal: bool = current_ratio < ASTER.buy_ratio - Expected_Alpha_Net_FR = abs(NEXT_NET_FUNDING_RATE) + Expected_Alpha - Expected_Alpha_Net_FR_w_Taker = Expected_Alpha_Net_FR-0.00025 - Expected_Alpha_w_Taker = Expected_Alpha-0.00025 + EXTEND_TGT_NOTIONAL = ASTER.notional_position * -1 - EXTEND_TGT_NOTIONAL = ASTER_NOTIONAL_POSITION * -1 + ASTER_TGT_TAIL = structs.Current_Previous_Value( (ASTER_TGT_NOTIONAL - ( float(ASTER.notional_position) + float(ASTER.unrealized_pnl) )) ) + # ASTER_TGT_TAIL.value = ASTER_TGT_NOTIONAL - ( float(ASTER.notional_position) + float(ASTER.unrealized_pnl) ) + EXTEND_TGT_TAIL = structs.Current_Previous_Value( (EXTEND_TGT_NOTIONAL - ( float(EXTEND.notional_position) )) ) - ASTER_TGT_TAIL = ASTER_TGT_NOTIONAL - ( float(ASTER_NOTIONAL_POSITION) + float(ASTER_UNREALIZED_PNL) ) - # EXTEND_TGT_TAIL = EXTEND_TGT_NOTIONAL - ( float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_UNREALIZED_PNL) ) - EXTEND_TGT_TAIL = EXTEND_TGT_NOTIONAL - ( float(EXTEND_NOTIONAL_POSITION) ) - # EXTEND_TGT_TAIL = float(ASTER_NOTIONAL_POSITION)*-1 min_order_size = ASTER.min_order_size min_order_size = int(min_order_size) if min_order_size == int(min_order_size) else min_order_size - ASTER_TGT_TAIL_BASE_QTY = Decimal(str(float(ASTER_TGT_TAIL) / float(ASTER_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + ASTER_TGT_TAIL_BASE_QTY = Decimal(str(float(ASTER_TGT_TAIL.value) / float(ASTER_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) if ASTER.min_lot_size: ASTER_TGT_TAIL_BASE_QTY = float(ASTER_TGT_TAIL_BASE_QTY) - ( float(ASTER_TGT_TAIL_BASE_QTY) % ASTER.min_lot_size ) ASTER_TGT_TAIL_BASE_QTY = Decimal(str(ASTER_TGT_TAIL_BASE_QTY)).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) min_order_size = EXTEND.min_order_size min_order_size = int(min_order_size) if min_order_size == int(min_order_size) else min_order_size - EXTEND_TGT_TAIL_BASE_QTY = Decimal(str(float(EXTEND_TGT_TAIL) / float(EXTEND_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + EXTEND_TGT_TAIL_BASE_QTY = Decimal(str(float(EXTEND_TGT_TAIL.value) / float(EXTEND_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) if EXTEND.min_lot_size: EXTEND_TGT_TAIL_BASE_QTY = float(EXTEND_TGT_TAIL_BASE_QTY) - ( float(EXTEND_TGT_TAIL_BASE_QTY) % EXTEND.min_lot_size ) EXTEND_TGT_TAIL_BASE_QTY = Decimal(str(EXTEND_TGT_TAIL_BASE_QTY)).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) - # MAX_MIN_ORDER_QTY = max([ASTER.min_order_size, EXTEND.min_order_size]) - ASTER_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(ASTER_TGT_TAIL_BASE_QTY)) ) >= Decimal(str(abs(ASTER.min_order_size))) ) and ( Decimal(str(abs(ASTER_TGT_TAIL))) > Decimal(str(abs(ASTER.min_notional))) ) - EXTEND_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(EXTEND_TGT_TAIL_BASE_QTY))) >= Decimal(str(abs(EXTEND.min_order_size))) ) and ( Decimal(str(abs(EXTEND_TGT_TAIL))) > Decimal(str(abs(EXTEND.min_notional))) ) + ### Define if Orderable ### + ASTER_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(ASTER_TGT_TAIL_BASE_QTY)) ) >= Decimal(str(abs(ASTER.min_order_size))) ) and ( Decimal(str(abs(ASTER_TGT_TAIL.value))) > Decimal(str(abs(ASTER.min_notional))) ) + EXTEND_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(EXTEND_TGT_TAIL_BASE_QTY))) >= Decimal(str(abs(EXTEND.min_order_size))) ) and ( Decimal(str(abs(EXTEND_TGT_TAIL.value))) > Decimal(str(abs(EXTEND.min_notional))) ) + - if not ASTER_TGT_TAIL_ORDERABLE: - if abs(ASTER_TGT_TAIL_BASE_QTY) > 0: - if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL == 0.00: - logging.info('* Trying to flatten small Aster balance, was originally not orderable.') - ASTER_TGT_TAIL_ORDERABLE = True - if not EXTEND_TGT_TAIL_ORDERABLE: - if abs(EXTEND_TGT_TAIL_BASE_QTY) > 0: - if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL == 0.00: - logging.info('* Trying to flatten small Extend balance, was originally not orderable.') - EXTEND_TGT_TAIL_ORDERABLE = True + # if not ASTER_TGT_TAIL_ORDERABLE: + # if abs(ASTER_TGT_TAIL_BASE_QTY) > 0: + # if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL_FINAL == 0.00: + # logging.info('* Trying to flatten small Aster balance, was originally not orderable.') + # ASTER_TGT_TAIL_ORDERABLE = True + # if not EXTEND_TGT_TAIL_ORDERABLE: + # if abs(EXTEND_TGT_TAIL_BASE_QTY) > 0: + # if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL_FINAL == 0.00: + # logging.info('* Trying to flatten small Extend balance, was originally not orderable.') + # EXTEND_TGT_TAIL_ORDERABLE = True + if at_notional_target.is_unlocked: + at_notional_target.value = not(ASTER_TGT_TAIL_ORDERABLE) and not(EXTEND_TGT_TAIL_ORDERABLE) + if at_notional_target.value: + at_notional_target._unlock_func = unlock_notional_tgt + at_notional_target.lock() + continue + ### Check if Currently Hedged ### + # Hedge_Ratio = abs( ( EXTEND.notional_position + ASTER.notional_position ) / max([ASTER.notional_position, 0.01]) ) * 100 + # Currently_Hedged = Hedge_Ratio < 1.00 - # Hedge_Ratio = abs(( abs( max([abs(float(EXTEND_NOTIONAL_POSITION)), 0.01]) / max([abs(float(ASTER_NOTIONAL_POSITION)), 0.01]) ) - 1 ) * 100) - Hedge_Ratio = abs( ( EXTEND_NOTIONAL_POSITION + ASTER_NOTIONAL_POSITION ) / max([ASTER_NOTIONAL_POSITION, 0.01]) ) * 100 - Currently_Hedged = Hedge_Ratio < 1.00 - + ### Logging ### def print_summary(use_logging: bool = False): OUT: Any = logging.info if use_logging else print + # ASTER: [ Available Collateral: {ASTER_AVAIL_COLLATERAL:.4f} ] | EXTEND: [ Available Collateral: {EXTEND_AVAIL_COLLATERAL:.4f} ] OUT(f''' - LOOP SLEEP (SEC): {ALGO_CONFIG.Config.Loop_Sleep_Sec} FLIP SIDES FOR TESTING?: {ALGO_CONFIG.Overrides.Flip_Side_For_Testing}; ASTER ORDER ENABLED? {ALGO_CONFIG.Overrides.Allow_Ordering_Aster}; EXTEND ORDER ENABLED? {ALGO_CONFIG.Overrides.Allow_Ordering_Extend} - {pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')-datetime.now()):}) | {pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')-datetime.now()):}) - ASTER: {ASTER_FUND_RATE:.6%} [{ASTER_FUND_RATE*10_000:.2f}bps] [{ASTER_FUND_RATE*1_000_000:.0f}pips] | EXTEND: {EXTEND_FUND_RATE:.6%} [{EXTEND_FUND_RATE*10_000:.2f}bps] [{EXTEND_FUND_RATE*1_000_000:.0f}pips] - ASTER: {'LONG PAYS SHORT' if ASTER_FUND_RATE > 0 else 'SHORT PAYS LONG'} | EXTEND: {'LONG PAYS SHORT' if EXTEND_FUND_RATE > 0 else 'SHORT PAYS LONG'} - ASTER: [ Notional Position $ : {ASTER_NOTIONAL_POSITION:.4f} ] | EXTEND: [ Notional Position $ : {EXTEND_NOTIONAL_POSITION:.4f} ] + + MKT : Aster: {ASTER.symbol:<10} (best: {best_symbol_by_exchange_aster.symbol}) | Extend: {EXTEND.symbol:<10} (best: {best_symbol_by_exchange_extend.symbol}) + {pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')-datetime.now()):}) | {pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')-datetime.now()):}) + ASTER: {ASTER_FUND_RATE:.6%} [{ASTER_FUND_RATE*10_000:.2f}bps] [{ASTER_FUND_RATE*1_000_000:.0f}pips] | EXTEND: {EXTEND_FUND_RATE:.6%} [{EXTEND_FUND_RATE*10_000:.2f}bps] [{EXTEND_FUND_RATE*1_000_000:.0f}pips] + ASTER: {'LONG PAYS SHORT' if ASTER_FUND_RATE > 0 else 'SHORT PAYS LONG'} | EXTEND: {'LONG PAYS SHORT' if EXTEND_FUND_RATE > 0 else 'SHORT PAYS LONG'} + ASTER: [ Notional Position $ : {ASTER.notional_position:.4f} ] | EXTEND: [ Notional Position $ : {EXTEND.notional_position:.4f} ] SAME TIME? : {FUNDINGS_AT_SAME_TIME_NEXT_HR} [ Minutes Between Fundings: {min_between_fundings} ] NET FUNDING : {NEXT_NET_FUNDING_RATE:.6%} [{NEXT_NET_FUNDING_RATE*10_000:.2f}bps] [{NEXT_NET_FUNDING_RATE*1_000_000:.0f}pips]; Is Zero?: {Flags.NET_FUNDING_IS_ZERO} [Min: {ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade}] - ALPHA SIDE : {ALPHA_EXCH} [{ALPHA_CARRY_SIDE}] - - TGT NOTIONAL: $ {abs(ALPHA_TGT_NOTIONAL):.2f}; Flatten Open Positions Flag? {ALGO_CONFIG.Overrides.Flatten_Open_Positions}; Opportunistic? {ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic} - - ASTER: {ASTER_NOTIONAL_POSITION:.4f} -> {ASTER_TGT_NOTIONAL:.2f} [ Remain: {ASTER_TGT_TAIL:.4f} ] | EXTEND: {EXTEND_NOTIONAL_POSITION:.4f} -> {EXTEND_TGT_NOTIONAL:.2f} [ Remain: {EXTEND_TGT_TAIL:.4f} ] - ASTER: {ASTER_TGT_NOTIONAL:.2f} - {ASTER_NOTIONAL_POSITION:.2f} + {ASTER_UNREALIZED_PNL:.2f} = {ASTER_TGT_TAIL:2f} | EXTEND: {EXTEND_TGT_NOTIONAL:.2f} - {EXTEND_NOTIONAL_POSITION:.2f} + {EXTEND_UNREALIZED_PNL:.2f} = {EXTEND_TGT_TAIL:2f} - ASTER: {ASTER_TGT_TAIL_BASE_QTY:.4f} > {ASTER.min_order_size:.4f} min [ Order: {ASTER_TGT_TAIL_ORDERABLE} ] | EXTEND: {EXTEND_TGT_TAIL_BASE_QTY:.4f} > {EXTEND.min_order_size:.4f} min [ Order: {EXTEND_TGT_TAIL_ORDERABLE} ] - - ALPHA: {ALPHA_RATIO:.8f} ALPHA_RATIO: {Alpha_Nominator:_.6f} / {Alpha_Denominator:_.6f} (Px Diff: {abs(Alpha_Nominator-Alpha_Denominator):.2f}); Expected_Alpha = {Expected_Alpha:.6f} + FR[{NEXT_NET_FUNDING_RATE:.6f}] = * {Expected_Alpha_Net_FR:.6f} * - FEES : TAKER: {0.00025:.6%}; Expected Alpha w Taker = {Expected_Alpha_Net_FR_w_Taker:.6f} [w/o FR: {Expected_Alpha_w_Taker:.6f}] - HEDGE: {Hedge_Ratio:.2f}% <= {1:.2f}%: {Currently_Hedged} [{EXTEND_NOTIONAL_POSITION:.2f} / {ASTER_NOTIONAL_POSITION:.2f}] - MKT : Aster: {ASTER.symbol} (best: {best_symbol_by_exchange_aster.symbol}) | Extend: {ASTER.symbol} (best: {best_symbol_by_exchange_extend.symbol}) + ALPHA SIDE : {ALPHA_EXCH} [{ALPHA_CARRY_SIDE}] + ALPHA SIGNAL: {alpha_signal}; Current {current_ratio:.4f} [{current_ratio*10_000:.2f}scl] {">" if ALPHA_CARRY_SIDE=='BUY' else "<"} Model {alpha_model_ratio:.4f} [{alpha_model_ratio*10_000:.2f}scl] + + TGT NOTIONAL: $ {abs(ALPHA_TGT_NOTIONAL_FINAL):.2f}; Flatten Open Positions Flag? {ALGO_CONFIG.Overrides.Flatten_Open_Positions}; Opportunistic? {ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic} + AT TARGET? : {at_notional_target.value}; is_locked?: {at_notional_target.is_locked} + >5min Fund? : {( sec_until_funding > ( 60*5 ) )} + + ASTER : {ASTER.notional_position:.4f} -> {ASTER_TGT_NOTIONAL:.2f} [ Remain: {ASTER_TGT_TAIL.value:.4f} ] | EXTEND: {EXTEND.notional_position:.4f} -> {EXTEND_TGT_NOTIONAL:.2f} [ Remain: {EXTEND_TGT_TAIL.value:.4f} ] + ASTER : {ASTER_TGT_NOTIONAL:.2f} - {ASTER.notional_position:.2f} + {ASTER.unrealized_pnl:.2f} = {ASTER_TGT_TAIL.value:2f} | EXTEND: {EXTEND_TGT_NOTIONAL:.2f} - {EXTEND.notional_position:.2f} + {EXTEND.unrealized_pnl:.2f} = {EXTEND_TGT_TAIL.value:2f} + ASTER : {ASTER_TGT_TAIL_BASE_QTY:.4f} > {ASTER.min_order_size:.4f} min [ Order: {ASTER_TGT_TAIL_ORDERABLE} ] | EXTEND: {EXTEND_TGT_TAIL_BASE_QTY:.4f} > {EXTEND.min_order_size:.4f} min [ Order: {EXTEND_TGT_TAIL_ORDERABLE} ] --- ASTER OPEN ORDERS --- {ASTER_OPEN_ORDERS} @@ -723,83 +638,184 @@ async def run_algo(): --- EXTEND OPEN ORDERS --- {EXTEND_OPEN_ORDERS} ''') - # ASTER: [ Available Collateral: {ASTER_AVAIL_COLLATERAL:.4f} ] | EXTEND: [ Available Collateral: {EXTEND_AVAIL_COLLATERAL:.4f} ] - # Try Making Hedge Order Contingent on Alpha Order Fills (Basically Hedge has to wait for sig Diff in Balance to order.) would improve when extended is thin (Overnight). + if ALGO_CONFIG.Logging.Log_Summary_Each_Loop: print_summary(use_logging=True) if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: print_summary(use_logging=False) - # print_summary() + ### Define Ordering Logic ### + ''' + Notes + - handle increasing vs flattening + - if increasing, set not reduce only + - if flattening, set as reduce only and make sure allowed to trade below min notional, and qty calc should be exact + - handle opportunistic vs immediate + - handle cancel-replace manually for aster and sometimes manually for extend (e.g. cant change certain things on an existing order) + - gracefully handle err responses (well known err codes e.g.) and response errors (e.g. json fails to parse) + ''' - ### ROUTES ### - # Just_Rejected_Or_Expired - MIN_EXPECTED_ALPHA_TO_TRADE = 0.0000 - if ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic: - exp_alpha = Expected_Alpha_w_Taker - else: - exp_alpha = Expected_Alpha_Net_FR_w_Taker - # MIN_EXPECTED_ALPHA_TO_TRADE = abs(NEXT_NET_FUNDING_RATE)*-1 - # MIN_EXPECTED_ALPHA_TO_TRADE = -0.000001 - # ALPHA RATIO CHECK - if not( ( exp_alpha > MIN_EXPECTED_ALPHA_TO_TRADE ) or ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS or ALGO_CONFIG.Overrides.Flatten_Open_Positions) ) and Currently_Hedged: - # if not( ( Expected_Alpha_Net_FR_w_Taker > MIN_EXPECTED_ALPHA_TO_TRADE ) or ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS or ALGO_CONFIG.Overrides.Flatten_Open_Positions) ) and Currently_Hedged: - if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: - print(f'Alpha Ratio too low ({ALPHA_RATIO:.8f}) and no Open Orders...') - elif ( Expected_Alpha_Net_FR_w_Taker <= MIN_EXPECTED_ALPHA_TO_TRADE ) and ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS ) and Currently_Hedged and not(ALGO_CONFIG.Overrides.Flatten_Open_Positions): - await aster_cancel_all_orders() - await extend_cancel_all_orders() - logging.info('Expected_Alpha went away with open orders...cancelling since we are currently hedged...') - # time.sleep( (1/1000)*100 ) # 100ms wait for ws cancel response - else: - # logging.info(f'*** Alpha Ratio HIT - LETS ORDER: {ALPHA_RATIO:.8f}') - # ASTER - if ASTER_TGT_TAIL_ORDERABLE and ALGO_CONFIG.Overrides.Allow_Ordering_Aster: - # if ALGO_CONFIG.Overrides.Allow_Ordering_Aster: - symbol = ASTER.symbol + async def cancel_aster_order(open_order_id: str): + global ASTER_OPEN_ORDERS + start = time.time() + cancel_order: dict = { + "url": "/fapi/v3/order", + "method": "DELETE", + "params": { + 'symbol': ASTER.symbol, + 'orderId': open_order_id, + } + } + cr: dict = await aster_auth.post_authenticated_url(cancel_order) # ty:ignore[invalid-assignment] + if cr.get('status', None) == 'CANCELED': + ASTER_OPEN_ORDERS.pop(0) + else: + logging.warning(f'ASTER ORDER FAILED TO CANCEL DURING CR ({open_order_id}): RESP {cr}') + logging.info(f'TIMING - cancel_aster_order: {(time.time() - start)*1000:.2f}') + + async def post_aster_order( + symbol: str, + side: str, + qty: Decimal, + price: Decimal, + reduceOnly: bool, + postOnly: bool + ): + global ASTER_OPEN_ORDERS + global Just_Rejected_Or_Expired + + if postOnly: + timeInForce = 'GTX' + else: + timeInForce = 'GTC' + + post_order = { + "url": "/fapi/v3/order", + "method": "POST", + "params": { + 'symbol': symbol, + 'side': side, + 'type': 'LIMIT', + 'timeInForce': timeInForce, + 'quantity': qty, + 'price': price, + 'reduceOnly': reduceOnly + } + } + order_resp: dict = await aster_auth.post_authenticated_url(post_order) # ty:ignore[invalid-assignment] + if order_resp.get('orderId', None) is not None: + order_resp['original_price'] = price + order_resp['order_status'] = order_resp['status'] + + ASTER_OPEN_ORDERS.append(order_resp) + Just_Rejected_Or_Expired = False + + utils.send_tg_alert(f'FR_ALGO - ASTER Order ({order_resp['orderId']}). Start_$: {ASTER.notional_position:.4f}; Value: {float(ASTER_TGT_TAIL_BASE_QTY)*float(price):.4f}; Price: {float(price):.4f}') + logging.info(f'ASTER ORDER PLACED SUCCESS: {order_resp}') + print_summary(use_logging=True) + else: + logging.critical(f'*** Aster Order Response Abnormal: {order_resp}; post_order: {post_order}') + await kill_algo() + + async def cancel_extend_order(order_id: str): + r = EXTEND_CLIENT.orders.cancel_order(order_id=order_id) + + r = dict(r) + if r.get('status', None) == 'OK': + logging.info(f'EXTEND ORDER CANCELLED: {order_id}') + else: + logging.warning(f'EXTEND ORDER FAILED TO CANCEL DURING CR ({order_id}): RESP {r}') + + async def post_extend_order( + symbol: str, + side: str, + qty: Decimal, + price: Decimal, + reduceOnly: bool, + postOnly: bool, + cxl_prev_order_id: str | None = None, + ): + global EXTEND_OPEN_ORDERS + global Just_Rejected_Or_Expired + + side = OrderSide.BUY if side == 'BUY' else OrderSide.SELL + taker_fee = Decimal("0.00025") + try: + order_resp: WrappedApiResponse[PlacedOrderModel] = await EXTEND_CLIENT.place_order( + market_name=symbol, + amount_of_synthetic=qty, + price=price, + side=side, + taker_fee=taker_fee, + previous_order_id=cxl_prev_order_id, + post_only=postOnly, + reduce_only=reduceOnly + ) + except Exception as e: + logging.critical(e) + + order_resp_dict = dict(order_resp) + + if order_resp_dict.get('status', None) == 'ERROR': + if order_resp_dict['error']['code']==1142: + logging.info('Cant find edit order for Extend, skipping cancel.') + else: + logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') + await kill_algo() + if order_resp_dict.get('status', None) == 'OK': + if EXTEND_OPEN_ORDERS: + EXTEND_OPEN_ORDERS.pop(0) + + order_dict = dict(order_resp_dict['data']) + order_dict['status'] = 'NEW' + order_dict['price'] = str(price) + order_dict['qty'] = str(qty) + order_dict['filled_qty'] = str(0) + order_dict['side'] = str(side) + + EXTEND_OPEN_ORDERS.append(order_dict) + Just_Rejected_Or_Expired = False + utils.send_tg_alert(f'FR_ALGO - EXTEND Order ({order_dict.get('id', None)}). Start_$: {EXTEND.notional_position:.2f}; Value: {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price):.2f}; Price: {float(price):.2f}') + logging.info(f'EXTEND ORDER PLACED SUCCESS: {order_dict}') + print_summary(use_logging=True) + else: + logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') + await kill_algo() + + ### ASTER + if ALGO_CONFIG.Overrides.Allow_Ordering_Aster and ASTER_TGT_TAIL_ORDERABLE: # Tier 1 Overrides + if alpha_signal or ALGO_CONFIG.Overrides.Flatten_Open_Positions: # Tier 2 Overrides / Alpha + skip = False side = 'BUY' if ASTER_TGT_TAIL_BASE_QTY > 0.00 else 'SELL' - # qty = str(abs(ASTER_TGT_TAIL_BASE_QTY)) qty = Decimal(value=str(abs(ASTER_TGT_TAIL_BASE_QTY))) price = ASTER_TOB_PX - ( float(ASTER.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Aster) ) if side == 'BUY' else ASTER_TOB_PX + ( float(ASTER.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Aster) ) - if abs( ( float(ASTER_TGT_TAIL_BASE_QTY)*float(price) ) + ASTER_NOTIONAL_POSITION ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: - logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - ASTER: {ASTER_NOTIONAL_POSITION} + {float(ASTER_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(ASTER_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + if abs( ( float(ASTER_TGT_TAIL_BASE_QTY)*float(price) ) + ASTER.notional_position ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - ASTER: {ASTER.notional_position} + {float(ASTER_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(ASTER_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') await kill_algo() - if ASTER_OPEN_ORDERS: + + if ASTER_OPEN_ORDERS: # Cancel Open Order? open_order_id = ASTER_OPEN_ORDERS[0].get('order_id') if ASTER_OPEN_ORDERS[0].get('order_id') is not None else ASTER_OPEN_ORDERS[0]['orderId'] - open_order_px = float(ASTER_OPEN_ORDERS[0].get('price')) if ASTER_OPEN_ORDERS[0].get('price') is not None else float(ASTER_OPEN_ORDERS[0]['original_price']) + open_order_px = float(ASTER_OPEN_ORDERS[0].get('price',0)) if ASTER_OPEN_ORDERS[0].get('price') is not None else float(ASTER_OPEN_ORDERS[0]['original_price']) + + open_order_dict = dict(ASTER_OPEN_ORDERS[0]) + open_order_id = str(open_order_dict['order_id']) + open_order_px = float(open_order_dict['price']) + min_price = ASTER.min_price min_price = int(min_price) if min_price == int(min_price) else min_price if Decimal(str( float(open_order_px) - float(price) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) == 0.00: - # if round(open_order_px - float(price), len(str(ASTER.min_price)) - 2 ) == 0.00: if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: print('ASTER OPEN ORDER NO PX CHG; SKIPPING') - place_order = False + skip = True else: - cancel_order: dict = { - "url": "/fapi/v3/order", - "method": "DELETE", - "params": { - 'symbol': ASTER.symbol, - 'orderId': open_order_id, - } - } - cr: dict = await aster_auth.post_authenticated_url(cancel_order) # ty:ignore[invalid-assignment] - if cr.get('status', None) == 'CANCELED': - ASTER_OPEN_ORDERS.pop(0) - place_order = True - else: - logging.warning(f'ASTER ORDER FAILED TO CANCEL DURING CR ({open_order_id}): RESP {cr}') - place_order = False - else: - place_order = True - - if ASTER_TGT_TAIL_BASE_QTY == 0.00: - place_order = False - logging.info('ASTER TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') - + await cancel_aster_order(open_order_id) # ty:ignore[invalid-argument-type] - if place_order: + if ASTER_TGT_TAIL_BASE_QTY == 0.00: + logging.info('ASTER TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') + skip = True + + if not skip: min_price = ASTER.min_price min_price = int(min_price) if min_price == int(min_price) else min_price price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) @@ -808,157 +824,93 @@ async def run_algo(): logging.info('ASTER TRYNG TO ORDER with A PRICE OF 0.00, SKIPPING') continue - if qty >= ASTER.min_order_size and (qty*price) > ASTER.min_notional: + if qty >= ASTER.min_order_size and ((qty*price) > ASTER.min_notional): reduceOnly = False else: reduceOnly = True - post_order = { - "url": "/fapi/v3/order", - "method": "POST", - "params": { - 'symbol': symbol, - 'side': side, - 'type': 'LIMIT', - 'timeInForce': 'GTX', - 'quantity': qty, - 'price': price, - 'reduceOnly': reduceOnly - } - } - order_resp: dict = await aster_auth.post_authenticated_url(post_order) # ty:ignore[invalid-assignment] - if order_resp.get('orderId', None) is not None: - order_resp['original_price'] = price - order_resp['order_status'] = order_resp['status'] - ASTER_OPEN_ORDERS.append(order_resp) - Just_Rejected_Or_Expired = False - utils.send_tg_alert(f'FR_ALGO - ASTER Order ({order_resp['orderId']}). Start_$: {ASTER_NOTIONAL_POSITION:.4f}; Value: {float(ASTER_TGT_TAIL_BASE_QTY)*float(price):.4f}; Price: {float(price):.4f}') - logging.info(f'ASTER ORDER PLACED SUCCESS: {order_resp}') - print_summary(use_logging=True) - else: - logging.critical(f'*** Aster Order Response Abnormal: {order_resp}; post_order: {post_order}') - await kill_algo() + await post_aster_order( + symbol=ASTER.symbol, + side=side, + qty=qty, + price=price, + reduceOnly=reduceOnly, + postOnly=True, + ) else: pass - # logging.warning('ASTER PLACE ORDER CHECKS FAILED, SKIPPING') - - elif not(ASTER_TGT_TAIL_ORDERABLE) and ASTER_OPEN_ORDERS: - ### Add code to flatten small balances - logging.info('ASTER HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') - await aster_cancel_all_orders() - time.sleep(0.1) - - # if (float(ALPHA_TGT_NOTIONAL) < float(EXTEND_NOTIONAL_POSITION)) and ((float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_TGT_TAIL)) > float(EXTEND_NOTIONAL_POSITION)): - # EXTEND_TGT_TAIL_ORDERABLE= False - # print('ASTER ordering in the wrong directiion - Should be selling, but its buying - skipping') - # elif (float(ALPHA_TGT_NOTIONAL) > float(EXTEND_NOTIONAL_POSITION)) and ((float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_TGT_TAIL)) < float(EXTEND_NOTIONAL_POSITION)): - # EXTEND_TGT_TAIL_ORDERABLE= False - # print('ASTER ordering in the wrong directiion - Should be buying, but its selling - skipping') - - # EXTEND - if (EXTEND_TGT_TAIL_ORDERABLE and ALGO_CONFIG.Overrides.Allow_Ordering_Extend): - # if ALGO_CONFIG.Overrides.Allow_Ordering_Extend: - side = OrderSide.BUY if EXTEND_TGT_TAIL_BASE_QTY > 0.00 else OrderSide.SELL - symbol = EXTEND.symbol + elif not(ASTER_TGT_TAIL_ORDERABLE) and ASTER_OPEN_ORDERS: + logging.info('ASTER HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await extend_cancel_all_orders() + + ### EXTEND ### + if ALGO_CONFIG.Overrides.Allow_Ordering_Extend and EXTEND_TGT_TAIL_ORDERABLE: # Tier 1 Overrides + if alpha_signal or ALGO_CONFIG.Overrides.Flatten_Open_Positions: # Tier 2 Overrides / Alpha + skip = False + side = 'BUY' if EXTEND_TGT_TAIL_BASE_QTY > 0.00 else 'SELL' qty = Decimal(value=str(abs(EXTEND_TGT_TAIL_BASE_QTY))) - - Time_Since_Last_Aster_Fill_ms = ( datetime.now().timestamp()*1000 ) - Last_Aster_Fill_Time_Ts - min_price = EXTEND.min_price - min_price = int(min_price) if min_price == int(min_price) else min_price - if Time_Since_Last_Aster_Fill_ms > ( 1000 * ALGO_CONFIG.Config.Switch_To_Taker_Seconds ): # Change to allow taker orders if its been more than x seconds - post_only = False - price: Decimal = Decimal(value=str(EXTEND_TOB_PX - ( float(min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) if side == 'BUY' else EXTEND_TOB_PX + ( float(min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) - else: - # post_only = True - post_only = False - price: Decimal = Decimal(value=str(EXTEND_TOB_PX)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) - - if abs( ( float(EXTEND_TGT_TAIL_BASE_QTY)*float(price) ) + EXTEND_NOTIONAL_POSITION ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: - logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - EXTEND: {EXTEND_NOTIONAL_POSITION:.2f} + {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price):.2f} (qty: {float(EXTEND_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + price = EXTEND_TOB_PX - ( float(EXTEND.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) if side == 'BUY' else EXTEND_TOB_PX + ( float(EXTEND.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) # ty:ignore[invalid-assignment] + + if abs( ( float(EXTEND_TGT_TAIL_BASE_QTY)*float(price) ) + EXTEND.notional_position ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - EXTEND: {EXTEND.notional_position} + {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(EXTEND_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') await kill_algo() - if EXTEND_OPEN_ORDERS: + + if EXTEND_OPEN_ORDERS: # Cancel Open Order? open_order_dict = dict(EXTEND_OPEN_ORDERS[0]) open_order_id = str(open_order_dict['external_id']) open_order_px = float(open_order_dict['price']) - # if int(qty) == 0: - # place_order = False - # place_residual_order = False - # logging.info(f'EXTEND NOT ORDERING DUE TO NOTIONAL QTY == 0; Filled: {float(open_order_filled_qty):.4f}; Residual: {qty:.4f}') - # else: - # place_order = True - # place_residual_order = False - # logging.info(f'Ordering RESIDUAL market order for remaining small amount: {qty}') - else: - open_order_id = None - open_order_px = 0 - place_order = True - if place_order: - price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) - if round(open_order_px - float(price), len(str(min_price)) - 2 ) == 0.00: + min_price = EXTEND.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + if Decimal(str( float(open_order_px) - float(price) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) == 0.00: if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: print('EXTEND OPEN ORDER NO PX CHG; SKIPPING') - else: - try: - if abs(float(EXTEND_NOTIONAL_POSITION) + (float(qty)*float(price))) < abs(float(EXTEND_NOTIONAL_POSITION)): - reduce_only = True - else: - reduce_only = False - - # taker_fee = taker_fee=Decimal("0.00000") if post_only else Decimal("0.00025") - taker_fee = Decimal("0.00025") - order_resp: WrappedApiResponse[PlacedOrderModel] = await EXTEND_CLIENT.place_order( - market_name=symbol, - amount_of_synthetic=Decimal(str(qty)), - price=Decimal(str(price)), - side=side, - taker_fee=taker_fee, - previous_order_id=open_order_id, - post_only=post_only, - reduce_only=reduce_only - ) - except Exception as e: - logging.error(f'EXTEND ORDER PLACEMENT FAILED: {e}') - logging.error(f'EXTEND ORDER PLACEMENT FAILED - POSTED: market_name:{symbol}, side: {side} amount_of_synthetic:{qty}, price:{price}, side:{side},taker_fee:{taker_fee}, previous_order_id:{open_order_id}, post_only:{post_only}; reduce_only:{reduce_only}') - logging.error(traceback.format_exc()) - logging.error(f'EXTEND ORDER PLACEMENT FAILED - RESP: {order_resp}') - - order_resp_dict = dict(order_resp) - - if order_resp_dict.get('status', None) == 'OK': - if EXTEND_OPEN_ORDERS: - EXTEND_OPEN_ORDERS.pop(0) - - order_dict = dict(order_resp_dict['data']) - order_dict['status'] = 'NEW' - order_dict['price'] = str(price) - order_dict['qty'] = str(qty) - order_dict['filled_qty'] = str(0) - order_dict['side'] = str(side) - - EXTEND_OPEN_ORDERS.append(order_dict) - Just_Rejected_Or_Expired = False - utils.send_tg_alert(f'FR_ALGO - EXTEND Order ({order_dict.get('id', None)}). Start_$: {EXTEND_NOTIONAL_POSITION:.2f}; Value: {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price):.2f}; Price: {float(price):.2f}') - logging.info(f'EXTEND ORDER PLACED SUCCESS: {order_dict}') - print_summary(use_logging=True) - else: - logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') - await kill_algo() + skip = True else: - logging.warning('EXTEND PLACE ORDER CHECKS FAILED, SKIPPING') + open_order_id = None - elif not(EXTEND_TGT_TAIL_ORDERABLE) and EXTEND_OPEN_ORDERS: - logging.info('EXTEND HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') - await extend_cancel_all_orders() - - + if EXTEND_TGT_TAIL_BASE_QTY == 0.00: + logging.info('EXTEND TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') + skip = True + + if not skip: + min_price = EXTEND.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + + if price == Decimal(str(0.00)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP): + logging.info('EXTEND TRYNG TO ORDER with A PRICE OF 0.00, SKIPPING') + continue + + if qty >= EXTEND.min_order_size and ((qty*price) > EXTEND.min_notional): + reduceOnly = False + else: + reduceOnly = True + + await post_extend_order( + symbol=EXTEND.symbol, + side=side, + qty=qty, + price=price, + reduceOnly=reduceOnly, + postOnly=True, + cxl_prev_order_id=open_order_id + ) + else: + pass + elif not(EXTEND_TGT_TAIL_ORDERABLE) and EXTEND_OPEN_ORDERS: + logging.info('EXTEND HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await extend_cancel_all_orders() + + ### Continue immediately or sleep ### if ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS: + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print(f'_____ Open Orders _____ (Algo Engine ms: {(time.time() - loop_start)*1000:.2f}); Continuing...') continue else: - time.sleep(ALGO_CONFIG.Config.Loop_Sleep_Sec) if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: print(f'_____ End No Open Orders _____ (Algo Engine ms: {(time.time() - loop_start)*1000:.2f}); Sleeping for sec: {ALGO_CONFIG.Config.Loop_Sleep_Sec:.0f}') - + time.sleep(ALGO_CONFIG.Config.Loop_Sleep_Sec) except KeyboardInterrupt: logging.info('CANCELLING OPEN ORDERS') await kill_algo() @@ -969,7 +921,6 @@ async def run_algo(): utils.send_tg_alert(f'FR_ALGO_CRASHED: {str(e)}') await kill_algo() - ### MAIN STARTUP ### async def main(): global EXTEND_CLIENT @@ -1003,6 +954,7 @@ async def main(): min_order_size=float(current_pos_master_ast['min_order_size_ast']), min_lot_size=float(current_pos_master_ast['min_lot_size_ast']), min_notional=float(current_pos_master_ast['min_notional_ast']), + buy_ratio=float(current_pos_master_ast['buy_ratio_ast']), ) EXTEND = structs.Perpetual_Exchange( mult = int(current_pos_master_ast['max_leverage_ext']), @@ -1014,6 +966,7 @@ async def main(): min_order_size=float(current_pos_master_ast['min_order_size_ext']), min_lot_size=float(current_pos_master_ast['min_lot_size_ext']), min_notional=float(current_pos_master_ast['min_notional_ext']), + buy_ratio=float(current_pos_master_ast['buy_ratio_ext']), ) Open_Symbols.pop(0) else: diff --git a/main_trading_only.py b/main_trading_only.py new file mode 100644 index 0000000..a64fe9e --- /dev/null +++ b/main_trading_only.py @@ -0,0 +1,870 @@ + +from x10.utils.http import WrappedApiResponse +from x10.perpetual.trading_client.trading_client import PerpetualTradingClient +import asyncio +import json +import logging +import math +import os +import time +import traceback +from datetime import datetime, timezone +from decimal import ROUND_DOWN, ROUND_UP, ROUND_HALF_UP, Decimal +from typing import AsyncContextManager +from dataclasses import dataclass, asdict +from typing import Any +import numpy as np +import pandas as pd +import requests + +# import talib +import valkey +from dotenv import load_dotenv +from sqlalchemy import text +from sqlalchemy.ext.asyncio import create_async_engine +from x10.models.order import OrderSide, PlacedOrderModel + +import modules.utils as utils +import modules.aster_auth as aster_auth +import modules.extended_auth as extend_auth +import modules.structs as structs + +### Clients ### +EXTEND_CLIENT: PerpetualTradingClient +CON: AsyncContextManager +VAL_KEY: valkey.Valkey + +### Logging ### +load_dotenv() +LOG_FILEPATH: str = f'{os.getenv(key="LOGS_PATH")}/Fund_Rate_Algo.log' + +### Algo Config ### +Config: structs.Algo_Config + +### Exchanges ### +Aster: structs.Perpetual_Exchange +Extend: structs.Perpetual_Exchange + +### Globals ### +Open_Symbols: list[str] = [] +Last_Aster_Fill_Time_Ts: float = 0.00 +Just_Rejected_Or_Expired: bool = False + +Aster_Open_Orders: list[dict] = [] +Extend_Open_Orders: list[dict] = [] + +### Flags ### +# Flags = structs.Flags() + + +### Define Ordering Logic ### +''' +Notes +- handle increasing vs flattening + - if increasing, set not reduce only + - if flattening, set as reduce only and make sure allowed to trade below min notional, and qty calc should be exact +- handle opportunistic vs immediate +- handle cancel-replace manually for aster and sometimes manually for extend (e.g. cant change certain things on an existing order) +- gracefully handle err responses (well known err codes e.g.) and response errors (e.g. json fails to parse) +''' + +async def cancel_aster_order(open_order_id: str): + global Aster_Open_Orders + start = time.time() + cancel_order: dict = { + "url": "/fapi/v3/order", + "method": "DELETE", + "params": { + 'symbol': Aster.symbol, + 'orderId': open_order_id, + } + } + cr: dict = await aster_auth.post_authenticated_url(cancel_order) # ty:ignore[invalid-assignment] + if cr.get('status', None) == 'CANCELED': + Aster_Open_Orders.pop(0) + else: + logging.warning(f'ASTER ORDER FAILED TO CANCEL DURING CR ({open_order_id}): RESP {cr}') + logging.info(f'TIMING - cancel_aster_order: {(time.time() - start)*1000:.2f}') + +async def post_aster_order( + symbol: str, + side: str, + qty: Decimal, + price: Decimal, + reduceOnly: bool, + postOnly: bool +): + global Aster_Open_Orders + global Just_Rejected_Or_Expired + + if postOnly: + timeInForce = 'GTX' + else: + timeInForce = 'GTC' + + post_order = { + "url": "/fapi/v3/order", + "method": "POST", + "params": { + 'symbol': symbol, + 'side': side, + 'type': 'LIMIT', + 'timeInForce': timeInForce, + 'quantity': qty, + 'price': price, + 'reduceOnly': reduceOnly + } + } + order_resp: dict = await aster_auth.post_authenticated_url(post_order) # ty:ignore[invalid-assignment] + if order_resp.get('orderId', None) is not None: + order_resp['original_price'] = price + order_resp['order_status'] = order_resp['status'] + + Aster_Open_Orders.append(order_resp) + Just_Rejected_Or_Expired = False + + utils.send_tg_alert(f'FR_ALGO - ASTER Order ({order_resp['orderId']}). Start_$: {Aster.notional_position:.4f}; {side}: {float(qty)*float(price):.4f}; Price: {float(price):.4f}') + logging.info(f'ASTER ORDER PLACED SUCCESS: {order_resp}') + # print_summary(use_logging=True) + else: + logging.critical(f'*** Aster Order Response Abnormal: {order_resp}; post_order: {post_order}') + await kill_algo() + +async def cancel_extend_order(order_id: str): + r = EXTEND_CLIENT.orders.cancel_order(order_id=order_id) + + r = dict(r) + if r.get('status', None) == 'OK': + logging.info(f'EXTEND ORDER CANCELLED: {order_id}') + else: + logging.warning(f'EXTEND ORDER FAILED TO CANCEL DURING CR ({order_id}): RESP {r}') + +async def post_extend_order( + symbol: str, + side: str, + qty: Decimal, + price: Decimal, + reduceOnly: bool, + postOnly: bool, + cxl_prev_order_id: str | None = None, +): + global Extend_Open_Orders + global Just_Rejected_Or_Expired + + side = OrderSide.BUY if side == 'BUY' else OrderSide.SELL + taker_fee = Decimal("0.00025") + try: + order_resp: WrappedApiResponse[PlacedOrderModel] = await EXTEND_CLIENT.place_order( + market_name=symbol, + amount_of_synthetic=qty, + price=price, + side=side, + taker_fee=taker_fee, + previous_order_id=cxl_prev_order_id, + post_only=postOnly, + reduce_only=reduceOnly + ) + except Exception as e: + logging.critical(e) + + order_resp_dict = dict(order_resp) + + if order_resp_dict.get('status', None) == 'ERROR': + if order_resp_dict['error']['code']==1142: + logging.info('Cant find edit order for Extend, skipping cancel.') + else: + logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') + await kill_algo() + if order_resp_dict.get('status', None) == 'OK': + if Extend_Open_Orders: + Extend_Open_Orders.pop(0) + + order_dict = dict(order_resp_dict['data']) + order_dict['status'] = 'NEW' + order_dict['price'] = str(price) + order_dict['qty'] = str(qty) + order_dict['filled_qty'] = str(0) + order_dict['side'] = str(side) + + Extend_Open_Orders.append(order_dict) + Just_Rejected_Or_Expired = False + utils.send_tg_alert(f'FR_ALGO - EXTEND Order ({order_dict.get('id', None)}). Start_$: {Extend.notional_position:.2f}; {str(side)}: {float(qty)*float(price):.2f}; Price: {float(price):.2f}') + logging.info(f'EXTEND ORDER PLACED SUCCESS: {order_dict}') + # print_summary(use_logging=True) + else: + logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') + await kill_algo() + +### OPEN ORDERS ### +async def handle_order_updates(exch: str, local_open_orders: list[dict], ws_open_orders: list[dict]) -> list[dict]: # exch = 'ASTER' | 'EXTEND' + global Just_Rejected_Or_Expired + global Last_Aster_Fill_Time_Ts + + if ws_open_orders: + for idx, o in enumerate(local_open_orders): + o = dict(o) + if o.get('order_id') is not None: + ws_order_id_field = 'order_id' + elif o.get('orderId') is not None: + ws_order_id_field = 'orderId' + else: + ws_order_id_field = 'id' + + order_id = o[ws_order_id_field] + order_orig_status: str = o.get('status') if o.get('status') is not None else o['order_status'] # ty:ignore[invalid-assignment] + order_update: list[dict] = [dict(ou) for ou in ws_open_orders if dict(ou).get('order_id', None) == order_id] + + if len(order_update) > 0: + order_update: dict = order_update[0] + order_update_status: str = order_update.get('status') if order_update.get('status') is not None else order_update['order_status'] # ty:ignore[invalid-assignment] + order_status_changed: bool = order_orig_status.upper() != order_update_status.upper() + + local_open_orders[idx]['order_id'] = order_id + local_open_orders[idx]['status'] = order_update_status + local_open_orders[idx]['price'] = order_update.get('price', 0) if order_update.get('price') is not None else order_update['original_price'] + + if order_status_changed: + logging.info(f'{exch} ORDER ({order_id}): {order_orig_status} -> {order_update_status}') + local_open_orders[idx] = order_update + if order_update_status in ['CANCELLED','CANCELED','EXPIRED','REJECTED']: + logging.info(f'{exch} ORDER CANCELLED or EXPIRED: {order_id}') + local_open_orders.pop(idx) + Just_Rejected_Or_Expired = True + utils.send_tg_alert(f'FR_ALGO - {exch} REJECTED ({order_id})') + elif order_update_status in ['PARTIALLY_FILLED']: + logging.info(f'{exch} ORDER PARTIALLY FILLED: {order_id}') + # await get_aster_collateral() + if exch=='ASTER': + await get_aster_notional_position(resp=ws_open_orders) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + else: + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - {exch} PARTIALLY FILLED ({order_id})') + elif order_update_status in ['FILLED']: + logging.info(f'{exch} ORDER FILLED: {order_id}') + local_open_orders.pop(idx) + # await get_aster_collateral() + if exch=='ASTER': + await get_aster_notional_position(resp=ws_open_orders) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + else: + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - {exch} FILLED ({order_id})') + else: + logging.critical(f'{exch} ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') + await kill_algo() + return local_open_orders + +async def get_aster_open_orders(): + global Aster_Open_Orders + + fut_acct_openOrders = { + "url": "/fapi/v3/openOrders", + "method": "GET", + "params": {} + } + Aster_Open_Orders = await aster_auth.post_authenticated_url(fut_acct_openOrders) # ty:ignore[invalid-assignment] + +async def get_extend_open_orders(): + global Extend_Open_Orders + + Extend_Open_Orders = list(dict(await EXTEND_CLIENT.account.get_open_orders()).get('data', 0)) + +### WALLLET ### +async def get_aster_account_open_symbols() -> list[str]: + fut_acct_positionRisk: dict = { + "url": "/fapi/v3/positionRisk", + "method": "GET", + "params": { + 'symbol':'' + } + } + try: + resp: list = await aster_auth.post_authenticated_url(req=fut_acct_positionRisk) # ty:ignore[invalid-assignment] + except Exception as e: + logging.critical(f'JSONDecodeError trying to get Aster open orders: {e}; resp: {resp}') + await kill_algo() + resp: list = [] + ld = [ utils.symbol_to_extend_fmt(x['symbol']) for x in resp if abs(float(x.get('positionAmt', 0))) > 0] + return ld + +async def get_aster_notional_position(resp: list | None = None): + global Aster + + previous_notional_obj = Aster.notional_obj + previous_notional_position = Aster.notional_position + + if resp: + pos_dict = [x for x in resp if x.get('symbol', None) == Aster.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['entry_price'] = 0.00 + pos_dict['position_amount'] = 0.00 + pos_dict['unrealized_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + # logging.info('get_aster_notional - No Positions') + else: + logging.info('Getting Aster Notionals from API') + fut_acct_positionRisk: dict = { + "url": "/fapi/v3/positionRisk", + "method": "GET", + "params": { + 'symbol': Aster.symbol, + } + } + try: + resp: list = await aster_auth.post_authenticated_url(req=fut_acct_positionRisk) # ty:ignore[invalid-assignment] + except Exception as e: + logging.critical(f'JSONDecodeError trying to get Aster notional: {e}; resp: {resp}') + await kill_algo() + resp: list = [] + pos_dict = [x for x in resp if x.get('symbol', None) == Aster.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['entry_price'] = 0.00 + pos_dict['position_amount'] = 0.00 + pos_dict['unrealized_pnl'] = 0.00 + logging.info('get_aster_notional - No Positions') + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + + if previous_notional_obj: + if previous_notional_obj['timestamp_arrival'] > pos_dict['timestamp_arrival']: + # logging.info(f'ASTER NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(pos_dict['timestamp_arrival'], unit='ms')}); skipping') + return + + Aster.notional_obj = pos_dict + + if len(pos_dict) < 1: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: Empty pos_dict: {pos_dict}; resp: {resp}') + await kill_algo() + + Aster.unrealized_pnl = float(pos_dict['unrealized_pnl']) if pos_dict.get('unrealized_pnl') is not None else float(pos_dict['unRealizedProfit']) + + if pos_dict.get('notional') is not None: + Aster.notional_position = float(pos_dict['notional']) - Aster.unrealized_pnl + else: + Aster.notional_position = float(pos_dict['position_amount'])*float(pos_dict['entry_price']) + if pos_dict.get('leverage') is not None: + Aster.mult = int(pos_dict['leverage']) + if abs(Aster.notional_position) > Config.Config.Max_Target_Notional*Config.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: {previous_notional_position} -> {Aster.notional_position}; UR PNL: {Aster.unrealized_pnl}; MULT: {Aster.mult}; pos_dict: {pos_dict}; resp: {resp}; max_tgt_notional: {Config.Config.Max_Target_Notional}') + await kill_algo() + if Aster.notional_position != previous_notional_position: + logging.info(f'ASTER NOTIONAL CHANGE: {previous_notional_position:.2f} -> {Aster.notional_position:.2f}; UR PNL: {Aster.unrealized_pnl:.2f}; MULT: {Aster.mult:.0f}; resp: {bool(resp)}') + +async def get_extend_account_open_symbols() -> list[str]: + resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) + ld = [x.market for x in list(resp) if abs(float(x.size)) > 0] + return ld + +async def set_comb_open_symbols() -> None: + global Open_Symbols + + open_aster_symbols = await get_aster_account_open_symbols() + open_extend_symbols = await get_extend_account_open_symbols() + + Open_Symbols = list(set(open_aster_symbols + open_extend_symbols)) + +async def get_extend_notional(resp: list | None = None): + global Extend + + previous_notional_obj = Extend.notional_obj + previous_notional_position = Extend.notional_position + + if not resp: + resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) + pos_dict = [dict(d) for d in resp if dict(d).get('market') == Extend.symbol] + if pos_dict: + pos_dict = pos_dict[0] + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['value'] = 0.00 + pos_dict['unrealised_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + logging.info('get_extend_notional - No Positions') + else: + pos_dict = [dict(d) for d in resp if dict(d).get('market') == Extend.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['value'] = 0.00 + pos_dict['unrealised_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + # logging.info('get_extend_notional - No Positions') + + # pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + + if previous_notional_obj: + if previous_notional_obj['timestamp_arrival'] > pos_dict['timestamp_arrival']: + # logging.info(f'EXTEND NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(pos_dict['timestamp_arrival'], unit='ms')}); skipping') + return + else: + previous_notional_obj = {} + + Extend.notional_obj = pos_dict + + Extend.unrealized_pnl = pos_dict.get('unrealised_pnl', 0) + position_side = pos_dict['side'] # LONG or SHORT + notional_pos_abs = abs(float(pos_dict['value'])) + if position_side == 'LONG': + notional_pos_sided = notional_pos_abs + elif position_side == 'SHORT': + notional_pos_sided = notional_pos_abs * -1 + else: + logging.info(f'EXTEND BAD SIDE ON POSITION UPDATE: {pos_dict}') + + Extend.notional_position = notional_pos_sided - float(Extend.unrealized_pnl) + Extend.mult = pos_dict.get('leverage', Extend.mult) + if abs(Extend.notional_position) > Config.Config.Max_Target_Notional*Config.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - EXTEND CHANGE: {previous_notional_position} -> {Extend.notional_position}; UR PNL: {Extend.unrealized_pnl}; MULT: {Extend.mult}; pos_dict: {pos_dict}; resp: {resp}') + await kill_algo() + if Extend.notional_position != previous_notional_position: + logging.info(f'EXTEND NOTIONAL CHANGE: {previous_notional_position} [{previous_notional_obj.get('timestamp_arrival')}] -> {Extend.notional_position:.2f} [{Extend.notional_obj['timestamp_arrival']}]; UR PNL: {Extend.unrealized_pnl:.2f}; MULT: {Extend.mult}; resp: {bool(resp)}') + +### EXCHANGE INFO ### +async def get_aster_exch_info(symbol_override: str | None = None): + global Aster + + if symbol_override: + Aster.symbol = utils.symbol_to_aster_fmt(symbol_override) + + fut_acct_exchangeInfo: dict = { + "url": "/fapi/v3/exchangeInfo", + "method": "GET", + "params": {} + } + r: dict = await aster_auth.post_authenticated_url(fut_acct_exchangeInfo) # ty:ignore[invalid-assignment] + s: list = r['symbols'] + d: dict = [d for d in s if d.get('symbol', None) == Aster.symbol][0] + f: dict = [f for f in d['filters'] if f.get('filterType', None) == 'LOT_SIZE'][0] + q: dict = [f for f in d['filters'] if f.get('filterType', None) == 'PRICE_FILTER'][0] + n: dict = [f for f in d['filters'] if f.get('filterType', None) == 'MIN_NOTIONAL'][0] + + min_qty = float(f['minQty']) + min_qty = int(min_qty) if min_qty == int(min_qty) else min_qty + + min_price = float(q['minPrice']) + min_price = int(min_price) if min_price == int(min_price) else min_price + Aster.min_order_size = min_qty + Aster.min_price = min_price + Aster.min_notional = float(n['notional']) + +async def get_extend_exch_info(symbol_override: str | None = None): + global Extend + + if symbol_override: + Extend.symbol = utils.symbol_to_extend_fmt(symbol_override) + + r = await EXTEND_CLIENT.markets_info.get_markets_dict() + Extend.min_order_size = float(r[Extend.symbol].trading_config.min_order_size) + Extend.min_price = float(r[Extend.symbol].trading_config.min_price_change) + +### CANCEL ORDERS ### +async def aster_cancel_all_orders(): + cancel_all_open_orders = { + "url": "/fapi/v3/allOpenOrders", + "method": "DELETE", + "params": { + 'symbol': Aster.symbol, + } + } + r = await aster_auth.post_authenticated_url(cancel_all_open_orders) + logging.info(f'ASTER CANCEL ALL OPEN ORDERS RESP: {r}') + +async def extend_cancel_all_orders(): + r = await EXTEND_CLIENT.orders.mass_cancel(markets=[Extend.symbol]) + logging.info(f'EXTEND CANCEL ALL OPEN ORDERS RESP: {r}') + +### KILL ALGO ### +async def kill_algo(): + await aster_cancel_all_orders() + await extend_cancel_all_orders() + logging.info('ALGO KILL FLAG ACTIVATED; CANCELLING OPEN ORDERS AND SHUTTING DOWN') + raise ValueError('KILL FLAG ACTIVATED') + +### ALGO LOOP ### +async def run_algo(): + global Config + + global Aster + global Extend + + global Open_Symbols + global Last_Aster_Fill_Time_Ts + global Just_Rejected_Or_Expired + + global Aster_Open_Orders + global Extend_Open_Orders + + # global Flags + + try: + while True: + loop_start = time.time() + # print('__________Start___________') + + ### Load Algo Config ### + Config = json.loads(VAL_KEY.get('fr_orchestrator_output')) # ty:ignore[invalid-argument-type] + Config = structs.Algo_Config(**Config) + Config.Config.Max_Target_Notional = float(min([Aster.mult, Extend.mult]) * Config.Config.Target_Open_Cash_Position) + + ### Load Data from Feedhandlers ### + best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_output')) # ty:ignore[invalid-argument-type] + best_symbol_by_exchange_aster = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER']) + best_symbol_by_exchange_extend = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND']) + + # Fund Rates + # aster_fund_rate_dict: Any = VAL_KEY.get('fund_rate_aster') + # aster_fund_rate_dict: dict = json.loads(s=aster_fund_rate_dict) if aster_fund_rate_dict is not None else {} + # if aster_fund_rate_dict.get('symbol', None) != Aster.symbol: + # aster_fund_rate: float = Aster.initial_funding_rate + # # logging.info(f'ASTER Symbol mismatch: {ASTER_FUND_RATE_DICT}; expected symbol: {ASTER.symbol}') + # # raise ValueError(f'ASTER Symbol mismatch: {ASTER_FUND_RATE_DICT}; expected symbol: {ASTER.symbol}') + # else: + # aster_fund_rate: float = float(aster_fund_rate_dict.get('funding_rate', 0)) + + # extend_fund_rate_dict: Any = VAL_KEY.get('fund_rate_extended') + # extend_fund_rate_dict: dict = json.loads(s=extend_fund_rate_dict) if extend_fund_rate_dict is not None else {} + # if extend_fund_rate_dict.get('symbol', None) != Extend.symbol: + # extend_fund_rate: float = Extend.initial_funding_rate + # # logging.info(f'ASTER Symbol mismatch: {EXTENDED_FUND_RATE_DICT}; expected symbol: {EXTEND.symbol}') + # # raise ValueError(f'ASTER Symbol mismatch: {EXTENDED_FUND_RATE_DICT}; expected symbol: {EXTEND.symbol}') + # else: + # extend_fund_rate: float = float(extend_fund_rate_dict.get('funding_rate', 0)) + + # if Config.Overrides.Flip_Side_For_Testing: + # aster_fund_rate = aster_fund_rate * -1 + # extend_fund_rate = extend_fund_rate * -1 + + # aster_fund_rate_time = float(aster_fund_rate_dict.get('next_funding_time_ts_ms', 0)) + # aster_fund_rate_time = aster_fund_rate_time+(60*60*1000) if aster_fund_rate_time < (datetime.now().timestamp()*1000) else aster_fund_rate_time + + # extend_fund_rate_time = max([float(extend_fund_rate_dict.get('next_funding_time_ts_ms', 0)), 0]) + # extend_fund_rate_time = extend_fund_rate_time+(60*60*1000) if extend_fund_rate_time < (datetime.now().timestamp()*1000) else extend_fund_rate_time + + # Tickers + aster_ticker_dict: Any = VAL_KEY.get('fut_ticker_aster') + aster_ticker_dict: dict = json.loads(s=aster_ticker_dict) if aster_ticker_dict is not None else {} + if ( aster_ticker_dict.get('symbol', None) != Aster.symbol ) and not(Config.Overrides.Flatten_Open_Positions): + logging.warning(f'ASTER Symbol mismatch: {aster_ticker_dict}; expected symbol: {Aster.symbol}') + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)})) + time.sleep(5) + continue + # raise ValueError(f'ASTER Symbol mismatch: {ASTER_TICKER_DICT}; expected symbol: {ASTER.symbol}') + + extend_ticker_dict: Any = VAL_KEY.get('fut_ticker_extended') + extend_ticker_dict: dict = json.loads(s=extend_ticker_dict) if extend_ticker_dict is not None else {} + if ( extend_ticker_dict.get('symbol', None) != Extend.symbol) and not(Config.Overrides.Flatten_Open_Positions): + logging.warning(f'EXTEND Symbol mismatch: {extend_ticker_dict}; expected symbol: {Extend.symbol}') + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)})) + time.sleep(5) + continue + # raise ValueError(f'EXTEND Symbol mismatch: {EXTENDED_TICKER_DICT}; expected symbol: {EXTEND.symbol}') + + ### Load Local Notional Updates from WS ### + aster_ws_pos_updates: Any = VAL_KEY.get(name='fr_aster_user_positions') + aster_ws_pos_updates: list = json.loads(s=aster_ws_pos_updates) if aster_ws_pos_updates is not None else [] + extend_ws_pos_updates: Any = VAL_KEY.get('fr_extended_user_positions') + extend_ws_pos_updates: list = json.loads(extend_ws_pos_updates) if extend_ws_pos_updates is not None else [] + + if len(aster_ws_pos_updates) > 0: + await get_aster_notional_position(resp=aster_ws_pos_updates) + + if len(extend_ws_pos_updates) > 0: + await get_extend_notional(resp=extend_ws_pos_updates) + + ### Load Local Order Updates from WS ### + aster_ws_order_updates: Any = VAL_KEY.get('fr_aster_user_orders') + aster_ws_order_updates: list = json.loads(aster_ws_order_updates) if aster_ws_order_updates is not None else [] + extend_ws_order_updates: Any = VAL_KEY.get('fr_extended_user_orders') + extend_ws_order_updates: list = json.loads(extend_ws_order_updates) if extend_ws_order_updates is not None else [] + + ### CHECK NO MORE THAN 1 OPEN ORDER ON EITHER EXCHANGE ### + if len(Aster_Open_Orders) > 1 or len(Extend_Open_Orders) > 1: + logging.info(f'MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS ({len(Aster_Open_Orders)}): {Aster_Open_Orders}; EXTEND_OPEN_ORDERS ({len(Extend_Open_Orders)}): {Extend_Open_Orders}') + await kill_algo() + raise ValueError('NOT HERE: MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS') + + ### Update Local Open Orders w Changes from WS ### + Aster_Open_Orders = await handle_order_updates(exch='ASTER', local_open_orders=Aster_Open_Orders, ws_open_orders=aster_ws_order_updates) + Extend_Open_Orders = await handle_order_updates(exch='EXTEND', local_open_orders=Extend_Open_Orders, ws_open_orders=extend_ws_order_updates) + + ### Decisions ### + + + + ### Logging ### + def print_summary(use_logging: bool = False): + OUT: Any = logging.info if use_logging else print + + # ASTER: [ Available Collateral: {ASTER_AVAIL_COLLATERAL:.4f} ] | EXTEND: [ Available Collateral: {EXTEND_AVAIL_COLLATERAL:.4f} ] + OUT(f''' + FLIP SIDES FOR TESTING?: {Config.Overrides.Flip_Side_For_Testing}; ASTER ORDER ENABLED? {Config.Overrides.Allow_Ordering_Aster}; EXTEND ORDER ENABLED? {Config.Overrides.Allow_Ordering_Extend} + + MKT : Aster: {Aster.symbol:<10} (best: {best_symbol_by_exchange_aster.symbol}) | Extend: {Extend.symbol:<10} (best: {best_symbol_by_exchange_extend.symbol}) + {pd.to_datetime(aster_fund_rate_time, unit='ms')} ({(pd.to_datetime(aster_fund_rate_time, unit='ms')-datetime.now()):}) | {pd.to_datetime(extend_fund_rate_time, unit='ms')} ({(pd.to_datetime(extend_fund_rate_time, unit='ms')-datetime.now()):}) + ASTER: {aster_fund_rate:.6%} [{aster_fund_rate*10_000:.2f}bps] [{aster_fund_rate*1_000_000:.0f}pips] | EXTEND: {extend_fund_rate:.6%} [{extend_fund_rate*10_000:.2f}bps] [{extend_fund_rate*1_000_000:.0f}pips] + ASTER: {'LONG PAYS SHORT' if aster_fund_rate > 0 else 'SHORT PAYS LONG'} | EXTEND: {'LONG PAYS SHORT' if extend_fund_rate > 0 else 'SHORT PAYS LONG'} + ASTER: [ Notional Position $ : {Aster.notional_position:.4f} ] | EXTEND: [ Notional Position $ : {Extend.notional_position:.4f} ] + + ALPHA SIDE : {ALPHA_EXCH} [{ALPHA_CARRY_SIDE}] + ALPHA SIGNAL: {alpha_signal}; Current {current_ratio:.4f} [{current_ratio*10_000:.2f}scl] {">" if ALPHA_CARRY_SIDE=='BUY' else "<"} Model {alpha_model_ratio:.4f} [{alpha_model_ratio*10_000:.2f}scl] + + TGT NOTIONAL: $ {abs(ALPHA_TGT_NOTIONAL_FINAL):.2f}; Flatten Open Positions Flag? {Config.Overrides.Flatten_Open_Positions}; Opportunistic? {Config.Overrides.Flatten_Open_Positions_Opportunistic} + AT TARGET? : {at_notional_target.value}; is_locked?: {at_notional_target.is_locked} + + + --- ASTER OPEN ORDERS --- + {Aster_Open_Orders} + + --- EXTEND OPEN ORDERS --- + {Extend_Open_Orders} + ''') + if Config.Logging.Log_Summary_Each_Loop: + print_summary(use_logging=True) + if Config.Logging.Print_Summary_Each_Loop: + print_summary(use_logging=False) + + ### ASTER + if Config.Overrides.Allow_Ordering_Aster and ASTER_TGT_TAIL_ORDERABLE: # Tier 1 Overrides + if alpha_signal or Config.Overrides.Flatten_Open_Positions: # Tier 2 Overrides / Alpha + skip = False + side = 'BUY' if ASTER_TGT_TAIL_BASE_QTY > 0.00 else 'SELL' + qty = Decimal(value=str(abs(ASTER_TGT_TAIL_BASE_QTY))) + price = ASTER_TOB_PX - ( float(Aster.min_price)*int(Config.Config.Price_Worsener_Aster) ) if side == 'BUY' else ASTER_TOB_PX + ( float(Aster.min_price)*int(Config.Config.Price_Worsener_Aster) ) + + if abs( ( float(ASTER_TGT_TAIL_BASE_QTY)*float(price) ) + Aster.notional_position ) > Config.Config.Max_Target_Notional*Config.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - ASTER: {Aster.notional_position} + {float(ASTER_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(ASTER_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + await kill_algo() + + if Aster_Open_Orders: # Cancel Open Order? + open_order_id = Aster_Open_Orders[0].get('order_id') if Aster_Open_Orders[0].get('order_id') is not None else Aster_Open_Orders[0]['orderId'] + open_order_px = float(Aster_Open_Orders[0].get('price',0)) if Aster_Open_Orders[0].get('price') is not None else float(Aster_Open_Orders[0]['original_price']) + + open_order_dict = dict(Aster_Open_Orders[0]) + open_order_id = str(open_order_dict['order_id']) + open_order_px = float(open_order_dict['price']) + + min_price = Aster.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + if Decimal(str( float(open_order_px) - float(price) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) == 0.00: + if Config.Logging.Print_Summary_Each_Loop: + print('ASTER OPEN ORDER NO PX CHG; SKIPPING') + skip = True + else: + await cancel_aster_order(open_order_id) # ty:ignore[invalid-argument-type] + + if ASTER_TGT_TAIL_BASE_QTY == 0.00: + logging.info('ASTER TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') + skip = True + + if not skip: + min_price = Aster.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + + if price == Decimal(str(0.00)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP): + logging.info('ASTER TRYNG TO ORDER with A PRICE OF 0.00, SKIPPING') + continue + + if ( qty < Aster.min_order_size ) or ( (qty*price) < Aster.min_notional ): + reduceOnly = True + else: + reduceOnly = False + + await post_aster_order( + symbol=Aster.symbol, + side=side, + qty=qty, + price=price, + reduceOnly=reduceOnly, + postOnly=True, + ) + else: + pass + elif not(ASTER_TGT_TAIL_ORDERABLE) and Aster_Open_Orders: + logging.info('ASTER HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await extend_cancel_all_orders() + + ### EXTEND ### + if Config.Overrides.Allow_Ordering_Extend and EXTEND_TGT_TAIL_ORDERABLE: # Tier 1 Overrides + if alpha_signal or Config.Overrides.Flatten_Open_Positions: # Tier 2 Overrides / Alpha + skip = False + side = 'BUY' if EXTEND_TGT_TAIL_BASE_QTY > 0.00 else 'SELL' + qty = Decimal(value=str(abs(EXTEND_TGT_TAIL_BASE_QTY))) + price = EXTEND_TOB_PX - ( float(Extend.min_price)*int(Config.Config.Price_Worsener_Extend) ) if side == 'BUY' else EXTEND_TOB_PX + ( float(Extend.min_price)*int(Config.Config.Price_Worsener_Extend) ) # ty:ignore[invalid-assignment] + + if abs( ( float(EXTEND_TGT_TAIL_BASE_QTY)*float(price) ) + Extend.notional_position ) > Config.Config.Max_Target_Notional*Config.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - EXTEND: {Extend.notional_position} + {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(EXTEND_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + await kill_algo() + + if Extend_Open_Orders: # Cancel Open Order? + open_order_dict = dict(Extend_Open_Orders[0]) + open_order_id = str(open_order_dict['external_id']) + open_order_px = float(open_order_dict['price']) + + min_price = Extend.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + if Decimal(str( float(open_order_px) - float(price) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) == 0.00: + if Config.Logging.Print_Summary_Each_Loop: + print('EXTEND OPEN ORDER NO PX CHG; SKIPPING') + skip = True + else: + open_order_id = None + + if EXTEND_TGT_TAIL_BASE_QTY == 0.00: + logging.info('EXTEND TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') + skip = True + + if not skip: + min_price = Extend.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + + if price == Decimal(str(0.00)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP): + logging.info('EXTEND TRYNG TO ORDER with A PRICE OF 0.00, SKIPPING') + continue + + if ( qty < Extend.min_order_size ) or ( (qty*price) < Extend.min_notional ): + reduceOnly = True + else: + reduceOnly = False + + await post_extend_order( + symbol=Extend.symbol, + side=side, + qty=qty, + price=price, + reduceOnly=reduceOnly, + postOnly=True, + cxl_prev_order_id=open_order_id + ) + else: + pass + elif not(EXTEND_TGT_TAIL_ORDERABLE) and Extend_Open_Orders: + logging.info('EXTEND HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await extend_cancel_all_orders() + + ### Continue immediately or sleep ### + if Aster_Open_Orders or Extend_Open_Orders: + if Config.Logging.Print_Summary_Each_Loop: + print(f'_____ Open Orders _____ (Algo Engine ms: {(time.time() - loop_start)*1000:.2f}); Continuing...') + continue + else: + if Config.Logging.Print_Summary_Each_Loop: + print(f'_____ End No Open Orders _____ (Algo Engine ms: {(time.time() - loop_start)*1000:.2f}); Sleeping for sec: {Config.Config.Loop_Sleep_Sec:.0f}') + time.sleep(Config.Config.Loop_Sleep_Sec) + except KeyboardInterrupt: + logging.info('CANCELLING OPEN ORDERS') + await kill_algo() + except Exception as e: + logging.error(traceback.format_exc()) + logging.critical(f'*** ALGO ENGINE CRASHED: {e}') + logging.info('CANCELLING OPEN ORDERS') + utils.send_tg_alert(f'FR_ALGO_CRASHED: {str(e)}') + await kill_algo() + +### MAIN STARTUP ### +async def main(): + global EXTEND_CLIENT + global VAL_KEY + global CON + global Config + global Aster + global Extend + global Open_Symbols + + + _, EXTEND_CLIENT = await extend_auth.create_auth_account_and_trading_client() + VAL_KEY = valkey.Valkey(host='localhost', port=6379, db=0, decode_responses=True) + engine = create_async_engine('mysql+asyncmy://root:pwd@localhost/fund_rate') + + await set_comb_open_symbols() + + best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_output')) # ty:ignore[invalid-argument-type] + if Open_Symbols: + logging.info(f'OPEN SYMBOLS: {Open_Symbols}') + master_data = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_master')) # ty:ignore[invalid-argument-type] + open_symbol_to_work = Open_Symbols[0] + current_pos_master_ast = [d for d in master_data if d.get('symbol_ext') == open_symbol_to_work][0] + Aster = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ast']), + lh_asset = current_pos_master_ast['lh_asset_ast'], + rh_asset = current_pos_master_ast['rh_asset_ast'], + symbol_asset_separator = '', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ast']), + min_price=float(current_pos_master_ast['min_price_ast']), + min_order_size=float(current_pos_master_ast['min_order_size_ast']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ast']), + min_notional=float(current_pos_master_ast['min_notional_ast']), + buy_ratio=float(current_pos_master_ast['buy_ratio_ast']), + ) + Extend = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ext']), + lh_asset = current_pos_master_ast['lh_asset_ext'], + rh_asset = current_pos_master_ast['rh_asset_ext'], + symbol_asset_separator = '-', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ext']), + min_price=float(current_pos_master_ast['min_price_ext']), + min_order_size=float(current_pos_master_ast['min_order_size_ext']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ext']), + min_notional=float(current_pos_master_ast['min_notional_ext']), + buy_ratio=float(current_pos_master_ast['buy_ratio_ext']), + ) + Open_Symbols.pop(0) + else: + Aster = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER']) + Extend = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND']) + + # await get_aster_exch_info(symbol_override=Open_Symbols[0]) + # await get_extend_exch_info(symbol_override=Open_Symbols[0]) + + with open('algo_config.json', mode='r', encoding='utf-8') as file: + Config = json.load(file) + Config = structs.Algo_Config(**Config) + + Config.Config.Max_Target_Notional = float(min([Aster.mult, Extend.mult]) * Config.Config.Target_Open_Cash_Position) + # logging.info(f'Initial Algo Config: {ALGO_CONFIG}') + + VAL_KEY.set(name='fr_orchestrator_output', value=json.dumps(obj=Config.model_dump())) + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=Aster), 'EXTEND': asdict(obj=Extend)})) + + async with engine.connect() as CON: + ### ASTER SETUP ### + # await get_aster_collateral() + await get_aster_notional_position() + await get_aster_exch_info() + await get_aster_open_orders() + ### EXTEND SETUP ### + # await get_extend_collateral() + await get_extend_notional() + await get_extend_exch_info() + await get_extend_open_orders() + + await run_algo() + +if __name__ == '__main__': + START_TIME = round(datetime.now().timestamp()*1000) + + logging.info(f'Log FilePath: {LOG_FILEPATH}') + + logging.basicConfig( + force=True, + filename=LOG_FILEPATH, + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + filemode='w' + ) + logging.info(f"STARTED: {START_TIME}") + + asyncio.run(main()) diff --git a/main_v1.py b/main_v1.py new file mode 100644 index 0000000..3f29ba3 --- /dev/null +++ b/main_v1.py @@ -0,0 +1,1066 @@ + +from x10.utils.http import WrappedApiResponse +from x10.perpetual.trading_client.trading_client import PerpetualTradingClient +import asyncio +import json +import logging +import math +import os +import time +import traceback +from datetime import datetime, timezone +from decimal import ROUND_DOWN, ROUND_UP, ROUND_HALF_UP, Decimal +from typing import AsyncContextManager +from dataclasses import dataclass, asdict +from typing import Any +import numpy as np +import pandas as pd +import requests + +# import talib +import valkey +from dotenv import load_dotenv +from sqlalchemy import text +from sqlalchemy.ext.asyncio import create_async_engine +from x10.models.order import OrderSide, PlacedOrderModel + +import modules.utils as utils +import modules.aster_auth as aster_auth +import modules.extended_auth as extend_auth +import modules.structs as structs + +### Clients ### +EXTEND_CLIENT: PerpetualTradingClient +CON: AsyncContextManager +VAL_KEY: valkey.Valkey + +### Logging ### +load_dotenv() +LOG_FILEPATH: str = f'{os.getenv(key="LOGS_PATH")}/Fund_Rate_Algo.log' + +### Algo Config ### +ALGO_CONFIG: structs.Algo_Config +MIN_TIME_TO_FUNDING: int + +### EXCHANGES ### +ASTER: structs.Perpetual_Exchange +EXTEND: structs.Perpetual_Exchange + +### GLOBALS ### +Open_Symbols: list[str] = [] +Last_Aster_Fill_Time_Ts: float = 0.00 +Just_Rejected_Or_Expired: bool = False + +ASTER_AVAIL_COLLATERAL = 0 +EXTEND_AVAIL_COLLATERAL = 0 + +ASTER_NOTIONAL_POSITION = 0 +EXTEND_NOTIONAL_POSITION = 0 + +ASTER_NOTIONAL_OBJ: dict | None = None +EXTEND_NOTIONAL_OBJ: dict | None = None + +ASTER_UNREALIZED_PNL = 0 +EXTEND_UNREALIZED_PNL = 0 + +ASTER_OPEN_ORDERS = [] +EXTEND_OPEN_ORDERS = [] + +# ASTER_OPEN_POSITIONS = [] +# EXTEND_OPEN_POSITIONS = [] + +# EXCHANGES: list = [ Aster(), Extend() ] + +### FLAGS ### +Flags = structs.Flags() + +### UTILS ### +# def round_decimal_down(value, decimal_places): +# # Construct precision string like '0.01' for 2 places +# fmt = f'0.{"0" * decimal_places}' if decimal_places > 0 else '0' +# precision = Decimal(fmt) +# return Decimal(str(value)).quantize(precision, rounding=ROUND_HALF_UP) + +### OPEN ORDERS ### +async def get_aster_open_orders(): + global ASTER_OPEN_ORDERS + + fut_acct_openOrders = { + "url": "/fapi/v3/openOrders", + "method": "GET", + "params": {} + } + ASTER_OPEN_ORDERS = await aster_auth.post_authenticated_url(fut_acct_openOrders) + +async def get_extend_open_orders(): + global EXTEND_OPEN_ORDERS + + EXTEND_OPEN_ORDERS = list(dict(await EXTEND_CLIENT.account.get_open_orders()).get('data', 0)) + +### WALLLET ### +# async def get_aster_collateral(): +# global ASTER_AVAIL_COLLATERAL + +# fut_acct_balances = { +# "url": "/fapi/v3/balance", +# "method": "GET", +# "params": {} +# } +# r = await aster_auth.post_authenticated_url(fut_acct_balances) +# ASTER_AVAIL_COLLATERAL = float([d for d in r if d.get('asset')==ASTER.rh_asset][0].get('availableBalance')) + +async def get_aster_account_open_symbols() -> list[str]: + fut_acct_positionRisk: dict = { + "url": "/fapi/v3/positionRisk", + "method": "GET", + "params": { + 'symbol':'' + } + } + try: + resp: list = await aster_auth.post_authenticated_url(req=fut_acct_positionRisk) # ty:ignore[invalid-assignment] + except Exception as e: + logging.critical(f'JSONDecodeError trying to get Aster open orders: {e}; resp: {resp}') + await kill_algo() + resp: list = [] + ld = [ utils.symbol_to_extend_fmt(x['symbol']) for x in resp if abs(float(x.get('positionAmt', 0))) > 0] + return ld + +async def get_aster_notional_position(resp: list | None = None): + global ASTER_NOTIONAL_OBJ + global ASTER_NOTIONAL_POSITION + global ASTER_UNREALIZED_PNL + global ASTER + + previous_notional_obj = ASTER_NOTIONAL_OBJ + previous_notional_position = ASTER_NOTIONAL_POSITION + + if resp: + d = [x for x in resp if x.get('symbol', None) == ASTER.symbol] + d = d[0] if d else {} + + if ( not resp ) or ( not d ): + fut_acct_positionRisk: dict = { + "url": "/fapi/v3/positionRisk", + "method": "GET", + "params": { + 'symbol': ASTER.symbol, + } + } + try: + resp: list = await aster_auth.post_authenticated_url(req=fut_acct_positionRisk) # ty:ignore[invalid-assignment] + except Exception as e: + logging.critical(f'JSONDecodeError trying to get Aster notional: {e}; resp: {resp}') + await kill_algo() + resp: list = [] + + d = [x for x in resp if x.get('symbol', None) == ASTER.symbol][0] + d['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + + if previous_notional_obj is not None: + if previous_notional_obj['timestamp_arrival'] > d['timestamp_arrival']: + # logging.info(f'ASTER NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(d['timestamp_arrival'], unit='ms')}); skipping') + return + + ASTER_NOTIONAL_OBJ = d + + if len(d) < 1: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: Empty d: {d}; resp: {resp}') + await kill_algo() + + ASTER_UNREALIZED_PNL = float(d['unrealized_pnl']) if d.get('unrealized_pnl') is not None else float(d['unRealizedProfit']) + + if d.get('notional') is not None: + ASTER_NOTIONAL_POSITION = float(d['notional']) - ASTER_UNREALIZED_PNL + else: + ASTER_NOTIONAL_POSITION = float(d['position_amount'])*float(d['entry_price']) + if d.get('leverage') is not None: + ASTER.mult = int(d['leverage']) + if abs(ASTER_NOTIONAL_POSITION) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - ASTER CHANGE: {previous_notional_position} -> {ASTER_NOTIONAL_POSITION}; UR PNL: {ASTER_UNREALIZED_PNL}; MULT: {ASTER.mult}; d: {d}; resp: {resp}; max_tgt_notional: {ALGO_CONFIG.Config.Max_Target_Notional}') + await kill_algo() + if ASTER_NOTIONAL_POSITION != previous_notional_position: + logging.info(f'ASTER NOTIONAL CHANGE: {previous_notional_position:.2f} -> {ASTER_NOTIONAL_POSITION:.2f}; UR PNL: {ASTER_UNREALIZED_PNL:.2f}; MULT: {ASTER.mult:.0f}; resp: {bool(resp)}') + +# async def get_extend_collateral(): +# global EXTEND_AVAIL_COLLATERAL + +# get_bals = dict(dict(await EXTEND_CLIENT.account.get_balance()).get('data', {})) +# EXTEND_AVAIL_COLLATERAL = get_bals.get('available_for_trade', 0) if get_bals.get('collateral_name', None)==EXTEND.rh_asset else 0 + +async def get_extend_account_open_symbols() -> list[str]: + resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) + ld = [x.market for x in list(resp) if abs(float(x.size)) > 0] + return ld + +async def set_comb_open_symbols() -> None: + global Open_Symbols + + open_aster_symbols = await get_aster_account_open_symbols() + open_extend_symbols = await get_extend_account_open_symbols() + + Open_Symbols = list(set(open_aster_symbols + open_extend_symbols)) + + +async def get_extend_notional(resp: list | None = None): + global EXTEND_NOTIONAL_OBJ + global EXTEND_NOTIONAL_POSITION + global EXTEND_UNREALIZED_PNL + global EXTEND + + previous_notional_obj = EXTEND_NOTIONAL_OBJ + previous_notional_position = EXTEND_NOTIONAL_POSITION + + if not resp: + resp = dict(await EXTEND_CLIENT.account.get_positions()).get('data', []) + pos_dict = [dict(d) for d in resp if dict(d).get('market') == EXTEND.symbol] + if pos_dict: + pos_dict = pos_dict[0] + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['value'] = 0.00 + pos_dict['unrealised_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + logging.info('get_extend_notional - No Positions') + + else: + pos_dict = [dict(d) for d in resp if dict(d).get('market') == EXTEND.symbol] + if pos_dict: + pos_dict = pos_dict[0] + else: + pos_dict = {} + pos_dict['side'] = 'LONG' + pos_dict['value'] = 0.00 + pos_dict['unrealised_pnl'] = 0.00 + pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + # logging.info('get_extend_notional - No Positions') + + # pos_dict['timestamp_arrival'] = round(datetime.now().timestamp()*1000) + + if previous_notional_obj is not None: + if previous_notional_obj['timestamp_arrival'] > pos_dict['timestamp_arrival']: + # logging.info(f'EXTEND NOTIONAL: prev timestamp ({pd.to_datetime(previous_notional_obj['timestamp_arrival'], unit='ms')}) > new timestamp ({pd.to_datetime(pos_dict['timestamp_arrival'], unit='ms')}); skipping') + return + else: + previous_notional_obj = {} + + EXTEND_NOTIONAL_OBJ = pos_dict + + EXTEND_UNREALIZED_PNL = pos_dict.get('unrealised_pnl', 0) + position_side = pos_dict['side'] # LONG or SHORT + notional_pos_abs = abs(float(pos_dict['value'])) + if position_side == 'LONG': + notional_pos_sided = notional_pos_abs + elif position_side == 'SHORT': + notional_pos_sided = notional_pos_abs * -1 + else: + logging.info(f'EXTEND BAD SIDE ON POSITION UPDATE: {pos_dict}') + + EXTEND_NOTIONAL_POSITION = notional_pos_sided - float(EXTEND_UNREALIZED_PNL) + EXTEND.mult = pos_dict.get('leverage', EXTEND.mult) + if abs(EXTEND_NOTIONAL_POSITION) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'BAD NOTIONAL - EXTEND CHANGE: {previous_notional_position} -> {EXTEND_NOTIONAL_POSITION}; UR PNL: {EXTEND_UNREALIZED_PNL}; MULT: {EXTEND.mult}; d: {pos_dict}; resp: {resp}') + await kill_algo() + if EXTEND_NOTIONAL_POSITION != previous_notional_position: + logging.info(f'EXTEND NOTIONAL CHANGE: {previous_notional_position} [{previous_notional_obj.get('timestamp_arrival')}] -> {EXTEND_NOTIONAL_POSITION:.2f} [{EXTEND_NOTIONAL_OBJ['timestamp_arrival']}]; UR PNL: {EXTEND_UNREALIZED_PNL:.2f}; MULT: {EXTEND.mult}; resp: {bool(resp)}') + +### EXCHANGE INFO ### +async def get_aster_exch_info(symbol_override: str | None = None): + global ASTER + + if symbol_override: + ASTER.symbol = utils.symbol_to_aster_fmt(symbol_override) + + fut_acct_exchangeInfo: dict = { + "url": "/fapi/v3/exchangeInfo", + "method": "GET", + "params": {} + } + r: dict = await aster_auth.post_authenticated_url(fut_acct_exchangeInfo) # ty:ignore[invalid-assignment] + s: list = r['symbols'] + d: dict = [d for d in s if d.get('symbol', None) == ASTER.symbol][0] + f: dict = [f for f in d['filters'] if f.get('filterType', None) == 'LOT_SIZE'][0] + q: dict = [f for f in d['filters'] if f.get('filterType', None) == 'PRICE_FILTER'][0] + n: dict = [f for f in d['filters'] if f.get('filterType', None) == 'MIN_NOTIONAL'][0] + + min_qty = float(f['minQty']) + min_qty = int(min_qty) if min_qty == int(min_qty) else min_qty + + min_price = float(q['minPrice']) + min_price = int(min_price) if min_price == int(min_price) else min_price + ASTER.min_order_size = min_qty + ASTER.min_price = min_price + ASTER.min_notional = float(n['notional']) + +async def get_extend_exch_info(symbol_override: str | None = None): + global EXTEND + + if symbol_override: + EXTEND.symbol = utils.symbol_to_extend_fmt(symbol_override) + + r = await EXTEND_CLIENT.markets_info.get_markets_dict() + EXTEND.min_order_size = float(r[EXTEND.symbol].trading_config.min_order_size) + EXTEND.min_price = float(r[EXTEND.symbol].trading_config.min_price_change) + + +### CANCEL ORDERS ### +async def aster_cancel_all_orders(): + cancel_all_open_orders = { + "url": "/fapi/v3/allOpenOrders", + "method": "DELETE", + "params": { + 'symbol': ASTER.symbol, + } + } + r = await aster_auth.post_authenticated_url(cancel_all_open_orders) + logging.info(f'ASTER CANCEL ALL OPEN ORDERS RESP: {r}') + +async def extend_cancel_all_orders(): + r = await EXTEND_CLIENT.orders.mass_cancel(markets=[EXTEND.symbol]) + logging.info(f'EXTEND CANCEL ALL OPEN ORDERS RESP: {r}') + +### KILL ALGO ### +async def kill_algo(): + await aster_cancel_all_orders() + await extend_cancel_all_orders() + logging.info('ALGO KILL FLAG ACTIVATED; CANCELLING OPEN ORDERS AND SHUTTING DOWN') + raise ValueError('KILL FLAG ACTIVATED') + + +### ALGO LOOP ### +async def run_algo(): + global ASTER + global EXTEND + + global ALGO_CONFIG + global MIN_TIME_TO_FUNDING + global ASTER_OPEN_ORDERS + global EXTEND_OPEN_ORDERS + global Last_Aster_Fill_Time_Ts + global Just_Rejected_Or_Expired + # global Best_Symbol_by_Exchange + + try: + while True: + loop_start = time.time() + # print('__________Start___________') + ### ALGO CONIFG ### + + ALGO_CONFIG = json.loads(VAL_KEY.get('fr_orchestrator_output')) # ty:ignore[invalid-argument-type] + ALGO_CONFIG = structs.Algo_Config(**ALGO_CONFIG) + ALGO_CONFIG.Config.Max_Target_Notional = float(min([ASTER.mult, EXTEND.mult]) * ALGO_CONFIG.Config.Target_Open_Cash_Position) + + MIN_TIME_TO_FUNDING = ALGO_CONFIG.Config.Min_Time_To_Funding_Minutes * 60 * 1000 + + ### Load Data from Feedhandlers ### + best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_output')) # ty:ignore[invalid-argument-type] + best_symbol_by_exchange_aster = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER']) + best_symbol_by_exchange_extend = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND']) + + + ASTER_FUND_RATE_DICT: Any = VAL_KEY.get('fund_rate_aster') + ASTER_FUND_RATE_DICT: dict = json.loads(s=ASTER_FUND_RATE_DICT) if ASTER_FUND_RATE_DICT is not None else {} + if ASTER_FUND_RATE_DICT.get('symbol', None) != ASTER.symbol: + ASTER_FUND_RATE: float = ASTER.initial_funding_rate + # logging.info(f'ASTER Symbol mismatch: {ASTER_FUND_RATE_DICT}; expected symbol: {ASTER.symbol}') + # raise ValueError(f'ASTER Symbol mismatch: {ASTER_FUND_RATE_DICT}; expected symbol: {ASTER.symbol}') + else: + ASTER_FUND_RATE: float = float(ASTER_FUND_RATE_DICT.get('funding_rate', 0)) + + EXTENDED_FUND_RATE_DICT: Any = VAL_KEY.get('fund_rate_extended') + EXTENDED_FUND_RATE_DICT: dict = json.loads(s=EXTENDED_FUND_RATE_DICT) if EXTENDED_FUND_RATE_DICT is not None else {} + if EXTENDED_FUND_RATE_DICT.get('symbol', None) != EXTEND.symbol: + EXTEND_FUND_RATE: float = EXTEND.initial_funding_rate + # logging.info(f'ASTER Symbol mismatch: {EXTENDED_FUND_RATE_DICT}; expected symbol: {EXTEND.symbol}') + # raise ValueError(f'ASTER Symbol mismatch: {EXTENDED_FUND_RATE_DICT}; expected symbol: {EXTEND.symbol}') + else: + EXTEND_FUND_RATE: float = float(EXTENDED_FUND_RATE_DICT.get('funding_rate', 0)) + + if ALGO_CONFIG.Overrides.Flip_Side_For_Testing: + ASTER_FUND_RATE = ASTER_FUND_RATE * -1 + EXTEND_FUND_RATE = EXTEND_FUND_RATE * -1 + + ASTER_FUND_RATE_TIME = float(ASTER_FUND_RATE_DICT.get('next_funding_time_ts_ms', 0)) + ASTER_FUND_RATE_TIME = ASTER_FUND_RATE_TIME+(60*60*1000) if ASTER_FUND_RATE_TIME < (datetime.now().timestamp()*1000) else ASTER_FUND_RATE_TIME + + EXTEND_FUND_RATE_TIME = max([float(EXTENDED_FUND_RATE_DICT.get('next_funding_time_ts_ms', 0)), 0]) + EXTEND_FUND_RATE_TIME = EXTEND_FUND_RATE_TIME+(60*60*1000) if EXTEND_FUND_RATE_TIME < (datetime.now().timestamp()*1000) else EXTEND_FUND_RATE_TIME + + ASTER_TICKER_DICT: Any = VAL_KEY.get('fut_ticker_aster') + ASTER_TICKER_DICT: dict = json.loads(s=ASTER_TICKER_DICT) if ASTER_TICKER_DICT is not None else {} + if ( ASTER_TICKER_DICT.get('symbol', None) != ASTER.symbol ) and not(ALGO_CONFIG.Overrides.Flatten_Open_Positions): + logging.warning(f'ASTER Symbol mismatch: {ASTER_TICKER_DICT}; expected symbol: {ASTER.symbol}') + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)})) + time.sleep(5) + continue + # raise ValueError(f'ASTER Symbol mismatch: {ASTER_TICKER_DICT}; expected symbol: {ASTER.symbol}') + + EXTENDED_TICKER_DICT: Any = VAL_KEY.get('fut_ticker_extended') + EXTENDED_TICKER_DICT: dict = json.loads(s=EXTENDED_TICKER_DICT) if EXTENDED_TICKER_DICT is not None else {} + if ( EXTENDED_TICKER_DICT.get('symbol', None) != EXTEND.symbol) and not(ALGO_CONFIG.Overrides.Flatten_Open_Positions): + logging.warning(f'EXTEND Symbol mismatch: {EXTENDED_TICKER_DICT}; expected symbol: {EXTEND.symbol}') + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)})) + time.sleep(5) + continue + # raise ValueError(f'EXTEND Symbol mismatch: {EXTENDED_TICKER_DICT}; expected symbol: {EXTEND.symbol}') + + ### Manage Local Collateral Using Updates from WS ### + # ASTER_WS_COLLATERAL_UPDATES = VAL_KEY.get('fr_aster_user_positions') + # ASTER_WS_COLLATERAL_UPDATES = json.loads(ASTER_WS_COLLATERAL_UPDATES) if ASTER_WS_COLLATERAL_UPDATES is not None else [] # ty:ignore[invalid-argument-type] + # EXTEND_WS_COLLATERAL_UPDATES = VAL_KEY.get('fr_extended_user_positions') + # EXTEND_WS_COLLATERAL_UPDATES = json.loads(EXTEND_WS_COLLATERAL_UPDATES) if EXTEND_WS_COLLATERAL_UPDATES is not None else [] # ty:ignore[invalid-argument-type] + + ### Manage Local Notionals Using Updates from WS ### + ASTER_WS_POS_UPDATES: Any = VAL_KEY.get(name='fr_aster_user_positions') + ASTER_WS_POS_UPDATES: list = json.loads(s=ASTER_WS_POS_UPDATES) if ASTER_WS_POS_UPDATES is not None else [] + EXTEND_WS_POS_UPDATES: Any = VAL_KEY.get('fr_extended_user_positions') + EXTEND_WS_POS_UPDATES: list = json.loads(EXTEND_WS_POS_UPDATES) if EXTEND_WS_POS_UPDATES is not None else [] + + ### Manage Local Orders Using Updates from WS ### + ASTER_WS_ORDER_UPDATES: Any = VAL_KEY.get('fr_aster_user_orders') + ASTER_WS_ORDER_UPDATES: list = json.loads(ASTER_WS_ORDER_UPDATES) if ASTER_WS_ORDER_UPDATES is not None else [] + EXTEND_WS_ORDER_UPDATES: Any = VAL_KEY.get('fr_extended_user_orders') + EXTEND_WS_ORDER_UPDATES: list = json.loads(EXTEND_WS_ORDER_UPDATES) if EXTEND_WS_ORDER_UPDATES is not None else [] + + # CHECK NO MORE THAN 1 OPEN ORDER ON EITHER EXCHANGE # + if len(ASTER_OPEN_ORDERS) > 1 or len(EXTEND_OPEN_ORDERS) > 1: + logging.info(f'MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS ({len(ASTER_OPEN_ORDERS)}): {ASTER_OPEN_ORDERS}; EXTEND_OPEN_ORDERS ({len(EXTEND_OPEN_ORDERS)}): {EXTEND_OPEN_ORDERS}') + await kill_algo() + raise ValueError('NOT HERE: MORE THAN 1 ORDER OPEN - KILLING ALGO: ASTER_OPEN_ORDERS') + + ### CHECK TIME TO FUNDING AND WHETHER TO BE ACTIVE ### + now_ms = round(datetime.now().timestamp()*1000) + time_to_funding_ms = min([ASTER_FUND_RATE_TIME, EXTEND_FUND_RATE_TIME]) - now_ms + if ( time_to_funding_ms > MIN_TIME_TO_FUNDING ) and (not ASTER_OPEN_ORDERS) and (not EXTEND_OPEN_ORDERS): + logging.info(f'Outside action window (minutes) and no active order (sleeping for 5 sec): {pd.to_datetime(time_to_funding_ms, unit='ms').minute} > {pd.to_datetime(MIN_TIME_TO_FUNDING, unit='ms').minute}') + time.sleep(5) + continue + + if len(ASTER_WS_POS_UPDATES) > 0: + # await get_aster_notional_position() + await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) + ###### *** returned 0 notional even though had a position, need to handle and safety check to not order above max notional. + ##### NEED TO UPDATE SO IT TAKES THE LATEST MSG, ie drop the WS msg if its older than the exisiting one from the API. + + if len(EXTEND_WS_POS_UPDATES) > 0: + await get_extend_notional(resp=EXTEND_WS_POS_UPDATES) + # await get_extend_notional() # ************** NOT USING WEBSOCKET FEED DUE TO ISSUES WITH IT OVERWRITING API DATA ie the WS just statically shows last update and doesnt pull new when you start the algo. + ### Also WS was just stale and caused issues where it sees a fill then gets new API Collateral (correct) and then the next loop would be the old incorrect collateral in the WS, causing bad orders. Do not have issue on ASTER. + + if ASTER_WS_ORDER_UPDATES is not None: + for idx, o in enumerate(ASTER_OPEN_ORDERS): + order_id = o.get('order_id') if o.get('order_id') is not None else o['orderId'] + order_orig_status = o.get('status') if o.get('status') is not None else o['order_status'] + order_update = [ou for ou in ASTER_WS_ORDER_UPDATES if ou.get('order_id', None) == order_id] + + if len(order_update) > 0: + order_update = order_update[0] + order_update_status = order_update.get('status') if order_update.get('status') is not None else order_update.get('order_status') + order_status_changed = order_orig_status.upper() != order_update_status.upper() + + if order_status_changed: + logging.info(f'ASTER ORDER ({order_id}): {order_orig_status} -> {order_update_status}') + ASTER_OPEN_ORDERS[idx] = order_update + if order_update_status in ['CANCELED','EXPIRED']: + logging.info(f'ASTER ORDER CANCELLED or EXPIRED: {order_id}') + ASTER_OPEN_ORDERS.pop(idx) + Just_Rejected_Or_Expired = True + utils.send_tg_alert(f'FR_ALGO - ASTER REJECTED ({order_id})') + elif order_update_status in ['PARTIALLY_FILLED']: + logging.info(f'ASTER ORDER PARTIALLY FILLED: {order_id}') + # await get_aster_collateral() + await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + utils.send_tg_alert(f'FR_ALGO - ASTER PARTIALLY FILLED ({order_id})') + elif order_update_status in ['FILLED']: + logging.info(f'ASTER ORDER FILLED: {order_id}') + ASTER_OPEN_ORDERS.pop(idx) + # await get_aster_collateral() + await get_aster_notional_position(resp=ASTER_WS_POS_UPDATES) + Last_Aster_Fill_Time_Ts = datetime.now().timestamp()*1000 + utils.send_tg_alert(f'FR_ALGO - ASTER FILLED ({order_id})') + else: + logging.critical(f'EXTEND ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') + if EXTEND_WS_ORDER_UPDATES is not None: + for idx, o in enumerate(EXTEND_OPEN_ORDERS): + o = dict(o) + order_id = o.get('order_id') if o.get('order_id') is not None else o.get('id') + order_orig_status = o['status'] + order_update = [dict(ou) for ou in EXTEND_WS_ORDER_UPDATES if dict(ou).get('order_id', None) == order_id] + + if len(order_update) > 0: + order_update: dict = order_update[0] + order_update_status: str = order_update['status'] + order_status_changed: bool = order_orig_status.upper() != order_update_status.upper() + + if order_status_changed: + logging.info(f'EXTEND ORDER ({order_id}): {order_orig_status} -> {order_update_status}') + EXTEND_OPEN_ORDERS[idx] = order_update + if order_update_status in ['CANCELLED','EXPIRED','REJECTED']: + logging.info(f'EXTEND ORDER CANCELLED, REJECTED or EXPIRED: {order_id}') + EXTEND_OPEN_ORDERS.pop(idx) + Just_Rejected_Or_Expired = True + utils.send_tg_alert(f'FR_ALGO - EXTEND REJECTED ({order_id})') + elif order_update_status in ['PARTIALLY_FILLED']: + logging.info(f'EXTEND ORDER PARTIALLY FILLED: {order_id}') + # await get_extend_collateral() + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - EXTEND PARTIALLY FILLED ({order_id})') + elif order_update_status in ['FILLED']: + logging.info(f'EXTEND ORDER FILLED: {order_id}') + EXTEND_OPEN_ORDERS.pop(idx) + # await get_extend_collateral() + await get_extend_notional() + utils.send_tg_alert(f'FR_ALGO - EXTEND FILLED ({order_id})') + else: + logging.critical(f'EXTEND ORDER STATUS CHG TO UNEXPECTED VALUE, KILLING... ({order_id}): {order_orig_status} -> {order_update_status}') + + + if ALGO_CONFIG.Overrides.Allow_Symbol_Change: + if (best_symbol_by_exchange_aster.symbol != ASTER.symbol) or (best_symbol_by_exchange_extend.symbol != EXTEND.symbol): + if abs( ASTER_NOTIONAL_POSITION ) > 0.00 or abs( EXTEND_NOTIONAL_POSITION ) > 0.00: + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print(f'Symbol switch [{ASTER.symbol} > {best_symbol_by_exchange_aster.symbol}] - Flattening Positions') + ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic = True + else: + logging.info('Balances Flattened - Updating to Trade New Symbols:') + logging.info(f' ASTER.symbol -> {best_symbol_by_exchange_aster.symbol}') + logging.info(f' EXTEND.symbol -> {best_symbol_by_exchange_extend.symbol}') + ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic = False + if Open_Symbols: + logging.info(f'OPEN SYMBOLS TO CLOSE: {Open_Symbols}') + master_data = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_master')) # ty:ignore[invalid-argument-type] + open_symbol_to_work = Open_Symbols[0] + current_pos_master_ast = [d for d in master_data if d.get('symbol_ext') == open_symbol_to_work][0] + ASTER = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ast']), + lh_asset = current_pos_master_ast['lh_asset_ast'], + rh_asset = current_pos_master_ast['rh_asset_ast'], + symbol_asset_separator = '', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ast']), + min_price=float(current_pos_master_ast['min_price_ast']), + min_order_size=float(current_pos_master_ast['min_order_size_ast']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ast']), + min_notional=float(current_pos_master_ast['min_notional_ast']), + ) + EXTEND = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ext']), + lh_asset = current_pos_master_ast['lh_asset_ext'], + rh_asset = current_pos_master_ast['rh_asset_ext'], + symbol_asset_separator = '-', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ext']), + min_price=float(current_pos_master_ast['min_price_ext']), + min_order_size=float(current_pos_master_ast['min_order_size_ext']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ext']), + min_notional=float(current_pos_master_ast['min_notional_ext']), + ) + Open_Symbols.pop(0) + await get_aster_notional_position() + await get_extend_notional() + else: + ASTER = best_symbol_by_exchange_aster + EXTEND = best_symbol_by_exchange_extend + + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)})) + + + min_between_fundings = round((abs(ASTER_FUND_RATE_TIME - EXTEND_FUND_RATE_TIME) / 1000 / 60)) + FUNDINGS_AT_SAME_TIME_NEXT_HR = min_between_fundings < 5 + + if ( abs(ASTER_FUND_RATE) > abs(EXTEND_FUND_RATE) ) and FUNDINGS_AT_SAME_TIME_NEXT_HR: + ALPHA_EXCH = 'ASTER' + ALPHA_FUND_RATE = ASTER_FUND_RATE + else: + ALPHA_EXCH = 'EXTEND' + ALPHA_FUND_RATE = EXTEND_FUND_RATE + + if ALPHA_FUND_RATE < 0: + ALPHA_CARRY_SIDE = 'BUY' + ALPHA_TGT_NOTIONAL = ALGO_CONFIG.Config.Max_Target_Notional + else: + ALPHA_CARRY_SIDE = 'SELL' + ALPHA_TGT_NOTIONAL = ALGO_CONFIG.Config.Max_Target_Notional*-1 + + def calc_next_net_fund_rate(FUNDINGS_AT_SAME_TIME_NEXT_HR: bool) -> float: + if FUNDINGS_AT_SAME_TIME_NEXT_HR: + return max([ASTER_FUND_RATE, EXTEND_FUND_RATE]) - min([ASTER_FUND_RATE, EXTEND_FUND_RATE]) + else: + return EXTEND_FUND_RATE + + NEXT_NET_FUNDING_RATE = calc_next_net_fund_rate(FUNDINGS_AT_SAME_TIME_NEXT_HR) + Flags.NET_FUNDING_IS_ZERO = ( NEXT_NET_FUNDING_RATE >= ( (ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade*-1) / 100) ) and ( NEXT_NET_FUNDING_RATE <= ( ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade / 100 ) ) + if Flags.NET_FUNDING_IS_ZERO or ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic: + ALPHA_TGT_NOTIONAL = 0.00 + # if ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS: + # logging.info('NET FUNDING = 0.00; Cancelling Open Orders! then Waiting...') + # aster_cancel_all_orders() + # extend_cancel_all_orders() + # time.sleep(5) + # else: + # logging.info('NET FUNDING = 0.00; NO OPEN ORDERS; Waiting...') + # time.sleep(5) + + if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL==0.00: + # ROUNDING = ROUND_UP + ROUNDING = ROUND_HALF_UP + else: + ROUNDING = ROUND_DOWN + + + if ALPHA_EXCH == 'EXTEND': + ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL*-1 + EXTEND_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL + if ALPHA_CARRY_SIDE == 'BUY': + ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_ask_px']) + EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_bid_px']) + Alpha_Nominator = ASTER_TOB_PX + Alpha_Denominator = EXTEND_TOB_PX + ALPHA_RATIO = ASTER_TOB_PX / EXTEND_TOB_PX + Expected_Alpha = ( ( ASTER_TOB_PX - EXTEND_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + else: + ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_bid_px']) + EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_ask_px']) + Alpha_Nominator = EXTEND_TOB_PX + Alpha_Denominator = ASTER_TOB_PX + ALPHA_RATIO = EXTEND_TOB_PX / ASTER_TOB_PX + Expected_Alpha = ( ( EXTEND_TOB_PX - ASTER_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + else: + ASTER_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL + EXTEND_TGT_NOTIONAL = ALPHA_TGT_NOTIONAL*-1 + if ALPHA_CARRY_SIDE == 'BUY': + ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_bid_px']) + EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_ask_px']) + Alpha_Nominator = EXTEND_TOB_PX + Alpha_Denominator = ASTER_TOB_PX + ALPHA_RATIO = EXTEND_TOB_PX / ASTER_TOB_PX + Expected_Alpha = ( ( EXTEND_TOB_PX - ASTER_TOB_PX ) / (( EXTEND_TOB_PX + ASTER_TOB_PX ) / 2) ) + else: + ASTER_TOB_PX = float(ASTER_TICKER_DICT['best_ask_px']) + EXTEND_TOB_PX = float(EXTENDED_TICKER_DICT['best_bid_px']) + Alpha_Nominator = ASTER_TOB_PX + Alpha_Denominator = EXTEND_TOB_PX + ALPHA_RATIO = ASTER_TOB_PX / EXTEND_TOB_PX + Expected_Alpha = ( ( ASTER_TOB_PX - EXTEND_TOB_PX ) / (( ASTER_TOB_PX + EXTEND_TOB_PX ) / 2) ) + + Expected_Alpha_Net_FR = abs(NEXT_NET_FUNDING_RATE) + Expected_Alpha + Expected_Alpha_Net_FR_w_Taker = Expected_Alpha_Net_FR-0.00025 + Expected_Alpha_w_Taker = Expected_Alpha-0.00025 + + EXTEND_TGT_NOTIONAL = ASTER_NOTIONAL_POSITION * -1 + + ASTER_TGT_TAIL = ASTER_TGT_NOTIONAL - ( float(ASTER_NOTIONAL_POSITION) + float(ASTER_UNREALIZED_PNL) ) + # EXTEND_TGT_TAIL = EXTEND_TGT_NOTIONAL - ( float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_UNREALIZED_PNL) ) + EXTEND_TGT_TAIL = EXTEND_TGT_NOTIONAL - ( float(EXTEND_NOTIONAL_POSITION) ) + # EXTEND_TGT_TAIL = float(ASTER_NOTIONAL_POSITION)*-1 + + min_order_size = ASTER.min_order_size + min_order_size = int(min_order_size) if min_order_size == int(min_order_size) else min_order_size + ASTER_TGT_TAIL_BASE_QTY = Decimal(str(float(ASTER_TGT_TAIL) / float(ASTER_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + if ASTER.min_lot_size: + ASTER_TGT_TAIL_BASE_QTY = float(ASTER_TGT_TAIL_BASE_QTY) - ( float(ASTER_TGT_TAIL_BASE_QTY) % ASTER.min_lot_size ) + ASTER_TGT_TAIL_BASE_QTY = Decimal(str(ASTER_TGT_TAIL_BASE_QTY)).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + + min_order_size = EXTEND.min_order_size + min_order_size = int(min_order_size) if min_order_size == int(min_order_size) else min_order_size + EXTEND_TGT_TAIL_BASE_QTY = Decimal(str(float(EXTEND_TGT_TAIL) / float(EXTEND_TOB_PX))).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + if EXTEND.min_lot_size: + EXTEND_TGT_TAIL_BASE_QTY = float(EXTEND_TGT_TAIL_BASE_QTY) - ( float(EXTEND_TGT_TAIL_BASE_QTY) % EXTEND.min_lot_size ) + EXTEND_TGT_TAIL_BASE_QTY = Decimal(str(EXTEND_TGT_TAIL_BASE_QTY)).quantize(Decimal(str(min_order_size)), rounding=ROUNDING) + + # MAX_MIN_ORDER_QTY = max([ASTER.min_order_size, EXTEND.min_order_size]) + ASTER_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(ASTER_TGT_TAIL_BASE_QTY)) ) >= Decimal(str(abs(ASTER.min_order_size))) ) and ( Decimal(str(abs(ASTER_TGT_TAIL))) > Decimal(str(abs(ASTER.min_notional))) ) + EXTEND_TGT_TAIL_ORDERABLE = ( Decimal(str(abs(EXTEND_TGT_TAIL_BASE_QTY))) >= Decimal(str(abs(EXTEND.min_order_size))) ) and ( Decimal(str(abs(EXTEND_TGT_TAIL))) > Decimal(str(abs(EXTEND.min_notional))) ) + + if not ASTER_TGT_TAIL_ORDERABLE: + if abs(ASTER_TGT_TAIL_BASE_QTY) > 0: + if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL == 0.00: + logging.info('* Trying to flatten small Aster balance, was originally not orderable.') + ASTER_TGT_TAIL_ORDERABLE = True + if not EXTEND_TGT_TAIL_ORDERABLE: + if abs(EXTEND_TGT_TAIL_BASE_QTY) > 0: + if ALGO_CONFIG.Overrides.Flatten_Open_Positions or ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic or ALPHA_TGT_NOTIONAL == 0.00: + logging.info('* Trying to flatten small Extend balance, was originally not orderable.') + EXTEND_TGT_TAIL_ORDERABLE = True + + + + # Hedge_Ratio = abs(( abs( max([abs(float(EXTEND_NOTIONAL_POSITION)), 0.01]) / max([abs(float(ASTER_NOTIONAL_POSITION)), 0.01]) ) - 1 ) * 100) + Hedge_Ratio = abs( ( EXTEND_NOTIONAL_POSITION + ASTER_NOTIONAL_POSITION ) / max([ASTER_NOTIONAL_POSITION, 0.01]) ) * 100 + Currently_Hedged = Hedge_Ratio < 1.00 + + def print_summary(use_logging: bool = False): + OUT: Any = logging.info if use_logging else print + + OUT(f''' + LOOP SLEEP (SEC): {ALGO_CONFIG.Config.Loop_Sleep_Sec} + FLIP SIDES FOR TESTING?: {ALGO_CONFIG.Overrides.Flip_Side_For_Testing}; ASTER ORDER ENABLED? {ALGO_CONFIG.Overrides.Allow_Ordering_Aster}; EXTEND ORDER ENABLED? {ALGO_CONFIG.Overrides.Allow_Ordering_Extend} + {pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(ASTER_FUND_RATE_TIME, unit='ms')-datetime.now()):}) | {pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')} ({(pd.to_datetime(EXTEND_FUND_RATE_TIME, unit='ms')-datetime.now()):}) + ASTER: {ASTER_FUND_RATE:.6%} [{ASTER_FUND_RATE*10_000:.2f}bps] [{ASTER_FUND_RATE*1_000_000:.0f}pips] | EXTEND: {EXTEND_FUND_RATE:.6%} [{EXTEND_FUND_RATE*10_000:.2f}bps] [{EXTEND_FUND_RATE*1_000_000:.0f}pips] + ASTER: {'LONG PAYS SHORT' if ASTER_FUND_RATE > 0 else 'SHORT PAYS LONG'} | EXTEND: {'LONG PAYS SHORT' if EXTEND_FUND_RATE > 0 else 'SHORT PAYS LONG'} + ASTER: [ Notional Position $ : {ASTER_NOTIONAL_POSITION:.4f} ] | EXTEND: [ Notional Position $ : {EXTEND_NOTIONAL_POSITION:.4f} ] + + SAME TIME? : {FUNDINGS_AT_SAME_TIME_NEXT_HR} [ Minutes Between Fundings: {min_between_fundings} ] + NET FUNDING : {NEXT_NET_FUNDING_RATE:.6%} [{NEXT_NET_FUNDING_RATE*10_000:.2f}bps] [{NEXT_NET_FUNDING_RATE*1_000_000:.0f}pips]; Is Zero?: {Flags.NET_FUNDING_IS_ZERO} [Min: {ALGO_CONFIG.Config.Min_Fund_Rate_Pct_To_Trade}] + ALPHA SIDE : {ALPHA_EXCH} [{ALPHA_CARRY_SIDE}] + + TGT NOTIONAL: $ {abs(ALPHA_TGT_NOTIONAL):.2f}; Flatten Open Positions Flag? {ALGO_CONFIG.Overrides.Flatten_Open_Positions}; Opportunistic? {ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic} + + ASTER: {ASTER_NOTIONAL_POSITION:.4f} -> {ASTER_TGT_NOTIONAL:.2f} [ Remain: {ASTER_TGT_TAIL:.4f} ] | EXTEND: {EXTEND_NOTIONAL_POSITION:.4f} -> {EXTEND_TGT_NOTIONAL:.2f} [ Remain: {EXTEND_TGT_TAIL:.4f} ] + ASTER: {ASTER_TGT_NOTIONAL:.2f} - {ASTER_NOTIONAL_POSITION:.2f} + {ASTER_UNREALIZED_PNL:.2f} = {ASTER_TGT_TAIL:2f} | EXTEND: {EXTEND_TGT_NOTIONAL:.2f} - {EXTEND_NOTIONAL_POSITION:.2f} + {EXTEND_UNREALIZED_PNL:.2f} = {EXTEND_TGT_TAIL:2f} + ASTER: {ASTER_TGT_TAIL_BASE_QTY:.4f} > {ASTER.min_order_size:.4f} min [ Order: {ASTER_TGT_TAIL_ORDERABLE} ] | EXTEND: {EXTEND_TGT_TAIL_BASE_QTY:.4f} > {EXTEND.min_order_size:.4f} min [ Order: {EXTEND_TGT_TAIL_ORDERABLE} ] + + ALPHA: {ALPHA_RATIO:.8f} ALPHA_RATIO: {Alpha_Nominator:_.6f} / {Alpha_Denominator:_.6f} (Px Diff: {abs(Alpha_Nominator-Alpha_Denominator):.2f}); Expected_Alpha = {Expected_Alpha:.6f} + FR[{NEXT_NET_FUNDING_RATE:.6f}] = * {Expected_Alpha_Net_FR:.6f} * + FEES : TAKER: {0.00025:.6%}; Expected Alpha w Taker = {Expected_Alpha_Net_FR_w_Taker:.6f} [w/o FR: {Expected_Alpha_w_Taker:.6f}] + HEDGE: {Hedge_Ratio:.2f}% <= {1:.2f}%: {Currently_Hedged} [{EXTEND_NOTIONAL_POSITION:.2f} / {ASTER_NOTIONAL_POSITION:.2f}] + + MKT : Aster: {ASTER.symbol} (best: {best_symbol_by_exchange_aster.symbol}) | Extend: {ASTER.symbol} (best: {best_symbol_by_exchange_extend.symbol}) + + --- ASTER OPEN ORDERS --- + {ASTER_OPEN_ORDERS} + + --- EXTEND OPEN ORDERS --- + {EXTEND_OPEN_ORDERS} + ''') + # ASTER: [ Available Collateral: {ASTER_AVAIL_COLLATERAL:.4f} ] | EXTEND: [ Available Collateral: {EXTEND_AVAIL_COLLATERAL:.4f} ] + # Try Making Hedge Order Contingent on Alpha Order Fills (Basically Hedge has to wait for sig Diff in Balance to order.) would improve when extended is thin (Overnight). + if ALGO_CONFIG.Logging.Log_Summary_Each_Loop: + print_summary(use_logging=True) + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print_summary(use_logging=False) + # print_summary() + + + ### ROUTES ### + # Just_Rejected_Or_Expired + MIN_EXPECTED_ALPHA_TO_TRADE = 0.0000 + if ALGO_CONFIG.Overrides.Flatten_Open_Positions_Opportunistic: + exp_alpha = Expected_Alpha_w_Taker + else: + exp_alpha = Expected_Alpha_Net_FR_w_Taker + # MIN_EXPECTED_ALPHA_TO_TRADE = abs(NEXT_NET_FUNDING_RATE)*-1 + # MIN_EXPECTED_ALPHA_TO_TRADE = -0.000001 + # ALPHA RATIO CHECK + if not( ( exp_alpha > MIN_EXPECTED_ALPHA_TO_TRADE ) or ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS or ALGO_CONFIG.Overrides.Flatten_Open_Positions) ) and Currently_Hedged: + # if not( ( Expected_Alpha_Net_FR_w_Taker > MIN_EXPECTED_ALPHA_TO_TRADE ) or ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS or ALGO_CONFIG.Overrides.Flatten_Open_Positions) ) and Currently_Hedged: + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print(f'Alpha Ratio too low ({ALPHA_RATIO:.8f}) and no Open Orders...') + elif ( Expected_Alpha_Net_FR_w_Taker <= MIN_EXPECTED_ALPHA_TO_TRADE ) and ( ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS ) and Currently_Hedged and not(ALGO_CONFIG.Overrides.Flatten_Open_Positions): + await aster_cancel_all_orders() + await extend_cancel_all_orders() + logging.info('Expected_Alpha went away with open orders...cancelling since we are currently hedged...') + # time.sleep( (1/1000)*100 ) # 100ms wait for ws cancel response + else: + # logging.info(f'*** Alpha Ratio HIT - LETS ORDER: {ALPHA_RATIO:.8f}') + # ASTER + if ASTER_TGT_TAIL_ORDERABLE and ALGO_CONFIG.Overrides.Allow_Ordering_Aster: + # if ALGO_CONFIG.Overrides.Allow_Ordering_Aster: + symbol = ASTER.symbol + side = 'BUY' if ASTER_TGT_TAIL_BASE_QTY > 0.00 else 'SELL' + # qty = str(abs(ASTER_TGT_TAIL_BASE_QTY)) + qty = Decimal(value=str(abs(ASTER_TGT_TAIL_BASE_QTY))) + price = ASTER_TOB_PX - ( float(ASTER.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Aster) ) if side == 'BUY' else ASTER_TOB_PX + ( float(ASTER.min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Aster) ) + + if abs( ( float(ASTER_TGT_TAIL_BASE_QTY)*float(price) ) + ASTER_NOTIONAL_POSITION ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - ASTER: {ASTER_NOTIONAL_POSITION} + {float(ASTER_TGT_TAIL_BASE_QTY)*float(price)} (qty: {float(ASTER_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + await kill_algo() + if ASTER_OPEN_ORDERS: + open_order_id = ASTER_OPEN_ORDERS[0].get('order_id') if ASTER_OPEN_ORDERS[0].get('order_id') is not None else ASTER_OPEN_ORDERS[0]['orderId'] + open_order_px = float(ASTER_OPEN_ORDERS[0].get('price')) if ASTER_OPEN_ORDERS[0].get('price') is not None else float(ASTER_OPEN_ORDERS[0]['original_price']) + min_price = ASTER.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + if Decimal(str( float(open_order_px) - float(price) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) == 0.00: + # if round(open_order_px - float(price), len(str(ASTER.min_price)) - 2 ) == 0.00: + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print('ASTER OPEN ORDER NO PX CHG; SKIPPING') + place_order = False + else: + cancel_order: dict = { + "url": "/fapi/v3/order", + "method": "DELETE", + "params": { + 'symbol': ASTER.symbol, + 'orderId': open_order_id, + } + } + cr: dict = await aster_auth.post_authenticated_url(cancel_order) # ty:ignore[invalid-assignment] + if cr.get('status', None) == 'CANCELED': + ASTER_OPEN_ORDERS.pop(0) + place_order = True + else: + logging.warning(f'ASTER ORDER FAILED TO CANCEL DURING CR ({open_order_id}): RESP {cr}') + place_order = False + else: + place_order = True + + if ASTER_TGT_TAIL_BASE_QTY == 0.00: + place_order = False + logging.info('ASTER TRYNG TO ORDER 0.00 BASE QTY, SKIPPING') + + + if place_order: + min_price = ASTER.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + + if price == Decimal(str(0.00)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP): + logging.info('ASTER TRYNG TO ORDER with A PRICE OF 0.00, SKIPPING') + continue + + if qty >= ASTER.min_order_size and (qty*price) > ASTER.min_notional: + reduceOnly = False + else: + reduceOnly = True + + post_order = { + "url": "/fapi/v3/order", + "method": "POST", + "params": { + 'symbol': symbol, + 'side': side, + 'type': 'LIMIT', + 'timeInForce': 'GTX', + 'quantity': qty, + 'price': price, + 'reduceOnly': reduceOnly + } + } + order_resp: dict = await aster_auth.post_authenticated_url(post_order) # ty:ignore[invalid-assignment] + if order_resp.get('orderId', None) is not None: + order_resp['original_price'] = price + order_resp['order_status'] = order_resp['status'] + ASTER_OPEN_ORDERS.append(order_resp) + Just_Rejected_Or_Expired = False + utils.send_tg_alert(f'FR_ALGO - ASTER Order ({order_resp['orderId']}). Start_$: {ASTER_NOTIONAL_POSITION:.4f}; Value: {float(ASTER_TGT_TAIL_BASE_QTY)*float(price):.4f}; Price: {float(price):.4f}') + logging.info(f'ASTER ORDER PLACED SUCCESS: {order_resp}') + print_summary(use_logging=True) + else: + logging.critical(f'*** Aster Order Response Abnormal: {order_resp}; post_order: {post_order}') + await kill_algo() + else: + pass + # logging.warning('ASTER PLACE ORDER CHECKS FAILED, SKIPPING') + + elif not(ASTER_TGT_TAIL_ORDERABLE) and ASTER_OPEN_ORDERS: + ### Add code to flatten small balances + logging.info('ASTER HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await aster_cancel_all_orders() + time.sleep(0.1) + + # if (float(ALPHA_TGT_NOTIONAL) < float(EXTEND_NOTIONAL_POSITION)) and ((float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_TGT_TAIL)) > float(EXTEND_NOTIONAL_POSITION)): + # EXTEND_TGT_TAIL_ORDERABLE= False + # print('ASTER ordering in the wrong directiion - Should be selling, but its buying - skipping') + # elif (float(ALPHA_TGT_NOTIONAL) > float(EXTEND_NOTIONAL_POSITION)) and ((float(EXTEND_NOTIONAL_POSITION) + float(EXTEND_TGT_TAIL)) < float(EXTEND_NOTIONAL_POSITION)): + # EXTEND_TGT_TAIL_ORDERABLE= False + # print('ASTER ordering in the wrong directiion - Should be buying, but its selling - skipping') + + # EXTEND + if (EXTEND_TGT_TAIL_ORDERABLE and ALGO_CONFIG.Overrides.Allow_Ordering_Extend): + # if ALGO_CONFIG.Overrides.Allow_Ordering_Extend: + side = OrderSide.BUY if EXTEND_TGT_TAIL_BASE_QTY > 0.00 else OrderSide.SELL + symbol = EXTEND.symbol + qty = Decimal(value=str(abs(EXTEND_TGT_TAIL_BASE_QTY))) + + Time_Since_Last_Aster_Fill_ms = ( datetime.now().timestamp()*1000 ) - Last_Aster_Fill_Time_Ts + min_price = EXTEND.min_price + min_price = int(min_price) if min_price == int(min_price) else min_price + if Time_Since_Last_Aster_Fill_ms > ( 1000 * ALGO_CONFIG.Config.Switch_To_Taker_Seconds ): # Change to allow taker orders if its been more than x seconds + post_only = False + price: Decimal = Decimal(value=str(EXTEND_TOB_PX - ( float(min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) if side == 'BUY' else EXTEND_TOB_PX + ( float(min_price)*int(ALGO_CONFIG.Config.Price_Worsener_Extend) ) )).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + else: + # post_only = True + post_only = False + price: Decimal = Decimal(value=str(EXTEND_TOB_PX)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + + if abs( ( float(EXTEND_TGT_TAIL_BASE_QTY)*float(price) ) + EXTEND_NOTIONAL_POSITION ) > ALGO_CONFIG.Config.Max_Target_Notional*ALGO_CONFIG.Config.Max_Order_Over_Notional_Ratio: + logging.info(f'TRYING TO ORDER OVER MAX NOTIOANL - EXTEND: {EXTEND_NOTIONAL_POSITION:.2f} + {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price):.2f} (qty: {float(EXTEND_TGT_TAIL_BASE_QTY):.2f}; px: {float(price):.2f})') + await kill_algo() + if EXTEND_OPEN_ORDERS: + open_order_dict = dict(EXTEND_OPEN_ORDERS[0]) + open_order_id = str(open_order_dict['external_id']) + open_order_px = float(open_order_dict['price']) + + # if int(qty) == 0: + # place_order = False + # place_residual_order = False + # logging.info(f'EXTEND NOT ORDERING DUE TO NOTIONAL QTY == 0; Filled: {float(open_order_filled_qty):.4f}; Residual: {qty:.4f}') + # else: + # place_order = True + # place_residual_order = False + # logging.info(f'Ordering RESIDUAL market order for remaining small amount: {qty}') + else: + open_order_id = None + open_order_px = 0 + place_order = True + if place_order: + price: Decimal = Decimal(str(price)).quantize(Decimal(str(min_price)), rounding=ROUND_HALF_UP) + if round(open_order_px - float(price), len(str(min_price)) - 2 ) == 0.00: + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print('EXTEND OPEN ORDER NO PX CHG; SKIPPING') + else: + try: + if abs(float(EXTEND_NOTIONAL_POSITION) + (float(qty)*float(price))) < abs(float(EXTEND_NOTIONAL_POSITION)): + reduce_only = True + else: + reduce_only = False + + # taker_fee = taker_fee=Decimal("0.00000") if post_only else Decimal("0.00025") + taker_fee = Decimal("0.00025") + order_resp: WrappedApiResponse[PlacedOrderModel] = await EXTEND_CLIENT.place_order( + market_name=symbol, + amount_of_synthetic=Decimal(str(qty)), + price=Decimal(str(price)), + side=side, + taker_fee=taker_fee, + previous_order_id=open_order_id, + post_only=post_only, + reduce_only=reduce_only + ) + except Exception as e: + logging.error(f'EXTEND ORDER PLACEMENT FAILED: {e}') + logging.error(f'EXTEND ORDER PLACEMENT FAILED - POSTED: market_name:{symbol}, side: {side} amount_of_synthetic:{qty}, price:{price}, side:{side},taker_fee:{taker_fee}, previous_order_id:{open_order_id}, post_only:{post_only}; reduce_only:{reduce_only}') + logging.error(traceback.format_exc()) + logging.error(f'EXTEND ORDER PLACEMENT FAILED - RESP: {order_resp}') + + order_resp_dict = dict(order_resp) + + if order_resp_dict.get('status', None) == 'OK': + if EXTEND_OPEN_ORDERS: + EXTEND_OPEN_ORDERS.pop(0) + + order_dict = dict(order_resp_dict['data']) + order_dict['status'] = 'NEW' + order_dict['price'] = str(price) + order_dict['qty'] = str(qty) + order_dict['filled_qty'] = str(0) + order_dict['side'] = str(side) + + EXTEND_OPEN_ORDERS.append(order_dict) + Just_Rejected_Or_Expired = False + utils.send_tg_alert(f'FR_ALGO - EXTEND Order ({order_dict.get('id', None)}). Start_$: {EXTEND_NOTIONAL_POSITION:.2f}; Value: {float(EXTEND_TGT_TAIL_BASE_QTY)*float(price):.2f}; Price: {float(price):.2f}') + logging.info(f'EXTEND ORDER PLACED SUCCESS: {order_dict}') + print_summary(use_logging=True) + else: + logging.critical(f'*** Extend Order Response Abnormal: {order_resp};') + await kill_algo() + else: + logging.warning('EXTEND PLACE ORDER CHECKS FAILED, SKIPPING') + + elif not(EXTEND_TGT_TAIL_ORDERABLE) and EXTEND_OPEN_ORDERS: + logging.info('EXTEND HAS NO TAIL BUT OPEN ORDERS - CANCELLING OPEN ORDERS') + await extend_cancel_all_orders() + + + if ASTER_OPEN_ORDERS or EXTEND_OPEN_ORDERS: + continue + else: + time.sleep(ALGO_CONFIG.Config.Loop_Sleep_Sec) + if ALGO_CONFIG.Logging.Print_Summary_Each_Loop: + print(f'_____ End No Open Orders _____ (Algo Engine ms: {(time.time() - loop_start)*1000:.2f}); Sleeping for sec: {ALGO_CONFIG.Config.Loop_Sleep_Sec:.0f}') + + except KeyboardInterrupt: + logging.info('CANCELLING OPEN ORDERS') + await kill_algo() + except Exception as e: + logging.error(traceback.format_exc()) + logging.critical(f'*** ALGO ENGINE CRASHED: {e}') + logging.info('CANCELLING OPEN ORDERS') + utils.send_tg_alert(f'FR_ALGO_CRASHED: {str(e)}') + await kill_algo() + + +### MAIN STARTUP ### +async def main(): + global EXTEND_CLIENT + global VAL_KEY + global CON + global ALGO_CONFIG + global ASTER + global EXTEND + global Open_Symbols + + + _, EXTEND_CLIENT = await extend_auth.create_auth_account_and_trading_client() + VAL_KEY = valkey.Valkey(host='localhost', port=6379, db=0, decode_responses=True) + engine = create_async_engine('mysql+asyncmy://root:pwd@localhost/fund_rate') + + await set_comb_open_symbols() + + best_symbol_by_exchange: dict = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_output')) # ty:ignore[invalid-argument-type] + if Open_Symbols: + logging.info(f'OPEN SYMBOLS: {Open_Symbols}') + master_data = json.loads(s=VAL_KEY.get(name='fr_engine_best_fund_rate_master')) # ty:ignore[invalid-argument-type] + open_symbol_to_work = Open_Symbols[0] + current_pos_master_ast = [d for d in master_data if d.get('symbol_ext') == open_symbol_to_work][0] + ASTER = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ast']), + lh_asset = current_pos_master_ast['lh_asset_ast'], + rh_asset = current_pos_master_ast['rh_asset_ast'], + symbol_asset_separator = '', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ast']), + min_price=float(current_pos_master_ast['min_price_ast']), + min_order_size=float(current_pos_master_ast['min_order_size_ast']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ast']), + min_notional=float(current_pos_master_ast['min_notional_ast']), + buy_ratio=float(current_pos_master_ast['min_notional_ast']), + ) + EXTEND = structs.Perpetual_Exchange( + mult = int(current_pos_master_ast['max_leverage_ext']), + lh_asset = current_pos_master_ast['lh_asset_ext'], + rh_asset = current_pos_master_ast['rh_asset_ext'], + symbol_asset_separator = '-', + initial_funding_rate=float(current_pos_master_ast['funding_rate_ext']), + min_price=float(current_pos_master_ast['min_price_ext']), + min_order_size=float(current_pos_master_ast['min_order_size_ext']), + min_lot_size=float(current_pos_master_ast['min_lot_size_ext']), + min_notional=float(current_pos_master_ast['min_notional_ext']), + buy_ratio=float(current_pos_master_ast['min_notional_ext']), + ) + Open_Symbols.pop(0) + else: + ASTER = structs.Perpetual_Exchange(**best_symbol_by_exchange['ASTER']) + EXTEND = structs.Perpetual_Exchange(**best_symbol_by_exchange['EXTEND']) + + # await get_aster_exch_info(symbol_override=Open_Symbols[0]) + # await get_extend_exch_info(symbol_override=Open_Symbols[0]) + + with open('algo_config.json', mode='r', encoding='utf-8') as file: + ALGO_CONFIG = json.load(file) + ALGO_CONFIG = structs.Algo_Config(**ALGO_CONFIG) + + ALGO_CONFIG.Config.Max_Target_Notional = float(min([ASTER.mult, EXTEND.mult]) * ALGO_CONFIG.Config.Target_Open_Cash_Position) + # logging.info(f'Initial Algo Config: {ALGO_CONFIG}') + + VAL_KEY.set(name='fr_orchestrator_output', value=json.dumps(obj=ALGO_CONFIG.model_dump())) + VAL_KEY.set(name='fr_algo_working_symbol', value=json.dumps(obj={'ASTER': asdict(obj=ASTER), 'EXTEND': asdict(obj=EXTEND)})) + + async with engine.connect() as CON: + ### ASTER SETUP ### + # await get_aster_collateral() + await get_aster_notional_position() + await get_aster_exch_info() + await get_aster_open_orders() + ### EXTEND SETUP ### + # await get_extend_collateral() + await get_extend_notional() + await get_extend_exch_info() + await get_extend_open_orders() + + await run_algo() + +if __name__ == '__main__': + START_TIME = round(datetime.now().timestamp()*1000) + + logging.info(f'Log FilePath: {LOG_FILEPATH}') + + logging.basicConfig( + force=True, + filename=LOG_FILEPATH, + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + filemode='w' + ) + logging.info(f"STARTED: {START_TIME}") + + asyncio.run(main()) diff --git a/modules/structs.py b/modules/structs.py index 888b3c8..8a54fe4 100644 --- a/modules/structs.py +++ b/modules/structs.py @@ -1,4 +1,3 @@ -from rel.rel import init import json from dataclasses import dataclass, field from typing import Any @@ -6,6 +5,93 @@ from typing import Any import valkey from pydantic import BaseModel +from sqlalchemy.util.typing import Self +from collections.abc import Sequence, Callable + +def ret_true(): + return True + +class Locked_Value(Sequence): + def __init__(self, initial_value: Any = None, unlock_func: Callable=ret_true): + self._value: Any = initial_value + self._unlock_func: Callable = unlock_func + self._is_locked: bool = True + + def __repr__(self): + return str((self._value, self._is_locked, self._unlock_func)) + + def __len__(self): + return len((self._value, self._is_locked, self._unlock_func)) + + def __getitem__(self, index): + return (self._value, self._is_locked, self._unlock_func)[index] + + def __str__(self): + return str((self._value)) + + def unlock(self) -> Self: + if self._unlock_func(): + self._is_locked = False + return self + + def lock(self) -> Self: + self._is_locked = True + return self + + @property + def is_locked(self): + return self._is_locked + + @property + def is_unlocked(self): + return not(self._is_locked) + + @property + def value(self): + return self._value + + @value.setter + def value(self, v): + if not(self._is_locked): + self._value = v + else: + raise ValueError(f'Failed to set value, item is locked: {str(self.__repr__)}') + + +class Current_Previous_Value: + def __init__(self, value: Any = None, previous_value: Any = None): + self._value: Any = value + self._previous_value: Any = previous_value + + def __repr__(self): + return str((self._value, self._previous_value)) + + def __len__(self): + return len((self._value, self._previous_value)) + + def __getitem__(self, index): + return (self._value, self._previous_value)[index] + + def __str__(self): + return str(self._value) + + @property + def value(self): + return self._value + + @property + def previous_value(self): + return self._previous_value + + @value.setter + def value(self, v): + self._previous_value = self._value + self._value = v + + + + + # @dataclass(kw_only=True) class Algo_Config_Overrides(BaseModel): Allow_Ordering_Aster: bool @@ -171,6 +257,10 @@ class Perpetual_Exchange: min_order_size: float = 0 min_lot_size: float = 0 min_notional: float = 0 + buy_ratio: float = 0 + notional_obj: dict = field(default_factory=dict) + notional_position: float = 0 + unrealized_pnl: float = 0 # async def update(self): # await self.Collateral_Updates.update()