diff --git a/.vscode/launch.json b/.vscode/launch.json
index bded3f8..163e814 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -21,18 +21,23 @@
"name": "-------- Live Pair Trading --------",
},
{
- "name": "PAIRS TRADER",
+ "name": "PAIR TRADER",
"type": "debugpy",
"request": "launch",
"python": "/home/oleg/.pyenv/python3.12-venv/bin/python",
- "program": "${workspaceFolder}/bin/pairs_trader.py",
+ "program": "${workspaceFolder}/apps/pair_trader.py",
"console": "integratedTerminal",
"env": {
- "PYTHONPATH": "${workspaceFolder}/.."
+ "PYTHONPATH": "${workspaceFolder}/..",
+ "CONFIG_SERVICE": "cloud16.cvtt.vpn:6789",
+ "MODEL_CONFIG": "vecm"
},
"args": [
- "--config=${workspaceFolder}/configuration/pairs_trader.cfg",
- "--pair=PAIR-ADA-USDT:BNBSPOT,PAIR-SOL-USDT:BNBSPOT",
+ // "--config=${workspaceFolder}/configuration/pair_trader.cfg",
+ "--config=http://cloud16.cvtt.vpn:6789/apps/pairs_trading/pair_trader",
+ "--book_id=TEST_BOOK_20250818",
+ "--instrument_A=COINBASE_AT:PAIR-ADA-USD",
+ "--instrument_B=COINBASE_AT:PAIR-SOL-USD",
],
},
{
@@ -45,14 +50,15 @@
"python": "/home/oleg/.pyenv/python3.12-venv/bin/python",
"program": "${workspaceFolder}/research/backtest.py",
"args": [
- "--config=${workspaceFolder}/configuration/vecm-opt.cfg",
+ "--config=http://cloud16.cvtt.vpn:6789/apps/pairs_trading/backtest",
"--instruments=CRYPTO:BNBSPOT:PAIR-ADA-USDT,CRYPTO:BNBSPOT:PAIR-SOL-USDT",
- "--date_pattern=20250910",
+ "--date_pattern=20250911",
"--result_db=${workspaceFolder}/research/results/crypto/%T.vecm-opt.ADA-SOL.20250605.crypto_results.db",
],
"env": {
"PYTHONPATH": "${workspaceFolder}/..",
- "CONFIG_SERVICE": "cloud16.cvtt.vpn:6789"
+ "CONFIG_SERVICE": "cloud16.cvtt.vpn:6789",
+ "MODEL_CONFIG": "vecm-opt"
},
"console": "integratedTerminal"
},
diff --git a/apps/pairs_trader.py b/apps/pair_trader.py
similarity index 64%
rename from apps/pairs_trader.py
rename to apps/pair_trader.py
index d03ffec..8045228 100644
--- a/apps/pairs_trader.py
+++ b/apps/pair_trader.py
@@ -1,6 +1,7 @@
from __future__ import annotations
-from typing import Callable, Coroutine, List
+import asyncio
+from typing import Callable, Coroutine, Dict, List
import aiohttp.web as web
from cvttpy_tools.app import App
@@ -16,9 +17,7 @@ from cvttpy_trading.trading.instrument import ExchangeInstrument
from cvttpy_trading.trading.mkt_data.md_summary import MdTradesAggregate
from cvttpy_trading.trading.exchange_config import ExchangeAccounts
# ---
-from pairs_trading.lib.pt_strategy.live.live_strategy import PtLiveStrategy
from pairs_trading.lib.live.mkt_data_client import CvttRestMktDataClient
-from pairs_trading.lib.live.ti_sender import TradingInstructionsSender
'''
config http://cloud16.cvtt.vpn/apps/pairs_trading
@@ -27,27 +26,36 @@ config http://cloud16.cvtt.vpn/apps/pairs_trading
HistMdCbT = Callable[[List[MdTradesAggregate]], Coroutine]
UpdateMdCbT = Callable[[MdTradesAggregate], Coroutine]
-class PairsTrader(NamedObject):
+class PairTrader(NamedObject):
config_: CvttAppConfig
instruments_: List[ExchangeInstrument]
book_id_: BookIdT
- live_strategy_: PtLiveStrategy
+ live_strategy_: "PtLiveStrategy" #type: ignore
+ ti_sender_: "TradingInstructionsSender" #type: ignore
pricer_client_: CvttRestMktDataClient
- ti_sender_: TradingInstructionsSender
rest_service_: RestService
+ latest_history_: Dict[ExchangeInstrument, List[MdTradesAggregate]]
+
def __init__(self) -> None:
self.instruments_ = []
+ self.latest_history_ = {}
App.instance().add_cmdline_arg(
- "--pair",
+ "--instrument_A",
type=str,
required=True,
help=(
- "Comma-separated pair of instrument symbols"
- " with exchange config name"
- " (e.g., PAIR-BTC-USD:BNBSPOT,PAIR-ETH-USD:BNBSPOT)"
+ " Instrument A in pair (e.g., COINBASE_AT:PAIR-BTC-USD)"
+ ),
+ )
+ App.instance().add_cmdline_arg(
+ "--instrument_B",
+ type=str,
+ required=True,
+ help=(
+ " Instrument B in pair (e.g., COINBASE_AT:PAIR-ETH-USD)"
),
)
@@ -65,21 +73,21 @@ class PairsTrader(NamedObject):
self.book_id_ = App.instance().get_argument(name="book_id")
# ------- PARSE INSTRUMENTS -------
- instr_str = App.instance().get_argument("pair", "")
- if not instr_str:
- raise ValueError("Pair is required")
- instr_list = instr_str.split(",")
-
- assert len(instr_list) == 2, "Only two instruments are supported"
-
+ instr_list: List[str] = []
+ instr_str = App.instance().get_argument("instrument_A", "")
+ assert instr_str != "", "Missing insrument A"
+ instr_list.append(instr_str)
+ instr_str = App.instance().get_argument("instrument_B", "")
+ assert instr_str != "", "Missing insrument B"
+ instr_list.append(instr_str)
+
for instr in instr_list:
instr_parts = instr.split(":")
if len(instr_parts) != 2:
raise ValueError(f"Invalid pair format: {instr}")
- instrument_id = instr_parts[0]
- exch_acct = instr_parts[1]
+ exch_acct = instr_parts[0]
+ instrument_id = instr_parts[1]
exch_inst = ExchangeAccounts.instance().get_exchange_instrument(exch_acct=exch_acct, instrument_id=instrument_id)
-
assert exch_inst is not None, f"No ExchangeInstrument for {instr}"
exch_inst.user_data_["exch_acct"] = exch_acct
self.instruments_.append(exch_inst)
@@ -87,20 +95,24 @@ class PairsTrader(NamedObject):
Log.info(f"{self.fname()} Instruments: {self.instruments_[0].details_short()} <==> {self.instruments_[1].details_short()}")
# ------- CREATE STRATEGY -------
- strategy_config = self.config_.get_subconfig("strategy_config", Config({}))
+ from pairs_trading.lib.pt_strategy.live.live_strategy import PtLiveStrategy
+ strategy_config = CvttAppConfig.instance() #self.config_.get_subconfig("strategy_config", Config({}))
self.live_strategy_ = PtLiveStrategy(
config=strategy_config,
pairs_trader=self,
)
Log.info(f"{self.fname()} Strategy created: {self.live_strategy_}")
+ model_name = self.config_.get_value("model/name", "?model/name?")
+ self.config_.set_value("strategy_id", f"{self.live_strategy_.__class__.__name__}:{model_name}")
# # ------- CREATE PRICER CLIENT -------
self.pricer_client_ = CvttRestMktDataClient(config=self.config_)
Log.info(f"{self.fname()} MD client created: {self.pricer_client_}")
# ------- CREATE TRADER CLIENT -------
+ from pairs_trading.lib.live.ti_sender import TradingInstructionsSender
self.ti_sender_ = TradingInstructionsSender(config=self.config_, pairs_trader=self)
- Log.info(f"{self.fname()} TI sebder created: {self.ti_sender_}")
+ Log.info(f"{self.fname()} TI sender created: {self.ti_sender_}")
# # ------- CREATE REST SERVER -------
self.rest_service_ = RestService(
@@ -115,6 +127,7 @@ class PairsTrader(NamedObject):
)
async def subscribe_md(self) -> None:
+ from functools import partial
for exch_inst in self.instruments_:
exch_acct = exch_inst.user_data_.get("exch_acct", "?exch_acct?")
instrument_id = exch_inst.instrument_id()
@@ -124,12 +137,19 @@ class PairsTrader(NamedObject):
instrument_id=instrument_id,
interval_sec=self.live_strategy_.interval_sec(),
history_depth_sec=self.live_strategy_.history_depth_sec(),
- callback=self._on_md_summary
+ callback=partial(self._on_md_summary, exch_inst=exch_inst)
)
- async def _on_md_summary(self, history: List[MdTradesAggregate]) -> None:
- # Snapshot or update?
- await self.live_strategy_.on_mkt_data_hist_snapshot(hist_aggr=history)
+ async def _on_md_summary(self, history: List[MdTradesAggregate], exch_inst: ExchangeInstrument) -> None:
+ # URGENT before calling stragegy, make sure that **BOTH** instruments market data is combined.
+ Log.info(f"DEBUG got {exch_inst.details_short()} data")
+ self.latest_history_[exch_inst] = history
+ if len(self.latest_history_) == 2:
+ from itertools import chain
+ all_aggrs = sorted(list(chain.from_iterable(self.latest_history_.values())), key=lambda X: X.time_ns_)
+
+ await self.live_strategy_.on_mkt_data_hist_snapshot(hist_aggr=all_aggrs)
+ self.latest_history_ = {}
async def _on_api_request(self, request: web.Request) -> web.Response:
# TODO choose pair
@@ -139,10 +159,12 @@ class PairsTrader(NamedObject):
async def run(self) -> None:
Log.info(f"{self.fname()} ...")
+ while True:
+ await asyncio.sleep(0.1)
pass
if __name__ == "__main__":
App()
CvttAppConfig()
- PairsTrader()
+ PairTrader()
App.instance().run()
diff --git a/configuration/backtest.cfg b/configuration/backtest.cfg
new file mode 100644
index 0000000..9b53852
--- /dev/null
+++ b/configuration/backtest.cfg
@@ -0,0 +1,46 @@
+{
+ "refdata": {
+ "assets": @inc=http://@env{CONFIG_SERVICE}/refdata/assets
+ , "instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/instruments
+ , "exchange_instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/exchange_instruments
+ , "dynamic_instrument_exchanges": ["ALPACA"]
+ , "exchanges": @inc=http://@env{CONFIG_SERVICE}/refdata/exchanges
+ },
+ "market_data_loading": {
+ "CRYPTO": {
+ "data_directory": "./data/crypto",
+ "db_table_name": "md_1min_bars",
+ "instrument_id_pfx": "PAIR-",
+ },
+ "EQUITY": {
+ "data_directory": "./data/equity",
+ "db_table_name": "md_1min_bars",
+ "instrument_id_pfx": "STOCK-",
+ }
+ },
+ # ====== Funding ======
+ "funding_per_pair": 2000.0,
+
+ # ====== Model =======
+ "model": @inc=http://@env{CONFIG_SERVICE}/apps/common/models/@env{MODEL_CONFIG}
+
+ # ====== Trading =======
+ "execution_price": {
+ "column": "vwap",
+ "shift": 1,
+ },
+ # ====== Stop Conditions ======
+ "stop_close_conditions": {
+ "profit": 2.0,
+ "loss": -0.5
+ }
+
+ # ====== End of Session Closeout ======
+ "close_outstanding_positions": true,
+ # "close_outstanding_positions": false,
+ "trading_hours": {
+ "timezone": "America/New_York",
+ "begin_session": "7:30:00",
+ "end_session": "18:30:00",
+ }
+}
\ No newline at end of file
diff --git a/configuration/__DELETE__/pairs_trader.cfg b/configuration/pair_trader.cfg
similarity index 95%
rename from configuration/__DELETE__/pairs_trader.cfg
rename to configuration/pair_trader.cfg
index d23e312..09b9bd8 100644
--- a/configuration/__DELETE__/pairs_trader.cfg
+++ b/configuration/pair_trader.cfg
@@ -1,5 +1,5 @@
{
- "strategy_config": @inc=file:///home/oleg/develop/pairs_trading/configuration/ols.cfg
+ "strategy_config": @inc=file:///home/oleg/develop/pairs_trading/configuration/vecm-opt.cfg
"pricer_config": {
"pricer_url": "ws://localhost:12346/ws",
"history_depth_sec": 86400 #"60*60*24", # use simpleeval
diff --git a/configuration/vecm-opt.cfg b/configuration/vecm-opt.cfg
index df0eea2..5e202c4 100644
--- a/configuration/vecm-opt.cfg
+++ b/configuration/vecm-opt.cfg
@@ -1,26 +1,26 @@
{
- "refdata": {
- "assets": @inc=http://@env{CONFIG_SERVICE}/refdata/assets
- , "instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/instruments
- , "exchange_instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/exchange_instruments
- , "dynamic_instrument_exchanges": ["ALPACA"]
- , "exchanges": @inc=http://@env{CONFIG_SERVICE}/refdata/exchanges
- },
- "market_data_loading": {
- "CRYPTO": {
- "data_directory": "./data/crypto",
- "db_table_name": "md_1min_bars",
- "instrument_id_pfx": "PAIR-",
- },
- "EQUITY": {
- "data_directory": "./data/equity",
- "db_table_name": "md_1min_bars",
- "instrument_id_pfx": "STOCK-",
- }
- },
+ # "refdata": {
+ # "assets": @inc=http://@env{CONFIG_SERVICE}/refdata/assets
+ # , "instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/instruments
+ # , "exchange_instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/exchange_instruments
+ # , "dynamic_instrument_exchanges": ["ALPACA"]
+ # , "exchanges": @inc=http://@env{CONFIG_SERVICE}/refdata/exchanges
+ # },
+ # "market_data_loading": {
+ # "CRYPTO": {
+ # "data_directory": "./data/crypto",
+ # "db_table_name": "md_1min_bars",
+ # "instrument_id_pfx": "PAIR-",
+ # },
+ # "EQUITY": {
+ # "data_directory": "./data/equity",
+ # "db_table_name": "md_1min_bars",
+ # "instrument_id_pfx": "STOCK-",
+ # }
+ # },
- # ====== Funding ======
- "funding_per_pair": 2000.0,
+ # # ====== Funding ======
+ # "funding_per_pair": 2000.0,
# ====== Trading Parameters ======
"stat_model_price": "close", # "vwap"
@@ -39,18 +39,18 @@
"min_training_size": 60,
"max_training_size": 150,
- # ====== Stop Conditions ======
- "stop_close_conditions": {
- "profit": 2.0,
- "loss": -0.5
- }
+ # # ====== Stop Conditions ======
+ # "stop_close_conditions": {
+ # "profit": 2.0,
+ # "loss": -0.5
+ # }
- # ====== End of Session Closeout ======
- "close_outstanding_positions": true,
- # "close_outstanding_positions": false,
- "trading_hours": {
- "timezone": "America/New_York",
- "begin_session": "7:30:00",
- "end_session": "18:30:00",
- }
+ # # ====== End of Session Closeout ======
+ # "close_outstanding_positions": true,
+ # # "close_outstanding_positions": false,
+ # "trading_hours": {
+ # "timezone": "America/New_York",
+ # "begin_session": "7:30:00",
+ # "end_session": "18:30:00",
+ # }
}
\ No newline at end of file
diff --git a/lib/live/mkt_data_client.py b/lib/live/mkt_data_client.py
index d94aacb..bb6eae6 100644
--- a/lib/live/mkt_data_client.py
+++ b/lib/live/mkt_data_client.py
@@ -151,6 +151,7 @@ class MdSummaryCollector(NamedObject):
return MdSummary.from_REST_response(response=response)
def get_last(self) -> Optional[MdSummary]:
+ Log.info(f"{self.fname()}: for {self.exch_inst_.details_short()}")
rqst_data = self.rqst_data()
rqst_data["history_depth_sec"] = self.interval_sec_ * 2
response: requests.Response = self.sender_.send_post(
@@ -186,10 +187,12 @@ class MdSummaryCollector(NamedObject):
def set_timer(self):
if self.timer_:
self.timer_.cancel()
+ start_in = self.next_load_time() - current_seconds()
self.timer_ = Timer(
- start_in_sec=(self.next_load_time() - current_seconds()),
+ start_in_sec=start_in,
func=self._load_new,
)
+ Log.info(f"{self.fname()} Timer for {self.exch_inst_.details_short()} is set to run in {start_in} sec")
def next_load_time(self) -> NanosT:
curr_sec = int(current_seconds())
diff --git a/lib/live/ti_sender.py b/lib/live/ti_sender.py
index 0138888..6501bc8 100644
--- a/lib/live/ti_sender.py
+++ b/lib/live/ti_sender.py
@@ -10,13 +10,13 @@ from cvttpy_tools.logger import Log
from cvttpy_trading.trading.trading_instructions import TradingInstructions
# ---
from pairs_trading.lib.live.rest_client import RESTSender
-from pairs_trading.apps.pairs_trader import PairsTrader
+from pairs_trading.apps.pair_trader import PairTrader
class TradingInstructionsSender(NamedObject):
config_: Config
sender_: RESTSender
- pairs_trader_: PairsTrader
+ pairs_trader_: PairTrader
class TradingInstType(str, Enum):
TARGET_POSITION = "TARGET_POSITION"
@@ -24,13 +24,7 @@ class TradingInstructionsSender(NamedObject):
MARKET_MAKING = "MARKET_MAKING"
NONE = "NONE"
- # config_: Config
- # ti_method_: str
- # ti_url_: str
- # health_check_method_: str
- # health_check_url_: str
-
- def __init__(self, config: Config, pairs_trader: PairsTrader) -> None:
+ def __init__(self, config: Config, pairs_trader: PairTrader) -> None:
self.config_ = config
base_url = self.config_.get_value("cvtt_base_url", default="")
assert base_url
@@ -45,7 +39,7 @@ class TradingInstructionsSender(NamedObject):
async def send_trading_instructions(self, ti: TradingInstructions) -> None:
-
+ Log.info(f"{self.fname()}: sending {ti=}")
response: requests.Response = self.sender_.send_post(
endpoint="trading_instructions", post_body=ti.to_dict()
)
diff --git a/lib/pt_strategy/live/live_strategy.py b/lib/pt_strategy/live/live_strategy.py
index 1c4fdee..4a6c79a 100644
--- a/lib/pt_strategy/live/live_strategy.py
+++ b/lib/pt_strategy/live/live_strategy.py
@@ -22,7 +22,7 @@ from cvttpy_trading.trading.trading_instructions import TargetPositionSignal
from pairs_trading.lib.pt_strategy.model_data_policy import ModelDataPolicy
from pairs_trading.lib.pt_strategy.pt_model import Prediction
from pairs_trading.lib.pt_strategy.trading_pair import LiveTradingPair
-from pairs_trading.apps.pairs_trader import PairsTrader
+from pairs_trading.apps.pair_trader import PairTrader
from pairs_trading.lib.pt_strategy.pt_market_data import LiveMarketData
@@ -37,7 +37,7 @@ class PtLiveStrategy(NamedObject):
trading_pair_: LiveTradingPair
model_data_policy_: ModelDataPolicy
- pairs_trader_: PairsTrader
+ pairs_trader_: PairTrader
# for presentation: history of prediction values and trading signals
predictions_df_: pd.DataFrame
@@ -46,22 +46,28 @@ class PtLiveStrategy(NamedObject):
def __init__(
self,
config: Config,
- pairs_trader: PairsTrader,
+ pairs_trader: PairTrader,
):
+ # import copy
+ # self.config_ = Config(json_src=copy.deepcopy(config.data()))
+ self.config_ = config
self.pairs_trader_ = pairs_trader
self.trading_pair_ = LiveTradingPair(
config=config,
instruments=self.pairs_trader_.instruments_,
)
+ self.model_data_policy_ = ModelDataPolicy.create(
+ self.config_,
+ is_real_time=True,
+ pair=self.trading_pair_,
+ )
+ assert (
+ self.model_data_policy_ is not None
+ ), f"{self.fname()}: Unable to create ModelDataPolicy"
+
self.predictions_df_ = pd.DataFrame()
self.trading_signals_df_ = pd.DataFrame()
- # self.book_ = book
-
- import copy
-
- # modified config must be passed to PtMarketData
- self.config_ = Config(json_src=copy.deepcopy(config.data()))
self.instruments_ = self.pairs_trader_.instruments_
@@ -71,25 +77,27 @@ class PtLiveStrategy(NamedObject):
async def _on_config(self) -> None:
self.interval_sec_ = self.config_.get_value("interval_sec", 0)
+ assert self.interval_sec_ > 0, "interval_sec cannot be 0"
self.history_depth_sec_ = (
self.config_.get_value("history_depth_hours", 0) * SecPerHour
)
+ assert self.history_depth_sec_ > 0, "history_depth_hours cannot be 0"
await self.pairs_trader_.subscribe_md()
self.open_threshold_ = self.config_.get_value(
- "dis-equilibrium_open_trshld", 0.0
+ "model/disequilibrium/open_trshld", 0.0
)
self.close_threshold_ = self.config_.get_value(
- "dis-equilibrium_close_trshld", 0.0
+ "model/disequilibrium/close_trshld", 0.0
)
assert (
self.open_threshold_ > 0
- ), "dis-equilibrium_open_trshld must be greater than 0"
+ ), "disequilibrium/open_trshld must be greater than 0"
assert (
self.close_threshold_ > 0
- ), "dis-equilibrium_close_trshld must be greater than 0"
+ ), "disequilibrium/close_trshld must be greater than 0"
def __repr__(self) -> str:
return f"{self.classname()}: trading_pair={self.trading_pair_}, mdp={self.model_data_policy_.__class__.__name__}, "
@@ -106,16 +114,8 @@ class PtLiveStrategy(NamedObject):
return
self.trading_pair_.market_data_ = market_data_df
- self.model_data_policy_ = ModelDataPolicy.create(
- self.config_,
- is_real_time=True,
- pair=self.trading_pair_,
- mkt_data=market_data_df,
- )
- assert (
- self.model_data_policy_ is not None
- ), f"{self.fname()}: Unable to create ModelDataPolicy"
+ Log.info(f"{self.fname()}: Running prediction for pair: {self.trading_pair_}")
prediction = self.trading_pair_.run(
market_data_df, self.model_data_policy_.advance()
)
@@ -132,13 +132,16 @@ class PtLiveStrategy(NamedObject):
await self._send_trading_instructions(trading_instructions)
def _is_md_actual(self, hist_aggr: List[MdTradesAggregate]) -> bool:
+ curr_ns = current_nanoseconds()
LAG_THRESHOLD = 5 * NanoPerSec
if len(hist_aggr) == 0:
Log.warning(f"{self.fname()} list of aggregates IS EMPTY")
return False
# MAYBE check market data length
- if current_nanoseconds() - hist_aggr[-1].time_ns_ > LAG_THRESHOLD:
+ lag_ns = curr_ns - hist_aggr[-1].time_ns_
+ if lag_ns > LAG_THRESHOLD:
+ Log.warning(f"{self.fname()} {hist_aggr[-1].exch_inst_.details_short()} Lagging {int(lag_ns/NanoPerSec)} seconds")
return False
return True
diff --git a/lib/pt_strategy/model_data_policy.py b/lib/pt_strategy/model_data_policy.py
index b8b299c..db70daa 100644
--- a/lib/pt_strategy/model_data_policy.py
+++ b/lib/pt_strategy/model_data_policy.py
@@ -25,7 +25,7 @@ class ModelDataPolicy(ABC):
def __init__(self, config: Config, *args: Any, **kwargs: Any):
self.config_ = config
self.current_data_params_ = DataWindowParams(
- training_size_=config.get_value("training_size", 120),
+ training_size_=config.get_value("model/training_size", 120),
training_start_index_=0,
)
self.count_ = 0
@@ -34,14 +34,15 @@ class ModelDataPolicy(ABC):
@abstractmethod
def advance(self, mkt_data_df: Optional[pd.DataFrame] = None) -> DataWindowParams:
self.count_ += 1
- print(self.count_, end="\r")
+ if not self.is_real_time_:
+ print(self.count_, end="\r")
return self.current_data_params_
@staticmethod
def create(config: Config, *args: Any, **kwargs: Any) -> ModelDataPolicy:
import importlib
- model_data_policy_class_name = config.get_value("model_data_policy_class", None)
+ model_data_policy_class_name = config.get_value("model/model_data_policy_class", None)
assert model_data_policy_class_name is not None
module_name, class_name = model_data_policy_class_name.rsplit(".", 1)
module = importlib.import_module(module_name)
@@ -59,7 +60,9 @@ class RollingWindowDataPolicy(ModelDataPolicy):
def advance(self, mkt_data_df: Optional[pd.DataFrame] = None) -> DataWindowParams:
super().advance(mkt_data_df)
if self.is_real_time_:
- self.current_data_params_.training_start_index_ = -self.current_data_params_.training_size_
+ self.current_data_params_.training_start_index_ = 0
+ if mkt_data_df and len(mkt_data_df) > self.curren_data_params_.training_size_:
+ self.current_data_params_.training_start_index_ = -self.curren_data_params_.training_size_
else:
self.current_data_params_.training_start_index_ += 1
return self.current_data_params_
@@ -79,11 +82,10 @@ class OptimizedWndDataPolicy(ModelDataPolicy, ABC):
assert (
kwargs.get("pair") is not None
), "pair must be provided"
- assert (
- "min_training_size" in config.data() and "max_training_size" in config.data()
- ), "min_training_size and max_training_size must be provided"
- self.min_training_size_ = cast(int, config.get_value("min_training_size"))
- self.max_training_size_ = cast(int, config.get_value("max_training_size"))
+ assert (config.key_exists("model/max_training_size") and config.key_exists("model/min_training_size")
+ ), "min_training_size and max_training_size must be provided"
+ self.min_training_size_ = cast(int, config.get_value("model/min_training_size"))
+ self.max_training_size_ = cast(int, config.get_value("model/max_training_size"))
from pairs_trading.lib.pt_strategy.trading_pair import TradingPair
self.pair_ = cast(TradingPair, kwargs.get("pair"))
diff --git a/lib/pt_strategy/pt_market_data.py b/lib/pt_strategy/pt_market_data.py
index e56da16..7e45c9e 100644
--- a/lib/pt_strategy/pt_market_data.py
+++ b/lib/pt_strategy/pt_market_data.py
@@ -30,7 +30,7 @@ class PtMarketData(NamedObject, ABC):
self.config_ = config
self.origin_mkt_data_df_ = pd.DataFrame()
self.market_data_df_ = pd.DataFrame()
- self.stat_model_price_ = self.config_.get_value("stat_model_price")
+ self.stat_model_price_ = self.config_.get_value("model/stat_model_price")
self.instruments_ = instruments
assert len(self.instruments_) > 0, "No instruments found in config"
diff --git a/lib/pt_strategy/pt_model.py b/lib/pt_strategy/pt_model.py
index 45a225c..a96e131 100644
--- a/lib/pt_strategy/pt_model.py
+++ b/lib/pt_strategy/pt_model.py
@@ -19,7 +19,7 @@ class PairsTradingModel(ABC):
def create(config: Config) -> PairsTradingModel:
import importlib
- model_class_name = config.get_value("model_class", None)
+ model_class_name = config.get_value("model/model_class", None)
assert model_class_name is not None
module_name, class_name = model_class_name.rsplit(".", 1)
module = importlib.import_module(module_name)
diff --git a/lib/pt_strategy/research_strategy.py b/lib/pt_strategy/research_strategy.py
index 670b612..d23f4b6 100644
--- a/lib/pt_strategy/research_strategy.py
+++ b/lib/pt_strategy/research_strategy.py
@@ -95,8 +95,8 @@ class PtResearchStrategy:
pair = self.trading_pair_
trades = None
- open_threshold = self.config_.get_value("dis-equilibrium_open_trshld")
- close_threshold = self.config_.get_value("dis-equilibrium_close_trshld")
+ open_threshold = self.config_.get_value("model/disequilibrium/open_trshld")
+ close_threshold = self.config_.get_value("model/disequilibrium/close_trshld")
scaled_disequilibrium = prediction.scaled_disequilibrium_
abs_scaled_disequilibrium = abs(scaled_disequilibrium)
diff --git a/lib/pt_strategy/trading_pair.py b/lib/pt_strategy/trading_pair.py
index a854616..0e1a96c 100644
--- a/lib/pt_strategy/trading_pair.py
+++ b/lib/pt_strategy/trading_pair.py
@@ -50,11 +50,11 @@ class TradingPair(NamedObject, ABC):
self.instruments_ = instruments
self.instruments_[0].user_data_["symbol"] = instruments[0].instrument_id().split("-", 1)[1]
self.instruments_[1].user_data_["symbol"] = instruments[1].instrument_id().split("-", 1)[1]
+ self.stat_model_price_ = config.get_value("model/stat_model_price")
def run(self, market_data: pd.DataFrame, data_params: DataWindowParams) -> Prediction: # type: ignore[assignment]
self.market_data_ = market_data[
- data_params.training_start_index_ : data_params.training_start_index_
- + data_params.training_size_
+ data_params.training_start_index_ : data_params.training_start_index_ + data_params.training_size_
]
return self.model_.predict(pair=self)
@@ -93,7 +93,6 @@ class ResearchTradingPair(TradingPair):
assert len(instruments) == 2, "Trading pair must have exactly 2 instruments"
super().__init__(config=config, instruments=instruments)
- self.stat_model_price_ = config.get_value("stat_model_price")
self.user_data_ = {
"state": PairState.INITIAL,
}
diff --git a/lib/tools/viz/viz_trades.py b/lib/tools/viz/viz_trades.py
index 4fb99b4..2704800 100644
--- a/lib/tools/viz/viz_trades.py
+++ b/lib/tools/viz/viz_trades.py
@@ -105,8 +105,8 @@ def visualize_trades(strategy: PtResearchStrategy, results: PairResearchResult,
type="line",
x0=timeline_df['tstamp'].min(),
x1=timeline_df['tstamp'].max(),
- y0=strategy.config_.get_value('dis-equilibrium_open_trshld'),
- y1=strategy.config_.get_value('dis-equilibrium_open_trshld'),
+ y0=strategy.config_.get_value('model/disequilibrium/open_trshld'),
+ y1=strategy.config_.get_value('model/disequilibrium/open_trshld'),
line=dict(color="purple", width=2, dash="dot"),
opacity=0.7,
row=1, col=1
@@ -116,8 +116,8 @@ def visualize_trades(strategy: PtResearchStrategy, results: PairResearchResult,
type="line",
x0=timeline_df['tstamp'].min(),
x1=timeline_df['tstamp'].max(),
- y0=-strategy.config_.get_value('dis-equilibrium_open_trshld'),
- y1=-strategy.config_.get_value('dis-equilibrium_open_trshld'),
+ y0=-strategy.config_.get_value('model/disequilibrium/open_trshld'),
+ y1=-strategy.config_.get_value('model/disequilibrium/open_trshld'),
line=dict(color="purple", width=2, dash="dot"),
opacity=0.7,
row=1, col=1
@@ -127,8 +127,8 @@ def visualize_trades(strategy: PtResearchStrategy, results: PairResearchResult,
type="line",
x0=timeline_df['tstamp'].min(),
x1=timeline_df['tstamp'].max(),
- y0=strategy.config_.get_value('dis-equilibrium_close_trshld'),
- y1=strategy.config_.get_value('dis-equilibrium_close_trshld'),
+ y0=strategy.config_.get_value('model/disequilibrium/close_trshld'),
+ y1=strategy.config_.get_value('model/disequilibrium/close_trshld'),
line=dict(color="brown", width=2, dash="dot"),
opacity=0.7,
row=1, col=1
@@ -138,8 +138,8 @@ def visualize_trades(strategy: PtResearchStrategy, results: PairResearchResult,
type="line",
x0=timeline_df['tstamp'].min(),
x1=timeline_df['tstamp'].max(),
- y0=-strategy.config_.get_value('dis-equilibrium_close_trshld'),
- y1=-strategy.config_.get_value('dis-equilibrium_close_trshld'),
+ y0=-strategy.config_.get_value('model/disequilibrium/close_trshld'),
+ y1=-strategy.config_.get_value('model/disequilibrium/close_trshld'),
line=dict(color="brown", width=2, dash="dot"),
opacity=0.7,
row=1, col=1
diff --git a/research/notebooks/pair_trading_test.ipynb b/research/notebooks/pair_trading_test.ipynb
index 1fa1980..ac125c9 100644
--- a/research/notebooks/pair_trading_test.ipynb
+++ b/research/notebooks/pair_trading_test.ipynb
@@ -14,7 +14,7 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
@@ -45,7 +45,11 @@
"ROOT_DIR = \"/home/oleg/develop/pairs_trading\"\n",
"os.chdir(ROOT_DIR)\n",
"\n",
- "CONFIG_FILE = f\"{ROOT_DIR}/configuration/vecm-opt.cfg\"\n",
+ "# CONFIG_FILE = f\"{ROOT_DIR}/configuration/vecm-opt.cfg\"\n",
+ "\n",
+ "os.environ[\"CONFIG_SERVICE\"] = \"cloud16.cvtt.vpn:6789\"\n",
+ "os.environ[\"MODEL_CONFIG\"] = \"vecm\"\n",
+ "CONFIG_FILE = f\"http://cloud16.cvtt.vpn:6789/apps/pairs_trading/backtest\"\n",
"\n",
"# Date for data file selection (format: YYYYMMDD)\n",
"TRADING_DATE = \"20250910\" # Change this to your desired date\n",
@@ -123,7 +127,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 42,
"metadata": {},
"outputs": [],
"source": [
@@ -168,7 +172,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 43,
"metadata": {},
"outputs": [],
"source": [
@@ -183,32 +187,7 @@
"def load_config_from_file() -> Optional[Dict]:\n",
" global DB_TABLE_NAME\n",
" global PT_BT_CONFIG\n",
- " \"\"\"Load configuration from configuration files using HJSON\"\"\"\n",
- " config_file = CONFIG_FILE\n",
- " config = None\n",
- " \n",
- " try:\n",
- " with open(config_file, 'r') as f:\n",
- " # HJSON handles comments, trailing commas, and other human-friendly features\n",
- " config = hjson.load(f)\n",
- " \n",
- " # Convert relative paths to absolute paths from notebook perspective\n",
- " if 'data_directory' in config:\n",
- " data_dir = config['data_directory']\n",
- " if data_dir.startswith('./'):\n",
- " # Convert relative path to absolute path from notebook's perspective\n",
- " config['data_directory'] = os.path.abspath(f\"../../{data_dir[2:]}\")\n",
- " \n",
- " \n",
- " except FileNotFoundError:\n",
- " print(f\"Configuration file not found: {config_file}\")\n",
- " except hjson.HjsonDecodeError as e:\n",
- " print(f\"HJSON parsing error in {config_file}: {e}\")\n",
- " except Exception as e:\n",
- " print(f\"Unexpected error loading config from {config_file}: {e}\")\n",
- " \n",
- " assert config is not None\n",
- " PT_BT_CONFIG = Config(config)\n",
+ " PT_BT_CONFIG = Config(json_src=CONFIG_FILE)\n",
" DB_TABLE_NAME = PT_BT_CONFIG.get_value(\"market_data_loading\")[INSTRUMENTS[\"A\"].user_data_[\"instrument_type\"]][\"db_table_name\"]\n",
"\n",
"# -------- DEBUG \n",
@@ -225,7 +204,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 44,
"metadata": {},
"outputs": [],
"source": [
@@ -256,8 +235,8 @@
"\n",
" if PT_BT_CONFIG:\n",
" print(f\"✓ Successfully loaded configuration\")\n",
- " print(f\" Open threshold: {PT_BT_CONFIG.get_value('dis-equilibrium_open_trshld')}\")\n",
- " print(f\" Close threshold: {PT_BT_CONFIG.get_value('dis-equilibrium_close_trshld')}\")\n",
+ " print(f\" Open threshold: {PT_BT_CONFIG.get_value('model/disequilibrium/open_trshld')}\")\n",
+ " print(f\" Close threshold: {PT_BT_CONFIG.get_value('model/disequilibrium/close_trshld')}\")\n",
" \n",
" # Automatically construct data file name based on date and config type\n",
" DATA_FILE = f\"{TRADING_DATE}.mktdata.ohlcv.db\"\n",
@@ -304,7 +283,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 45,
"metadata": {},
"outputs": [],
"source": [
@@ -367,7 +346,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
@@ -392,7 +371,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 47,
"metadata": {},
"outputs": [],
"source": [
@@ -410,7 +389,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 48,
"metadata": {},
"outputs": [
{
@@ -420,109 +399,250 @@
"Setup complete!\n",
"Current working directory: /home/oleg\n",
"Trading Parameters:\n",
- " Configuration: /home/oleg/develop/pairs_trading/configuration/vecm-opt.cfg\n",
+ " Configuration: http://cloud16.cvtt.vpn:6789/apps/pairs_trading/backtest\n",
" Symbol A: ADA-USDT\n",
" Symbol B: SOL-USDT\n",
" Trading Date: 2025-09-10\n",
"\n",
- "Loading /home/oleg/develop/pairs_trading/configuration/vecm-opt.cfg configuration using HJSON...\n",
+ "Loading http://cloud16.cvtt.vpn:6789/apps/pairs_trading/backtest configuration using HJSON...\n",
"✓ Successfully loaded configuration\n",
- " Open threshold: 1.75\n",
- " Close threshold: 1\n",
- "[2026-01-11 18:12:57.365998] INFO Config.set_value(): NEW Config parameter [datafiles] is set to [['./data/crypto/20250910.mktdata.ohlcv.db']]\n",
+ " Open threshold: 0.75\n",
+ " Close threshold: 0.5\n",
+ "[2026-01-12 18:27:14.410259] INFO Config.set_value(): NEW Config parameter [datafiles] is set to [['./data/crypto/20250910.mktdata.ohlcv.db']]\n",
"\n",
"Data Configuration:\n",
" Data File: 20250910.mktdata.ohlcv.db\n",
- " ✓ Data file found: ./data/crypto/20250910.mktdata.ohlcv.db\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "Log is not instantiated. Using Default Log\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[2026-01-11 18:12:58.573312] INFO Config.set_value(): NEW Config parameter [instruments] is set to [[[instrument_id_=PAIR-ADA-USDT][base_asset_id_=][quote_asset_id_=USDT][price_tick_=0.0][quantity_precision_=0.0001][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][specifics_={}][no_loss_proc_queue_=EventProcessQueue:BNBSPOT_PAIR-ADA-USDT][book_top_proc_queue_=EventProcessQueue:TOP_BNBSPOT_PAIR-ADA-USDT][book_depth_proc_queue_=EventProcessQueue:DEPTH_BNBSPOT_PAIR-ADA-USDT][mkt_data_=ExchInstMarketData Object][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'ADA-USDT'}][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][price_tick_=0.0][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'ADA-USDT'}], [instrument_id_=PAIR-SOL-USDT][base_asset_id_=][quote_asset_id_=USDT][price_tick_=0.0][quantity_precision_=0.0001][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][specifics_={}][no_loss_proc_queue_=EventProcessQueue:BNBSPOT_PAIR-SOL-USDT][book_top_proc_queue_=EventProcessQueue:TOP_BNBSPOT_PAIR-SOL-USDT][book_depth_proc_queue_=EventProcessQueue:DEPTH_BNBSPOT_PAIR-SOL-USDT][mkt_data_=ExchInstMarketData Object][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'SOL-USDT'}][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][price_tick_=0.0][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'SOL-USDT'}]]]\n",
- "OPEN_TRADES: 2025-09-10 13:50:00 scaled_disequilibrium=np.float64(1.9292245624262738)\n",
+ " ✓ Data file found: ./data/crypto/20250910.mktdata.ohlcv.db\n",
+ "[2026-01-12 18:27:14.415723] INFO Config.set_value(): NEW Config parameter [instruments] is set to [[[instrument_id_=PAIR-ADA-USDT][base_asset_id_=][quote_asset_id_=USDT][price_tick_=0.0][quantity_precision_=0.0001][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][specifics_={}][no_loss_proc_queue_=EventProcessQueue:BNBSPOT_PAIR-ADA-USDT][book_top_proc_queue_=EventProcessQueue:TOP_BNBSPOT_PAIR-ADA-USDT][book_depth_proc_queue_=EventProcessQueue:DEPTH_BNBSPOT_PAIR-ADA-USDT][mkt_data_=ExchInstMarketData Object][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'ADA-USDT'}][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][price_tick_=0.0][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'ADA-USDT'}], [instrument_id_=PAIR-SOL-USDT][base_asset_id_=][quote_asset_id_=USDT][price_tick_=0.0][quantity_precision_=0.0001][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][specifics_={}][no_loss_proc_queue_=EventProcessQueue:BNBSPOT_PAIR-SOL-USDT][book_top_proc_queue_=EventProcessQueue:TOP_BNBSPOT_PAIR-SOL-USDT][book_depth_proc_queue_=EventProcessQueue:DEPTH_BNBSPOT_PAIR-SOL-USDT][mkt_data_=ExchInstMarketData Object][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'SOL-USDT'}][exchange_id_=BNBSPOT][md_symbol_=][trade_symbol_=][contract_code_=][contract_size_=1.0][price_tick_=0.0][user_data_={'instrument_type': 'CRYPTO', 'symbol': 'SOL-USDT'}]]]\n",
+ "OPEN_TRADES: 2025-09-10 13:34:00 scaled_disequilibrium=np.float64(-0.8244846106700531)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 13:50:00 OPEN ADA-USDT SELL 0.892900 0.001712 1.929225 1.929225 OPEN\n",
- "1 2025-09-10 13:50:00 OPEN SOL-USDT BUY 224.156429 0.001712 1.929225 1.929225 OPEN\n",
+ "0 2025-09-10 13:34:00 OPEN ADA-USDT BUY 0.885898 -0.00092 0.824485 -0.824485 OPEN\n",
+ "1 2025-09-10 13:34:00 OPEN SOL-USDT SELL 223.067938 -0.00092 0.824485 -0.824485 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 14:04:00 CLOSE ADA-USDT BUY 0.893018 0.001066 0.859822 0.859822 CLOSE\n",
- "1 2025-09-10 14:04:00 CLOSE SOL-USDT SELL 224.700367 0.001066 0.859822 0.859822 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 14:08:00 scaled_disequilibrium=np.float64(1.7714496652478648)\n",
+ "0 2025-09-10 13:35:00 CLOSE ADA-USDT SELL 0.885872 -0.000031 0.299233 -0.299233 CLOSE\n",
+ "1 2025-09-10 13:35:00 CLOSE SOL-USDT BUY 222.988969 -0.000031 0.299233 -0.299233 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 13:39:00 scaled_disequilibrium=np.float64(-0.7633615363869128)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 14:08:00 OPEN ADA-USDT SELL 0.894122 0.002284 1.77145 1.77145 OPEN\n",
- "1 2025-09-10 14:08:00 OPEN SOL-USDT BUY 224.398883 0.002284 1.77145 1.77145 OPEN\n",
+ "0 2025-09-10 13:39:00 OPEN ADA-USDT BUY 0.887357 -0.000568 0.763362 -0.763362 OPEN\n",
+ "1 2025-09-10 13:39:00 OPEN SOL-USDT SELL 223.740538 -0.000568 0.763362 -0.763362 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 14:39:00 CLOSE ADA-USDT BUY 0.887826 0.00086 0.719625 0.719625 CLOSE\n",
- "1 2025-09-10 14:39:00 CLOSE SOL-USDT SELL 222.863446 0.00086 0.719625 0.719625 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 15:36:00 scaled_disequilibrium=np.float64(-1.892487041689297)\n",
+ "0 2025-09-10 13:42:00 CLOSE ADA-USDT SELL 0.890511 -0.000021 0.446956 -0.446956 CLOSE\n",
+ "1 2025-09-10 13:42:00 CLOSE SOL-USDT BUY 224.181397 -0.000021 0.446956 -0.446956 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 13:50:00 scaled_disequilibrium=np.float64(1.0412192401772844)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 15:36:00 OPEN ADA-USDT BUY 0.887343 -0.001469 1.892487 -1.892487 OPEN\n",
- "1 2025-09-10 15:36:00 OPEN SOL-USDT SELL 223.411486 -0.001469 1.892487 -1.892487 OPEN\n",
+ "0 2025-09-10 13:50:00 OPEN ADA-USDT SELL 0.892900 0.002494 1.041219 1.041219 OPEN\n",
+ "1 2025-09-10 13:50:00 OPEN SOL-USDT BUY 224.156429 0.002494 1.041219 1.041219 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 15:47:00 CLOSE ADA-USDT SELL 0.889067 0.001095 0.532319 0.532319 CLOSE\n",
- "1 2025-09-10 15:47:00 CLOSE SOL-USDT BUY 223.034736 0.001095 0.532319 0.532319 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 16:12:00 scaled_disequilibrium=np.float64(-2.232955950237203)\n",
+ "0 2025-09-10 13:58:00 CLOSE ADA-USDT BUY 0.891480 0.000305 0.352027 0.352027 CLOSE\n",
+ "1 2025-09-10 13:58:00 CLOSE SOL-USDT SELL 224.214504 0.000305 0.352027 0.352027 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 14:03:00 scaled_disequilibrium=np.float64(0.96596660932689)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 16:12:00 OPEN ADA-USDT BUY 0.883518 -0.002233 2.232956 -2.232956 OPEN\n",
- "1 2025-09-10 16:12:00 OPEN SOL-USDT SELL 222.807572 -0.002233 2.232956 -2.232956 OPEN\n",
+ "0 2025-09-10 14:03:00 OPEN ADA-USDT SELL 0.891702 0.00145 0.965967 0.965967 OPEN\n",
+ "1 2025-09-10 14:03:00 OPEN SOL-USDT BUY 224.400408 0.00145 0.965967 0.965967 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 16:31:00 CLOSE ADA-USDT SELL 0.883613 -0.000878 0.923953 -0.923953 CLOSE\n",
- "1 2025-09-10 16:31:00 CLOSE SOL-USDT BUY 222.768019 -0.000878 0.923953 -0.923953 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 17:08:00 scaled_disequilibrium=np.float64(1.9116229424018232)\n",
+ "0 2025-09-10 14:04:00 CLOSE ADA-USDT BUY 0.893018 0.000619 0.426978 0.426978 CLOSE\n",
+ "1 2025-09-10 14:04:00 CLOSE SOL-USDT SELL 224.700367 0.000619 0.426978 0.426978 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 14:08:00 scaled_disequilibrium=np.float64(1.1383549284664198)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 17:08:00 OPEN ADA-USDT SELL 0.892403 0.002847 1.911623 1.911623 OPEN\n",
- "1 2025-09-10 17:08:00 OPEN SOL-USDT BUY 223.490975 0.002847 1.911623 1.911623 OPEN\n",
+ "0 2025-09-10 14:08:00 OPEN ADA-USDT SELL 0.894122 0.001932 1.138355 1.138355 OPEN\n",
+ "1 2025-09-10 14:08:00 OPEN SOL-USDT BUY 224.398883 0.001932 1.138355 1.138355 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 17:26:00 CLOSE ADA-USDT BUY 0.886084 0.001716 0.822214 0.822214 CLOSE\n",
- "1 2025-09-10 17:26:00 CLOSE SOL-USDT SELL 222.226735 0.001716 0.822214 0.822214 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 18:36:00 scaled_disequilibrium=np.float64(-1.854279101806788)\n",
+ "0 2025-09-10 14:45:00 CLOSE ADA-USDT BUY 0.888666 0.000285 0.440307 0.440307 CLOSE\n",
+ "1 2025-09-10 14:45:00 CLOSE SOL-USDT SELL 223.206538 0.000285 0.440307 0.440307 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 14:48:00 scaled_disequilibrium=np.float64(0.7558232059552493)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 18:36:00 OPEN ADA-USDT BUY 0.883996 -0.002391 1.854279 -1.854279 OPEN\n",
- "1 2025-09-10 18:36:00 OPEN SOL-USDT SELL 222.436718 -0.002391 1.854279 -1.854279 OPEN\n",
+ "0 2025-09-10 14:48:00 OPEN ADA-USDT SELL 0.888845 0.001053 0.755823 0.755823 OPEN\n",
+ "1 2025-09-10 14:48:00 OPEN SOL-USDT BUY 223.167033 0.001053 0.755823 0.755823 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 18:44:00 CLOSE ADA-USDT SELL 0.882792 -0.001566 0.613392 -0.613392 CLOSE\n",
- "1 2025-09-10 18:44:00 CLOSE SOL-USDT BUY 222.285842 -0.001566 0.613392 -0.613392 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 18:59:00 scaled_disequilibrium=np.float64(-2.197312757794817)\n",
+ "0 2025-09-10 14:56:00 CLOSE ADA-USDT BUY 0.887105 0.000568 0.499517 0.499517 CLOSE\n",
+ "1 2025-09-10 14:56:00 CLOSE SOL-USDT SELL 222.936840 0.000568 0.499517 0.499517 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 15:04:00 scaled_disequilibrium=np.float64(0.7751717608551579)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 18:59:00 OPEN ADA-USDT BUY 0.882966 -0.003766 2.197313 -2.197313 OPEN\n",
- "1 2025-09-10 18:59:00 OPEN SOL-USDT SELL 222.784979 -0.003766 2.197313 -2.197313 OPEN\n",
+ "0 2025-09-10 15:04:00 OPEN ADA-USDT SELL 0.889064 0.001197 0.775172 0.775172 OPEN\n",
+ "1 2025-09-10 15:04:00 OPEN SOL-USDT BUY 223.396583 0.001197 0.775172 0.775172 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 19:32:00 CLOSE ADA-USDT SELL 0.877003 0.001427 0.903187 -0.903187 CLOSE\n",
- "1 2025-09-10 19:32:00 CLOSE SOL-USDT BUY 221.177898 0.001427 0.903187 -0.903187 CLOSE\n",
- "OPEN_TRADES: 2025-09-10 20:56:00 scaled_disequilibrium=np.float64(-1.8300787048118858)\n",
+ "0 2025-09-10 15:05:00 CLOSE ADA-USDT BUY 0.889646 0.000538 0.379905 0.379905 CLOSE\n",
+ "1 2025-09-10 15:05:00 CLOSE SOL-USDT SELL 223.749132 0.000538 0.379905 0.379905 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 15:30:00 scaled_disequilibrium=np.float64(-0.828684704417004)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 15:30:00 OPEN ADA-USDT BUY 0.88759 -0.001495 0.828685 -0.828685 OPEN\n",
+ "1 2025-09-10 15:30:00 OPEN SOL-USDT SELL 223.33506 -0.001495 0.828685 -0.828685 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 15:47:00 CLOSE ADA-USDT SELL 0.889067 0.00029 0.300166 0.300166 CLOSE\n",
+ "1 2025-09-10 15:47:00 CLOSE SOL-USDT BUY 223.034736 0.00029 0.300166 0.300166 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 15:52:00 scaled_disequilibrium=np.float64(0.8452577570204922)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 15:52:00 OPEN ADA-USDT SELL 0.88942 0.001042 0.845258 0.845258 OPEN\n",
+ "1 2025-09-10 15:52:00 OPEN SOL-USDT BUY 223.19371 0.001042 0.845258 0.845258 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 15:54:00 CLOSE ADA-USDT BUY 0.889818 0.000072 0.08541 0.08541 CLOSE\n",
+ "1 2025-09-10 15:54:00 CLOSE SOL-USDT SELL 223.413141 0.000072 0.08541 0.08541 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 16:04:00 scaled_disequilibrium=np.float64(-0.7826667283223462)\n",
"OPEN TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 20:56:00 OPEN ADA-USDT BUY 0.879164 -0.001831 1.830079 -1.830079 OPEN\n",
- "1 2025-09-10 20:56:00 OPEN SOL-USDT SELL 222.529393 -0.001831 1.830079 -1.830079 OPEN\n",
+ "0 2025-09-10 16:04:00 OPEN ADA-USDT BUY 0.887397 -0.000908 0.782667 -0.782667 OPEN\n",
+ "1 2025-09-10 16:04:00 OPEN SOL-USDT SELL 222.866369 -0.000908 0.782667 -0.782667 OPEN\n",
"CLOSE TRADES:\n",
" time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 21:03:00 CLOSE ADA-USDT SELL 0.882105 -0.000235 0.004402 0.004402 CLOSE\n",
- "1 2025-09-10 21:03:00 CLOSE SOL-USDT BUY 222.892964 -0.000235 0.004402 0.004402 CLOSE\n",
- "538\n",
+ "0 2025-09-10 16:05:00 CLOSE ADA-USDT SELL 0.887639 0.000344 0.186446 0.186446 CLOSE\n",
+ "1 2025-09-10 16:05:00 CLOSE SOL-USDT BUY 222.874434 0.000344 0.186446 0.186446 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 16:10:00 scaled_disequilibrium=np.float64(-1.1299698765342532)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:10:00 OPEN ADA-USDT BUY 0.884660 -0.00116 1.12997 -1.12997 OPEN\n",
+ "1 2025-09-10 16:10:00 OPEN SOL-USDT SELL 222.844778 -0.00116 1.12997 -1.12997 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:41:00 CLOSE ADA-USDT SELL 0.884926 -0.000134 0.467464 -0.467464 CLOSE\n",
+ "1 2025-09-10 16:41:00 CLOSE SOL-USDT BUY 222.892523 -0.000134 0.467464 -0.467464 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 16:43:00 scaled_disequilibrium=np.float64(-0.7692304634456318)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:43:00 OPEN ADA-USDT BUY 0.884720 -0.000617 0.76923 -0.76923 OPEN\n",
+ "1 2025-09-10 16:43:00 OPEN SOL-USDT SELL 222.777794 -0.000617 0.76923 -0.76923 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:46:00 CLOSE ADA-USDT SELL 0.884994 -0.000156 0.399989 -0.399989 CLOSE\n",
+ "1 2025-09-10 16:46:00 CLOSE SOL-USDT BUY 223.088812 -0.000156 0.399989 -0.399989 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 16:47:00 scaled_disequilibrium=np.float64(-0.7681939842533855)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:47:00 OPEN ADA-USDT BUY 0.885569 -0.000679 0.768194 -0.768194 OPEN\n",
+ "1 2025-09-10 16:47:00 OPEN SOL-USDT SELL 223.083201 -0.000679 0.768194 -0.768194 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 16:49:00 CLOSE ADA-USDT SELL 0.886788 0.000077 0.280038 -0.280038 CLOSE\n",
+ "1 2025-09-10 16:49:00 CLOSE SOL-USDT BUY 223.091338 0.000077 0.280038 -0.280038 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 17:00:00 scaled_disequilibrium=np.float64(0.9138353726314972)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 17:00:00 OPEN ADA-USDT SELL 0.890556 0.001519 0.913835 0.913835 OPEN\n",
+ "1 2025-09-10 17:00:00 OPEN SOL-USDT BUY 223.834040 0.001519 0.913835 0.913835 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 17:02:00 CLOSE ADA-USDT BUY 0.890777 0.000451 0.140338 0.140338 CLOSE\n",
+ "1 2025-09-10 17:02:00 CLOSE SOL-USDT SELL 223.794948 0.000451 0.140338 0.140338 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 17:04:00 scaled_disequilibrium=np.float64(0.8694161409926541)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 17:04:00 OPEN ADA-USDT SELL 0.890932 0.001273 0.869416 0.869416 OPEN\n",
+ "1 2025-09-10 17:04:00 OPEN SOL-USDT BUY 223.807847 0.001273 0.869416 0.869416 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 17:50:00 CLOSE ADA-USDT BUY 0.887723 0.001537 0.436893 0.436893 CLOSE\n",
+ "1 2025-09-10 17:50:00 CLOSE SOL-USDT SELL 222.927983 0.001537 0.436893 0.436893 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 17:57:00 scaled_disequilibrium=np.float64(0.7626447046885739)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 17:57:00 OPEN ADA-USDT SELL 0.887653 0.001937 0.762645 0.762645 OPEN\n",
+ "1 2025-09-10 17:57:00 OPEN SOL-USDT BUY 222.575944 0.001937 0.762645 0.762645 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:01:00 CLOSE ADA-USDT BUY 0.887665 0.00091 0.454978 0.454978 CLOSE\n",
+ "1 2025-09-10 18:01:00 CLOSE SOL-USDT SELL 222.885580 0.00091 0.454978 0.454978 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 18:05:00 scaled_disequilibrium=np.float64(0.8262829519717096)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:05:00 OPEN ADA-USDT SELL 0.887922 0.001621 0.826283 0.826283 OPEN\n",
+ "1 2025-09-10 18:05:00 OPEN SOL-USDT BUY 222.791989 0.001621 0.826283 0.826283 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:08:00 CLOSE ADA-USDT BUY 0.886799 0.000663 0.499959 0.499959 CLOSE\n",
+ "1 2025-09-10 18:08:00 CLOSE SOL-USDT SELL 222.676496 0.000663 0.499959 0.499959 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 18:12:00 scaled_disequilibrium=np.float64(0.7664374593863723)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:12:00 OPEN ADA-USDT SELL 0.886269 0.000673 0.766437 0.766437 OPEN\n",
+ "1 2025-09-10 18:12:00 OPEN SOL-USDT BUY 222.344492 0.000673 0.766437 0.766437 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:15:00 CLOSE ADA-USDT BUY 0.885385 -0.000091 0.425496 0.425496 CLOSE\n",
+ "1 2025-09-10 18:15:00 CLOSE SOL-USDT SELL 222.283748 -0.000091 0.425496 0.425496 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 18:36:00 scaled_disequilibrium=np.float64(-1.4072429099710522)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 18:36:00 OPEN ADA-USDT BUY 0.883996 -0.002189 1.407243 -1.407243 OPEN\n",
+ "1 2025-09-10 18:36:00 OPEN SOL-USDT SELL 222.436718 -0.002189 1.407243 -1.407243 OPEN\n",
+ "STOP LOSS: -0.5002537965329967\n",
+ "STOP CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 19:10:00 CLOSE ADA-USDT SELL 0.880598 0.0 0.0 0.0 CLOSE_STOP_LOSS\n",
+ "1 2025-09-10 19:10:00 CLOSE SOL-USDT BUY 222.611141 0.0 0.0 0.0 CLOSE_STOP_LOSS\n",
+ "OPEN_TRADES: 2025-09-10 19:11:00 scaled_disequilibrium=np.float64(-2.8588493049252)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 19:11:00 OPEN ADA-USDT BUY 0.879860 -0.02348 2.858849 -2.858849 OPEN\n",
+ "1 2025-09-10 19:11:00 OPEN SOL-USDT SELL 222.413615 -0.02348 2.858849 -2.858849 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 20:00:00 CLOSE ADA-USDT SELL 0.878445 0.002158 0.205766 -0.205766 CLOSE\n",
+ "1 2025-09-10 20:00:00 CLOSE SOL-USDT BUY 221.354650 0.002158 0.205766 -0.205766 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 20:37:00 scaled_disequilibrium=np.float64(1.0058726769192805)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 20:37:00 OPEN ADA-USDT SELL 0.879982 0.001724 1.005873 1.005873 OPEN\n",
+ "1 2025-09-10 20:37:00 OPEN SOL-USDT BUY 221.760958 0.001724 1.005873 1.005873 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 20:45:00 CLOSE ADA-USDT BUY 0.880463 0.00055 0.308519 0.308519 CLOSE\n",
+ "1 2025-09-10 20:45:00 CLOSE SOL-USDT SELL 222.177482 0.00055 0.308519 0.308519 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 20:54:00 scaled_disequilibrium=np.float64(-0.945619331271326)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 20:54:00 OPEN ADA-USDT BUY 0.879453 -0.000924 0.945619 -0.945619 OPEN\n",
+ "1 2025-09-10 20:54:00 OPEN SOL-USDT SELL 222.448781 -0.000924 0.945619 -0.945619 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 21:03:00 CLOSE ADA-USDT SELL 0.882105 0.000423 0.313357 0.313357 CLOSE\n",
+ "1 2025-09-10 21:03:00 CLOSE SOL-USDT BUY 222.892964 0.000423 0.313357 0.313357 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 21:12:00 scaled_disequilibrium=np.float64(1.5305708453509306)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 21:12:00 OPEN ADA-USDT SELL 0.884020 0.001592 1.530571 1.530571 OPEN\n",
+ "1 2025-09-10 21:12:00 OPEN SOL-USDT BUY 222.772128 0.001592 1.530571 1.530571 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 21:17:00 CLOSE ADA-USDT BUY 0.883344 0.000423 0.422399 0.422399 CLOSE\n",
+ "1 2025-09-10 21:17:00 CLOSE SOL-USDT SELL 222.933113 0.000423 0.422399 0.422399 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 22:03:00 scaled_disequilibrium=np.float64(0.8040248233221763)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 22:03:00 OPEN ADA-USDT SELL 0.885924 0.000826 0.804025 0.804025 OPEN\n",
+ "1 2025-09-10 22:03:00 OPEN SOL-USDT BUY 223.594840 0.000826 0.804025 0.804025 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 22:05:00 CLOSE ADA-USDT BUY 0.885907 0.000333 0.448001 0.448001 CLOSE\n",
+ "1 2025-09-10 22:05:00 CLOSE SOL-USDT SELL 223.662537 0.000333 0.448001 0.448001 CLOSE\n",
+ "OPEN_TRADES: 2025-09-10 22:16:00 scaled_disequilibrium=np.float64(0.9959689132983114)\n",
+ "OPEN TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 22:16:00 OPEN ADA-USDT SELL 0.887109 0.000233 0.995969 0.995969 OPEN\n",
+ "1 2025-09-10 22:16:00 OPEN SOL-USDT BUY 223.720985 0.000233 0.995969 0.995969 OPEN\n",
+ "CLOSE TRADES:\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 22:26:00 CLOSE ADA-USDT BUY 0.885579 0.000042 0.429289 0.429289 CLOSE\n",
+ "1 2025-09-10 22:26:00 CLOSE SOL-USDT SELL 223.676085 0.000042 0.429289 0.429289 CLOSE\n",
+ "539\n",
"Created trading pair: ResearchTradingPair: symbol_a=ADA-USDT, symbol_b=SOL-USDT, model=VECMModel\n",
- "Market data shape: (71, 7)\n",
+ "Market data shape: (120, 7)\n",
"Column names: ['close_ADA-USDT', 'close_SOL-USDT']\n",
"\n",
"Sample data:\n"
@@ -560,54 +680,54 @@
" \n",
"
\n",
" \n",
- " | 587 | \n",
- " 2025-09-10 21:18:00 | \n",
- " 0.8833 | \n",
- " 222.86 | \n",
- " 0.883344 | \n",
- " 222.933113 | \n",
- " 0.883340 | \n",
- " 222.974782 | \n",
+ " 538 | \n",
+ " 2025-09-10 20:29:00 | \n",
+ " 0.8791 | \n",
+ " 222.00 | \n",
+ " 0.879360 | \n",
+ " 222.051406 | \n",
+ " 0.879450 | \n",
+ " 222.000906 | \n",
"
\n",
" \n",
- " | 588 | \n",
- " 2025-09-10 21:19:00 | \n",
- " 0.8832 | \n",
- " 223.04 | \n",
- " 0.883340 | \n",
- " 222.974782 | \n",
- " 0.882884 | \n",
- " 223.022564 | \n",
+ " 539 | \n",
+ " 2025-09-10 20:30:00 | \n",
+ " 0.8799 | \n",
+ " 222.09 | \n",
+ " 0.879450 | \n",
+ " 222.000906 | \n",
+ " 0.879955 | \n",
+ " 222.121269 | \n",
"
\n",
" \n",
- " | 589 | \n",
- " 2025-09-10 21:20:00 | \n",
- " 0.8828 | \n",
- " 223.01 | \n",
- " 0.882884 | \n",
- " 223.022564 | \n",
- " 0.883016 | \n",
- " 222.963271 | \n",
+ " 540 | \n",
+ " 2025-09-10 20:31:00 | \n",
+ " 0.8799 | \n",
+ " 222.11 | \n",
+ " 0.879955 | \n",
+ " 222.121269 | \n",
+ " 0.879290 | \n",
+ " 221.954027 | \n",
"
\n",
" \n",
- " | 590 | \n",
- " 2025-09-10 21:21:00 | \n",
- " 0.8829 | \n",
- " 222.92 | \n",
- " 0.883016 | \n",
- " 222.963271 | \n",
- " 0.882924 | \n",
- " 222.895714 | \n",
+ " 541 | \n",
+ " 2025-09-10 20:32:00 | \n",
+ " 0.8792 | \n",
+ " 221.88 | \n",
+ " 0.879290 | \n",
+ " 221.954027 | \n",
+ " 0.879311 | \n",
+ " 221.812188 | \n",
"
\n",
" \n",
- " | 591 | \n",
- " 2025-09-10 21:22:00 | \n",
- " 0.8830 | \n",
- " 222.86 | \n",
- " 0.882924 | \n",
- " 222.895714 | \n",
- " 0.882534 | \n",
- " 222.882527 | \n",
+ " 542 | \n",
+ " 2025-09-10 20:33:00 | \n",
+ " 0.8791 | \n",
+ " 221.81 | \n",
+ " 0.879311 | \n",
+ " 221.812188 | \n",
+ " 0.878827 | \n",
+ " 221.666779 | \n",
"
\n",
" \n",
"\n",
@@ -615,11 +735,11 @@
],
"text/plain": [
" tstamp close_ADA-USDT close_SOL-USDT vwap_ADA-USDT vwap_SOL-USDT exec_price_ADA-USDT exec_price_SOL-USDT\n",
- "587 2025-09-10 21:18:00 0.8833 222.86 0.883344 222.933113 0.883340 222.974782\n",
- "588 2025-09-10 21:19:00 0.8832 223.04 0.883340 222.974782 0.882884 223.022564\n",
- "589 2025-09-10 21:20:00 0.8828 223.01 0.882884 223.022564 0.883016 222.963271\n",
- "590 2025-09-10 21:21:00 0.8829 222.92 0.883016 222.963271 0.882924 222.895714\n",
- "591 2025-09-10 21:22:00 0.8830 222.86 0.882924 222.895714 0.882534 222.882527"
+ "538 2025-09-10 20:29:00 0.8791 222.00 0.879360 222.051406 0.879450 222.000906\n",
+ "539 2025-09-10 20:30:00 0.8799 222.09 0.879450 222.000906 0.879955 222.121269\n",
+ "540 2025-09-10 20:31:00 0.8799 222.11 0.879955 222.121269 0.879290 221.954027\n",
+ "541 2025-09-10 20:32:00 0.8792 221.88 0.879290 221.954027 0.879311 221.812188\n",
+ "542 2025-09-10 20:33:00 0.8791 221.81 0.879311 221.812188 0.878827 221.666779"
]
},
"metadata": {},
@@ -754,7 +874,7 @@
" Correlation: 0.8707\n",
"\n",
"Created trading pair: ResearchTradingPair: symbol_a=ADA-USDT, symbol_b=SOL-USDT, model=VECMModel\n",
- "Market data shape: (71, 7)\n",
+ "Market data shape: (120, 7)\n",
"Column names: ['close_ADA-USDT', 'close_SOL-USDT']\n"
]
},
@@ -782,42 +902,110 @@
"Timeline range: 2025-09-10 11:30:00 to 2025-09-10 22:29:00\n",
"\n",
"Symbol_A trades:\n",
- " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "0 2025-09-10 13:50:00 OPEN ADA-USDT SELL 0.892900 0.001712 1.929225 1.929225 OPEN\n",
- "2 2025-09-10 14:04:00 CLOSE ADA-USDT BUY 0.893018 0.001066 0.859822 0.859822 CLOSE\n",
- "4 2025-09-10 14:08:00 OPEN ADA-USDT SELL 0.894122 0.002284 1.771450 1.771450 OPEN\n",
- "6 2025-09-10 14:39:00 CLOSE ADA-USDT BUY 0.887826 0.000860 0.719625 0.719625 CLOSE\n",
- "8 2025-09-10 15:36:00 OPEN ADA-USDT BUY 0.887343 -0.001469 1.892487 -1.892487 OPEN\n",
- "10 2025-09-10 15:47:00 CLOSE ADA-USDT SELL 0.889067 0.001095 0.532319 0.532319 CLOSE\n",
- "12 2025-09-10 16:12:00 OPEN ADA-USDT BUY 0.883518 -0.002233 2.232956 -2.232956 OPEN\n",
- "14 2025-09-10 16:31:00 CLOSE ADA-USDT SELL 0.883613 -0.000878 0.923953 -0.923953 CLOSE\n",
- "16 2025-09-10 17:08:00 OPEN ADA-USDT SELL 0.892403 0.002847 1.911623 1.911623 OPEN\n",
- "18 2025-09-10 17:26:00 CLOSE ADA-USDT BUY 0.886084 0.001716 0.822214 0.822214 CLOSE\n",
- "20 2025-09-10 18:36:00 OPEN ADA-USDT BUY 0.883996 -0.002391 1.854279 -1.854279 OPEN\n",
- "22 2025-09-10 18:44:00 CLOSE ADA-USDT SELL 0.882792 -0.001566 0.613392 -0.613392 CLOSE\n",
- "24 2025-09-10 18:59:00 OPEN ADA-USDT BUY 0.882966 -0.003766 2.197313 -2.197313 OPEN\n",
- "26 2025-09-10 19:32:00 CLOSE ADA-USDT SELL 0.877003 0.001427 0.903187 -0.903187 CLOSE\n",
- "28 2025-09-10 20:56:00 OPEN ADA-USDT BUY 0.879164 -0.001831 1.830079 -1.830079 OPEN\n",
- "30 2025-09-10 21:03:00 CLOSE ADA-USDT SELL 0.882105 -0.000235 0.004402 0.004402 CLOSE\n",
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "0 2025-09-10 13:34:00 OPEN ADA-USDT BUY 0.885898 -0.000920 0.824485 -0.824485 OPEN\n",
+ "2 2025-09-10 13:35:00 CLOSE ADA-USDT SELL 0.885872 -0.000031 0.299233 -0.299233 CLOSE\n",
+ "4 2025-09-10 13:39:00 OPEN ADA-USDT BUY 0.887357 -0.000568 0.763362 -0.763362 OPEN\n",
+ "6 2025-09-10 13:42:00 CLOSE ADA-USDT SELL 0.890511 -0.000021 0.446956 -0.446956 CLOSE\n",
+ "8 2025-09-10 13:50:00 OPEN ADA-USDT SELL 0.892900 0.002494 1.041219 1.041219 OPEN\n",
+ "10 2025-09-10 13:58:00 CLOSE ADA-USDT BUY 0.891480 0.000305 0.352027 0.352027 CLOSE\n",
+ "12 2025-09-10 14:03:00 OPEN ADA-USDT SELL 0.891702 0.001450 0.965967 0.965967 OPEN\n",
+ "14 2025-09-10 14:04:00 CLOSE ADA-USDT BUY 0.893018 0.000619 0.426978 0.426978 CLOSE\n",
+ "16 2025-09-10 14:08:00 OPEN ADA-USDT SELL 0.894122 0.001932 1.138355 1.138355 OPEN\n",
+ "18 2025-09-10 14:45:00 CLOSE ADA-USDT BUY 0.888666 0.000285 0.440307 0.440307 CLOSE\n",
+ "20 2025-09-10 14:48:00 OPEN ADA-USDT SELL 0.888845 0.001053 0.755823 0.755823 OPEN\n",
+ "22 2025-09-10 14:56:00 CLOSE ADA-USDT BUY 0.887105 0.000568 0.499517 0.499517 CLOSE\n",
+ "24 2025-09-10 15:04:00 OPEN ADA-USDT SELL 0.889064 0.001197 0.775172 0.775172 OPEN\n",
+ "26 2025-09-10 15:05:00 CLOSE ADA-USDT BUY 0.889646 0.000538 0.379905 0.379905 CLOSE\n",
+ "28 2025-09-10 15:30:00 OPEN ADA-USDT BUY 0.887590 -0.001495 0.828685 -0.828685 OPEN\n",
+ "30 2025-09-10 15:47:00 CLOSE ADA-USDT SELL 0.889067 0.000290 0.300166 0.300166 CLOSE\n",
+ "32 2025-09-10 15:52:00 OPEN ADA-USDT SELL 0.889420 0.001042 0.845258 0.845258 OPEN\n",
+ "34 2025-09-10 15:54:00 CLOSE ADA-USDT BUY 0.889818 0.000072 0.085410 0.085410 CLOSE\n",
+ "36 2025-09-10 16:04:00 OPEN ADA-USDT BUY 0.887397 -0.000908 0.782667 -0.782667 OPEN\n",
+ "38 2025-09-10 16:05:00 CLOSE ADA-USDT SELL 0.887639 0.000344 0.186446 0.186446 CLOSE\n",
+ "40 2025-09-10 16:10:00 OPEN ADA-USDT BUY 0.884660 -0.001160 1.129970 -1.129970 OPEN\n",
+ "42 2025-09-10 16:41:00 CLOSE ADA-USDT SELL 0.884926 -0.000134 0.467464 -0.467464 CLOSE\n",
+ "44 2025-09-10 16:43:00 OPEN ADA-USDT BUY 0.884720 -0.000617 0.769230 -0.769230 OPEN\n",
+ "46 2025-09-10 16:46:00 CLOSE ADA-USDT SELL 0.884994 -0.000156 0.399989 -0.399989 CLOSE\n",
+ "48 2025-09-10 16:47:00 OPEN ADA-USDT BUY 0.885569 -0.000679 0.768194 -0.768194 OPEN\n",
+ "50 2025-09-10 16:49:00 CLOSE ADA-USDT SELL 0.886788 0.000077 0.280038 -0.280038 CLOSE\n",
+ "52 2025-09-10 17:00:00 OPEN ADA-USDT SELL 0.890556 0.001519 0.913835 0.913835 OPEN\n",
+ "54 2025-09-10 17:02:00 CLOSE ADA-USDT BUY 0.890777 0.000451 0.140338 0.140338 CLOSE\n",
+ "56 2025-09-10 17:04:00 OPEN ADA-USDT SELL 0.890932 0.001273 0.869416 0.869416 OPEN\n",
+ "58 2025-09-10 17:50:00 CLOSE ADA-USDT BUY 0.887723 0.001537 0.436893 0.436893 CLOSE\n",
+ "60 2025-09-10 17:57:00 OPEN ADA-USDT SELL 0.887653 0.001937 0.762645 0.762645 OPEN\n",
+ "62 2025-09-10 18:01:00 CLOSE ADA-USDT BUY 0.887665 0.000910 0.454978 0.454978 CLOSE\n",
+ "64 2025-09-10 18:05:00 OPEN ADA-USDT SELL 0.887922 0.001621 0.826283 0.826283 OPEN\n",
+ "66 2025-09-10 18:08:00 CLOSE ADA-USDT BUY 0.886799 0.000663 0.499959 0.499959 CLOSE\n",
+ "68 2025-09-10 18:12:00 OPEN ADA-USDT SELL 0.886269 0.000673 0.766437 0.766437 OPEN\n",
+ "70 2025-09-10 18:15:00 CLOSE ADA-USDT BUY 0.885385 -0.000091 0.425496 0.425496 CLOSE\n",
+ "72 2025-09-10 18:36:00 OPEN ADA-USDT BUY 0.883996 -0.002189 1.407243 -1.407243 OPEN\n",
+ "74 2025-09-10 19:10:00 CLOSE ADA-USDT SELL 0.880598 0.000000 0.000000 0.000000 CLOSE_STOP_LOSS\n",
+ "76 2025-09-10 19:11:00 OPEN ADA-USDT BUY 0.879860 -0.023480 2.858849 -2.858849 OPEN\n",
+ "78 2025-09-10 20:00:00 CLOSE ADA-USDT SELL 0.878445 0.002158 0.205766 -0.205766 CLOSE\n",
+ "80 2025-09-10 20:37:00 OPEN ADA-USDT SELL 0.879982 0.001724 1.005873 1.005873 OPEN\n",
+ "82 2025-09-10 20:45:00 CLOSE ADA-USDT BUY 0.880463 0.000550 0.308519 0.308519 CLOSE\n",
+ "84 2025-09-10 20:54:00 OPEN ADA-USDT BUY 0.879453 -0.000924 0.945619 -0.945619 OPEN\n",
+ "86 2025-09-10 21:03:00 CLOSE ADA-USDT SELL 0.882105 0.000423 0.313357 0.313357 CLOSE\n",
+ "88 2025-09-10 21:12:00 OPEN ADA-USDT SELL 0.884020 0.001592 1.530571 1.530571 OPEN\n",
+ "90 2025-09-10 21:17:00 CLOSE ADA-USDT BUY 0.883344 0.000423 0.422399 0.422399 CLOSE\n",
+ "92 2025-09-10 22:03:00 OPEN ADA-USDT SELL 0.885924 0.000826 0.804025 0.804025 OPEN\n",
+ "94 2025-09-10 22:05:00 CLOSE ADA-USDT BUY 0.885907 0.000333 0.448001 0.448001 CLOSE\n",
+ "96 2025-09-10 22:16:00 OPEN ADA-USDT SELL 0.887109 0.000233 0.995969 0.995969 OPEN\n",
+ "98 2025-09-10 22:26:00 CLOSE ADA-USDT BUY 0.885579 0.000042 0.429289 0.429289 CLOSE\n",
"\n",
"Symbol_B trades:\n",
- " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
- "1 2025-09-10 13:50:00 OPEN SOL-USDT BUY 224.156429 0.001712 1.929225 1.929225 OPEN\n",
- "3 2025-09-10 14:04:00 CLOSE SOL-USDT SELL 224.700367 0.001066 0.859822 0.859822 CLOSE\n",
- "5 2025-09-10 14:08:00 OPEN SOL-USDT BUY 224.398883 0.002284 1.771450 1.771450 OPEN\n",
- "7 2025-09-10 14:39:00 CLOSE SOL-USDT SELL 222.863446 0.000860 0.719625 0.719625 CLOSE\n",
- "9 2025-09-10 15:36:00 OPEN SOL-USDT SELL 223.411486 -0.001469 1.892487 -1.892487 OPEN\n",
- "11 2025-09-10 15:47:00 CLOSE SOL-USDT BUY 223.034736 0.001095 0.532319 0.532319 CLOSE\n",
- "13 2025-09-10 16:12:00 OPEN SOL-USDT SELL 222.807572 -0.002233 2.232956 -2.232956 OPEN\n",
- "15 2025-09-10 16:31:00 CLOSE SOL-USDT BUY 222.768019 -0.000878 0.923953 -0.923953 CLOSE\n",
- "17 2025-09-10 17:08:00 OPEN SOL-USDT BUY 223.490975 0.002847 1.911623 1.911623 OPEN\n",
- "19 2025-09-10 17:26:00 CLOSE SOL-USDT SELL 222.226735 0.001716 0.822214 0.822214 CLOSE\n",
- "21 2025-09-10 18:36:00 OPEN SOL-USDT SELL 222.436718 -0.002391 1.854279 -1.854279 OPEN\n",
- "23 2025-09-10 18:44:00 CLOSE SOL-USDT BUY 222.285842 -0.001566 0.613392 -0.613392 CLOSE\n",
- "25 2025-09-10 18:59:00 OPEN SOL-USDT SELL 222.784979 -0.003766 2.197313 -2.197313 OPEN\n",
- "27 2025-09-10 19:32:00 CLOSE SOL-USDT BUY 221.177898 0.001427 0.903187 -0.903187 CLOSE\n",
- "29 2025-09-10 20:56:00 OPEN SOL-USDT SELL 222.529393 -0.001831 1.830079 -1.830079 OPEN\n",
- "31 2025-09-10 21:03:00 CLOSE SOL-USDT BUY 222.892964 -0.000235 0.004402 0.004402 CLOSE\n"
+ " time action symbol side price disequilibrium scaled_disequilibrium signed_scaled_disequilibrium status\n",
+ "1 2025-09-10 13:34:00 OPEN SOL-USDT SELL 223.067938 -0.000920 0.824485 -0.824485 OPEN\n",
+ "3 2025-09-10 13:35:00 CLOSE SOL-USDT BUY 222.988969 -0.000031 0.299233 -0.299233 CLOSE\n",
+ "5 2025-09-10 13:39:00 OPEN SOL-USDT SELL 223.740538 -0.000568 0.763362 -0.763362 OPEN\n",
+ "7 2025-09-10 13:42:00 CLOSE SOL-USDT BUY 224.181397 -0.000021 0.446956 -0.446956 CLOSE\n",
+ "9 2025-09-10 13:50:00 OPEN SOL-USDT BUY 224.156429 0.002494 1.041219 1.041219 OPEN\n",
+ "11 2025-09-10 13:58:00 CLOSE SOL-USDT SELL 224.214504 0.000305 0.352027 0.352027 CLOSE\n",
+ "13 2025-09-10 14:03:00 OPEN SOL-USDT BUY 224.400408 0.001450 0.965967 0.965967 OPEN\n",
+ "15 2025-09-10 14:04:00 CLOSE SOL-USDT SELL 224.700367 0.000619 0.426978 0.426978 CLOSE\n",
+ "17 2025-09-10 14:08:00 OPEN SOL-USDT BUY 224.398883 0.001932 1.138355 1.138355 OPEN\n",
+ "19 2025-09-10 14:45:00 CLOSE SOL-USDT SELL 223.206538 0.000285 0.440307 0.440307 CLOSE\n",
+ "21 2025-09-10 14:48:00 OPEN SOL-USDT BUY 223.167033 0.001053 0.755823 0.755823 OPEN\n",
+ "23 2025-09-10 14:56:00 CLOSE SOL-USDT SELL 222.936840 0.000568 0.499517 0.499517 CLOSE\n",
+ "25 2025-09-10 15:04:00 OPEN SOL-USDT BUY 223.396583 0.001197 0.775172 0.775172 OPEN\n",
+ "27 2025-09-10 15:05:00 CLOSE SOL-USDT SELL 223.749132 0.000538 0.379905 0.379905 CLOSE\n",
+ "29 2025-09-10 15:30:00 OPEN SOL-USDT SELL 223.335060 -0.001495 0.828685 -0.828685 OPEN\n",
+ "31 2025-09-10 15:47:00 CLOSE SOL-USDT BUY 223.034736 0.000290 0.300166 0.300166 CLOSE\n",
+ "33 2025-09-10 15:52:00 OPEN SOL-USDT BUY 223.193710 0.001042 0.845258 0.845258 OPEN\n",
+ "35 2025-09-10 15:54:00 CLOSE SOL-USDT SELL 223.413141 0.000072 0.085410 0.085410 CLOSE\n",
+ "37 2025-09-10 16:04:00 OPEN SOL-USDT SELL 222.866369 -0.000908 0.782667 -0.782667 OPEN\n",
+ "39 2025-09-10 16:05:00 CLOSE SOL-USDT BUY 222.874434 0.000344 0.186446 0.186446 CLOSE\n",
+ "41 2025-09-10 16:10:00 OPEN SOL-USDT SELL 222.844778 -0.001160 1.129970 -1.129970 OPEN\n",
+ "43 2025-09-10 16:41:00 CLOSE SOL-USDT BUY 222.892523 -0.000134 0.467464 -0.467464 CLOSE\n",
+ "45 2025-09-10 16:43:00 OPEN SOL-USDT SELL 222.777794 -0.000617 0.769230 -0.769230 OPEN\n",
+ "47 2025-09-10 16:46:00 CLOSE SOL-USDT BUY 223.088812 -0.000156 0.399989 -0.399989 CLOSE\n",
+ "49 2025-09-10 16:47:00 OPEN SOL-USDT SELL 223.083201 -0.000679 0.768194 -0.768194 OPEN\n",
+ "51 2025-09-10 16:49:00 CLOSE SOL-USDT BUY 223.091338 0.000077 0.280038 -0.280038 CLOSE\n",
+ "53 2025-09-10 17:00:00 OPEN SOL-USDT BUY 223.834040 0.001519 0.913835 0.913835 OPEN\n",
+ "55 2025-09-10 17:02:00 CLOSE SOL-USDT SELL 223.794948 0.000451 0.140338 0.140338 CLOSE\n",
+ "57 2025-09-10 17:04:00 OPEN SOL-USDT BUY 223.807847 0.001273 0.869416 0.869416 OPEN\n",
+ "59 2025-09-10 17:50:00 CLOSE SOL-USDT SELL 222.927983 0.001537 0.436893 0.436893 CLOSE\n",
+ "61 2025-09-10 17:57:00 OPEN SOL-USDT BUY 222.575944 0.001937 0.762645 0.762645 OPEN\n",
+ "63 2025-09-10 18:01:00 CLOSE SOL-USDT SELL 222.885580 0.000910 0.454978 0.454978 CLOSE\n",
+ "65 2025-09-10 18:05:00 OPEN SOL-USDT BUY 222.791989 0.001621 0.826283 0.826283 OPEN\n",
+ "67 2025-09-10 18:08:00 CLOSE SOL-USDT SELL 222.676496 0.000663 0.499959 0.499959 CLOSE\n",
+ "69 2025-09-10 18:12:00 OPEN SOL-USDT BUY 222.344492 0.000673 0.766437 0.766437 OPEN\n",
+ "71 2025-09-10 18:15:00 CLOSE SOL-USDT SELL 222.283748 -0.000091 0.425496 0.425496 CLOSE\n",
+ "73 2025-09-10 18:36:00 OPEN SOL-USDT SELL 222.436718 -0.002189 1.407243 -1.407243 OPEN\n",
+ "75 2025-09-10 19:10:00 CLOSE SOL-USDT BUY 222.611141 0.000000 0.000000 0.000000 CLOSE_STOP_LOSS\n",
+ "77 2025-09-10 19:11:00 OPEN SOL-USDT SELL 222.413615 -0.023480 2.858849 -2.858849 OPEN\n",
+ "79 2025-09-10 20:00:00 CLOSE SOL-USDT BUY 221.354650 0.002158 0.205766 -0.205766 CLOSE\n",
+ "81 2025-09-10 20:37:00 OPEN SOL-USDT BUY 221.760958 0.001724 1.005873 1.005873 OPEN\n",
+ "83 2025-09-10 20:45:00 CLOSE SOL-USDT SELL 222.177482 0.000550 0.308519 0.308519 CLOSE\n",
+ "85 2025-09-10 20:54:00 OPEN SOL-USDT SELL 222.448781 -0.000924 0.945619 -0.945619 OPEN\n",
+ "87 2025-09-10 21:03:00 CLOSE SOL-USDT BUY 222.892964 0.000423 0.313357 0.313357 CLOSE\n",
+ "89 2025-09-10 21:12:00 OPEN SOL-USDT BUY 222.772128 0.001592 1.530571 1.530571 OPEN\n",
+ "91 2025-09-10 21:17:00 CLOSE SOL-USDT SELL 222.933113 0.000423 0.422399 0.422399 CLOSE\n",
+ "93 2025-09-10 22:03:00 OPEN SOL-USDT BUY 223.594840 0.000826 0.804025 0.804025 OPEN\n",
+ "95 2025-09-10 22:05:00 CLOSE SOL-USDT SELL 223.662537 0.000333 0.448001 0.448001 CLOSE\n",
+ "97 2025-09-10 22:16:00 OPEN SOL-USDT BUY 223.720985 0.000233 0.995969 0.995969 OPEN\n",
+ "99 2025-09-10 22:26:00 CLOSE SOL-USDT SELL 223.676085 0.000042 0.429289 0.429289 CLOSE\n"
]
},
{
@@ -1498,7 +1686,7 @@
],
"xaxis": "x",
"y": {
- "bdata": "AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAA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",
+ "bdata": "AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAA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",
"dtype": "f8"
},
"yaxis": "y"
@@ -2174,7 +2362,7 @@
],
"xaxis": "x",
"y": {
- "bdata": "AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAA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",
+ "bdata": "AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/AAAAAAAA+H8AAAAA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",
"dtype": "f8"
},
"yaxis": "y"
@@ -3531,130 +3719,6 @@
},
"yaxis": "y2"
},
- {
- "hovertemplate": "%{text}",
- "marker": {
- "color": "red",
- "size": 14,
- "symbol": "triangle-down"
- },
- "mode": "markers",
- "name": "ADA-USDT SELL OPEN",
- "showlegend": true,
- "text": [
- "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 13:50:00
Normalized Price: 1.0213
Actual Price: $0.89",
- "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 14:08:00
Normalized Price: 1.0239
Actual Price: $0.89",
- "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 17:08:00
Normalized Price: 1.0198
Actual Price: $0.89"
- ],
- "type": "scatter",
- "x": [
- "2025-09-10T13:50:00",
- "2025-09-10T14:08:00",
- "2025-09-10T17:08:00"
- ],
- "xaxis": "x2",
- "y": [
- 1.0212741621868924,
- 1.0239048381562392,
- 1.0197872583781311
- ],
- "yaxis": "y2"
- },
- {
- "hovertemplate": "%{text}",
- "marker": {
- "color": "green",
- "size": 14,
- "symbol": "triangle-up"
- },
- "mode": "markers",
- "name": "SOL-USDT BUY OPEN",
- "showlegend": true,
- "text": [
- "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 13:50:00
Normalized Price: 1.0208
Actual Price: $224.16",
- "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 14:08:00
Normalized Price: 1.0223
Actual Price: $224.40",
- "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 17:08:00
Normalized Price: 1.0170
Actual Price: $223.49"
- ],
- "type": "scatter",
- "x": [
- "2025-09-10T13:50:00",
- "2025-09-10T14:08:00",
- "2025-09-10T17:08:00"
- ],
- "xaxis": "x2",
- "y": [
- 1.0208466090122896,
- 1.0223486572598999,
- 1.0170232134729176
- ],
- "yaxis": "y2"
- },
- {
- "hovertemplate": "%{text}",
- "marker": {
- "color": "green",
- "line": {
- "color": "black",
- "width": 2
- },
- "size": 14,
- "symbol": "triangle-up"
- },
- "mode": "markers",
- "name": "ADA-USDT BUY CLOSE",
- "showlegend": true,
- "text": [
- "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 14:04:00
Normalized Price: 1.0209
Actual Price: $0.89",
- "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 14:39:00
Normalized Price: 1.0143
Actual Price: $0.89",
- "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 17:26:00
Normalized Price: 1.0136
Actual Price: $0.89"
- ],
- "type": "scatter",
- "x": [
- "2025-09-10T14:04:00",
- "2025-09-10T14:39:00",
- "2025-09-10T17:26:00"
- ],
- "xaxis": "x2",
- "y": [
- 1.0209310305387167,
- 1.0142971520073203,
- 1.0136108887109687
- ],
- "yaxis": "y2"
- },
- {
- "hovertemplate": "%{text}",
- "marker": {
- "color": "red",
- "line": {
- "color": "black",
- "width": 2
- },
- "size": 14,
- "symbol": "triangle-down"
- },
- "mode": "markers",
- "name": "SOL-USDT SELL CLOSE",
- "showlegend": true,
- "text": [
- "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 14:04:00
Normalized Price: 1.0223
Actual Price: $224.70",
- "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 14:39:00
Normalized Price: 1.0125
Actual Price: $222.86",
- "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 17:26:00
Normalized Price: 1.0125
Actual Price: $222.23"
- ],
- "type": "scatter",
- "x": [
- "2025-09-10T14:04:00",
- "2025-09-10T14:39:00",
- "2025-09-10T17:26:00"
- ],
- "xaxis": "x2",
- "y": [
- 1.0223031406463359,
- 1.0124715521165226,
- 1.0125170687300864
- ],
- "yaxis": "y2"
- },
{
"hovertemplate": "%{text}",
"marker": {
@@ -3666,27 +3730,42 @@
"name": "ADA-USDT BUY OPEN",
"showlegend": true,
"text": [
- "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 15:36:00
Normalized Price: 1.0148
Actual Price: $0.89",
- "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 16:12:00
Normalized Price: 1.0103
Actual Price: $0.88",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 13:34:00
Normalized Price: 1.0124
Actual Price: $0.89",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 13:39:00
Normalized Price: 1.0141
Actual Price: $0.89",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 15:30:00
Normalized Price: 1.0154
Actual Price: $0.89",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 16:04:00
Normalized Price: 1.0151
Actual Price: $0.89",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 16:10:00
Normalized Price: 1.0129
Actual Price: $0.88",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 16:43:00
Normalized Price: 1.0120
Actual Price: $0.88",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 16:47:00
Normalized Price: 1.0126
Actual Price: $0.89",
"ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 18:36:00
Normalized Price: 1.0109
Actual Price: $0.88",
- "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 18:59:00
Normalized Price: 1.0100
Actual Price: $0.88",
- "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 20:56:00
Normalized Price: 1.0057
Actual Price: $0.88"
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 19:11:00
Normalized Price: 1.0071
Actual Price: $0.88",
+ "ADA-USDT BUY OPEN OPEN
Time: 2025-09-10 20:54:00
Normalized Price: 1.0062
Actual Price: $0.88"
],
"type": "scatter",
"x": [
- "2025-09-10T15:36:00",
- "2025-09-10T16:12:00",
+ "2025-09-10T13:34:00",
+ "2025-09-10T13:39:00",
+ "2025-09-10T15:30:00",
+ "2025-09-10T16:04:00",
+ "2025-09-10T16:10:00",
+ "2025-09-10T16:43:00",
+ "2025-09-10T16:47:00",
"2025-09-10T18:36:00",
- "2025-09-10T18:59:00",
- "2025-09-10T20:56:00"
+ "2025-09-10T19:11:00",
+ "2025-09-10T20:54:00"
],
"xaxis": "x2",
"y": [
- 1.0147546608715543,
- 1.0102939494452705,
+ 1.0123527393343246,
+ 1.0140683975752032,
+ 1.0154409241679059,
+ 1.01509779251973,
+ 1.0129246254146176,
+ 1.012009607686149,
+ 1.0125814937664417,
1.0108658355255633,
- 1.0099508177970948,
- 1.0057188608029282
+ 1.0070913873956309,
+ 1.0061763696671624
],
"yaxis": "y2"
},
@@ -3701,27 +3780,42 @@
"name": "SOL-USDT SELL OPEN",
"showlegend": true,
"text": [
- "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 15:36:00
Normalized Price: 1.0171
Actual Price: $223.41",
- "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 16:12:00
Normalized Price: 1.0135
Actual Price: $222.81",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 13:34:00
Normalized Price: 1.0147
Actual Price: $223.07",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 13:39:00
Normalized Price: 1.0178
Actual Price: $223.74",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 15:30:00
Normalized Price: 1.0165
Actual Price: $223.34",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 16:04:00
Normalized Price: 1.0143
Actual Price: $222.87",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 16:10:00
Normalized Price: 1.0149
Actual Price: $222.84",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 16:43:00
Normalized Price: 1.0147
Actual Price: $222.78",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 16:47:00
Normalized Price: 1.0156
Actual Price: $223.08",
"SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 18:36:00
Normalized Price: 1.0122
Actual Price: $222.44",
- "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 18:59:00
Normalized Price: 1.0144
Actual Price: $222.78",
- "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 20:56:00
Normalized Price: 1.0126
Actual Price: $222.53"
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 19:11:00
Normalized Price: 1.0127
Actual Price: $222.41",
+ "SOL-USDT SELL OPEN OPEN
Time: 2025-09-10 20:54:00
Normalized Price: 1.0126
Actual Price: $222.45"
],
"type": "scatter",
"x": [
- "2025-09-10T15:36:00",
- "2025-09-10T16:12:00",
+ "2025-09-10T13:34:00",
+ "2025-09-10T13:39:00",
+ "2025-09-10T15:30:00",
+ "2025-09-10T16:04:00",
+ "2025-09-10T16:10:00",
+ "2025-09-10T16:43:00",
+ "2025-09-10T16:47:00",
"2025-09-10T18:36:00",
- "2025-09-10T18:59:00",
- "2025-09-10T20:56:00"
+ "2025-09-10T19:11:00",
+ "2025-09-10T20:54:00"
],
"xaxis": "x2",
"y": [
- 1.0171142467000456,
- 1.0134729176149295,
+ 1.0147018661811562,
+ 1.017796995903505,
+ 1.0164770141101502,
+ 1.0142922166590806,
+ 1.014929449248976,
+ 1.0147473827947202,
+ 1.015612198452435,
1.0121984524351388,
- 1.0143832498862086,
- 1.0126081019572144
+ 1.0127446517979062,
+ 1.0125625853436506
],
"yaxis": "y2"
},
@@ -3740,26 +3834,41 @@
"name": "ADA-USDT SELL CLOSE",
"showlegend": true,
"text": [
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 13:35:00
Normalized Price: 1.0133
Actual Price: $0.89",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 13:42:00
Normalized Price: 1.0176
Actual Price: $0.89",
"ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 15:47:00
Normalized Price: 1.0172
Actual Price: $0.89",
- "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 16:31:00
Normalized Price: 1.0114
Actual Price: $0.88",
- "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 18:44:00
Normalized Price: 1.0098
Actual Price: $0.88",
- "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 19:32:00
Normalized Price: 1.0026
Actual Price: $0.88",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 16:05:00
Normalized Price: 1.0149
Actual Price: $0.89",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 16:41:00
Normalized Price: 1.0120
Actual Price: $0.88",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 16:46:00
Normalized Price: 1.0122
Actual Price: $0.88",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 16:49:00
Normalized Price: 1.0137
Actual Price: $0.89",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 19:10:00
Normalized Price: 1.0073
Actual Price: $0.88",
+ "ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 20:00:00
Normalized Price: 1.0039
Actual Price: $0.88",
"ADA-USDT SELL CLOSE CLOSE
Time: 2025-09-10 21:03:00
Normalized Price: 1.0085
Actual Price: $0.88"
],
"type": "scatter",
"x": [
+ "2025-09-10T13:35:00",
+ "2025-09-10T13:42:00",
"2025-09-10T15:47:00",
- "2025-09-10T16:31:00",
- "2025-09-10T18:44:00",
- "2025-09-10T19:32:00",
+ "2025-09-10T16:05:00",
+ "2025-09-10T16:41:00",
+ "2025-09-10T16:46:00",
+ "2025-09-10T16:49:00",
+ "2025-09-10T19:10:00",
+ "2025-09-10T20:00:00",
"2025-09-10T21:03:00"
],
"xaxis": "x2",
"y": [
+ 1.0132677570627933,
+ 1.0176140912730185,
1.0171565824087843,
- 1.011437721605856,
- 1.0098364405810363,
- 1.002630675969347,
+ 1.0148690380876129,
+ 1.012009607686149,
+ 1.012238362118266,
+ 1.0137252659270273,
+ 1.007320141827748,
+ 1.0038888253459912,
1.0084639139883336
],
"yaxis": "y2"
@@ -3779,30 +3888,313 @@
"name": "SOL-USDT BUY CLOSE",
"showlegend": true,
"text": [
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 13:35:00
Normalized Price: 1.0154
Actual Price: $222.99",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 13:42:00
Normalized Price: 1.0189
Actual Price: $224.18",
"SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 15:47:00
Normalized Price: 1.0155
Actual Price: $223.03",
- "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 16:31:00
Normalized Price: 1.0148
Actual Price: $222.77",
- "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 18:44:00
Normalized Price: 1.0116
Actual Price: $222.29",
- "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 19:32:00
Normalized Price: 1.0066
Actual Price: $221.18",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 16:05:00
Normalized Price: 1.0146
Actual Price: $222.87",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 16:41:00
Normalized Price: 1.0142
Actual Price: $222.89",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 16:46:00
Normalized Price: 1.0148
Actual Price: $223.09",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 16:49:00
Normalized Price: 1.0152
Actual Price: $223.09",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 19:10:00
Normalized Price: 1.0137
Actual Price: $222.61",
+ "SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 20:00:00
Normalized Price: 1.0072
Actual Price: $221.35",
"SOL-USDT BUY CLOSE CLOSE
Time: 2025-09-10 21:03:00
Normalized Price: 1.0142
Actual Price: $222.89"
],
"type": "scatter",
"x": [
+ "2025-09-10T13:35:00",
+ "2025-09-10T13:42:00",
"2025-09-10T15:47:00",
- "2025-09-10T16:31:00",
- "2025-09-10T18:44:00",
- "2025-09-10T19:32:00",
+ "2025-09-10T16:05:00",
+ "2025-09-10T16:41:00",
+ "2025-09-10T16:46:00",
+ "2025-09-10T16:49:00",
+ "2025-09-10T19:10:00",
+ "2025-09-10T20:00:00",
"2025-09-10T21:03:00"
],
"xaxis": "x2",
"y": [
+ 1.0153846153846156,
+ 1.0188893946290396,
1.0154756486117433,
+ 1.0145653163404644,
+ 1.0142467000455166,
1.014838416021848,
- 1.0116067364588075,
- 1.006554392353209,
+ 1.0151570323167958,
+ 1.0137460172963133,
+ 1.0071916249431043,
1.0141556668183889
],
"yaxis": "y2"
},
+ {
+ "hovertemplate": "%{text}",
+ "marker": {
+ "color": "red",
+ "size": 14,
+ "symbol": "triangle-down"
+ },
+ "mode": "markers",
+ "name": "ADA-USDT SELL OPEN",
+ "showlegend": true,
+ "text": [
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 13:50:00
Normalized Price: 1.0213
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 14:03:00
Normalized Price: 1.0201
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 14:08:00
Normalized Price: 1.0239
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 14:48:00
Normalized Price: 1.0164
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 15:04:00
Normalized Price: 1.0166
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 15:52:00
Normalized Price: 1.0173
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 17:00:00
Normalized Price: 1.0188
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 17:04:00
Normalized Price: 1.0190
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 17:57:00
Normalized Price: 1.0149
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 18:05:00
Normalized Price: 1.0161
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 18:12:00
Normalized Price: 1.0138
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 20:37:00
Normalized Price: 1.0067
Actual Price: $0.88",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 21:12:00
Normalized Price: 1.0108
Actual Price: $0.88",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 22:03:00
Normalized Price: 1.0132
Actual Price: $0.89",
+ "ADA-USDT SELL OPEN OPEN
Time: 2025-09-10 22:16:00
Normalized Price: 1.0143
Actual Price: $0.89"
+ ],
+ "type": "scatter",
+ "x": [
+ "2025-09-10T13:50:00",
+ "2025-09-10T14:03:00",
+ "2025-09-10T14:08:00",
+ "2025-09-10T14:48:00",
+ "2025-09-10T15:04:00",
+ "2025-09-10T15:52:00",
+ "2025-09-10T17:00:00",
+ "2025-09-10T17:04:00",
+ "2025-09-10T17:57:00",
+ "2025-09-10T18:05:00",
+ "2025-09-10T18:12:00",
+ "2025-09-10T20:37:00",
+ "2025-09-10T21:12:00",
+ "2025-09-10T22:03:00",
+ "2025-09-10T22:16:00"
+ ],
+ "xaxis": "x2",
+ "y": [
+ 1.0212741621868924,
+ 1.0201303900263068,
+ 1.0239048381562392,
+ 1.0163559418963741,
+ 1.0165846963284915,
+ 1.0172709596248428,
+ 1.018757863433604,
+ 1.0189866178657212,
+ 1.0148690380876129,
+ 1.0161271874642572,
+ 1.0138396431430858,
+ 1.0067482557474552,
+ 1.0107514583095047,
+ 1.0131533798467347,
+ 1.0142971520073203
+ ],
+ "yaxis": "y2"
+ },
+ {
+ "hovertemplate": "%{text}",
+ "marker": {
+ "color": "green",
+ "size": 14,
+ "symbol": "triangle-up"
+ },
+ "mode": "markers",
+ "name": "SOL-USDT BUY OPEN",
+ "showlegend": true,
+ "text": [
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 13:50:00
Normalized Price: 1.0208
Actual Price: $224.16",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 14:03:00
Normalized Price: 1.0214
Actual Price: $224.40",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 14:08:00
Normalized Price: 1.0223
Actual Price: $224.40",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 14:48:00
Normalized Price: 1.0152
Actual Price: $223.17",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 15:04:00
Normalized Price: 1.0159
Actual Price: $223.40",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 15:52:00
Normalized Price: 1.0158
Actual Price: $223.19",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 17:00:00
Normalized Price: 1.0182
Actual Price: $223.83",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 17:04:00
Normalized Price: 1.0187
Actual Price: $223.81",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 17:57:00
Normalized Price: 1.0128
Actual Price: $222.58",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 18:05:00
Normalized Price: 1.0143
Actual Price: $222.79",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 18:12:00
Normalized Price: 1.0121
Actual Price: $222.34",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 20:37:00
Normalized Price: 1.0095
Actual Price: $221.76",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 21:12:00
Normalized Price: 1.0140
Actual Price: $222.77",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 22:03:00
Normalized Price: 1.0172
Actual Price: $223.59",
+ "SOL-USDT BUY OPEN OPEN
Time: 2025-09-10 22:16:00
Normalized Price: 1.0181
Actual Price: $223.72"
+ ],
+ "type": "scatter",
+ "x": [
+ "2025-09-10T13:50:00",
+ "2025-09-10T14:03:00",
+ "2025-09-10T14:08:00",
+ "2025-09-10T14:48:00",
+ "2025-09-10T15:04:00",
+ "2025-09-10T15:52:00",
+ "2025-09-10T17:00:00",
+ "2025-09-10T17:04:00",
+ "2025-09-10T17:57:00",
+ "2025-09-10T18:05:00",
+ "2025-09-10T18:12:00",
+ "2025-09-10T20:37:00",
+ "2025-09-10T21:12:00",
+ "2025-09-10T22:03:00",
+ "2025-09-10T22:16:00"
+ ],
+ "xaxis": "x2",
+ "y": [
+ 1.0208466090122896,
+ 1.021438324988621,
+ 1.0223486572598999,
+ 1.0152025489303595,
+ 1.015885298133819,
+ 1.015794264906691,
+ 1.0181611288120165,
+ 1.0187073281747838,
+ 1.0127901684114702,
+ 1.0142922166590806,
+ 1.012107419208011,
+ 1.0095129722348657,
+ 1.013973600364133,
+ 1.0172052799271734,
+ 1.0180700955848885
+ ],
+ "yaxis": "y2"
+ },
+ {
+ "hovertemplate": "%{text}",
+ "marker": {
+ "color": "green",
+ "line": {
+ "color": "black",
+ "width": 2
+ },
+ "size": 14,
+ "symbol": "triangle-up"
+ },
+ "mode": "markers",
+ "name": "ADA-USDT BUY CLOSE",
+ "showlegend": true,
+ "text": [
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 13:58:00
Normalized Price: 1.0191
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 14:04:00
Normalized Price: 1.0209
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 14:45:00
Normalized Price: 1.0167
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 14:56:00
Normalized Price: 1.0152
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 15:05:00
Normalized Price: 1.0169
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 15:54:00
Normalized Price: 1.0176
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 17:02:00
Normalized Price: 1.0174
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 17:50:00
Normalized Price: 1.0151
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 18:01:00
Normalized Price: 1.0146
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 18:08:00
Normalized Price: 1.0149
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 18:15:00
Normalized Price: 1.0135
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 20:45:00
Normalized Price: 1.0071
Actual Price: $0.88",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 21:17:00
Normalized Price: 1.0112
Actual Price: $0.88",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 22:05:00
Normalized Price: 1.0128
Actual Price: $0.89",
+ "ADA-USDT BUY CLOSE CLOSE
Time: 2025-09-10 22:26:00
Normalized Price: 1.0129
Actual Price: $0.89"
+ ],
+ "type": "scatter",
+ "x": [
+ "2025-09-10T13:58:00",
+ "2025-09-10T14:04:00",
+ "2025-09-10T14:45:00",
+ "2025-09-10T14:56:00",
+ "2025-09-10T15:05:00",
+ "2025-09-10T15:54:00",
+ "2025-09-10T17:02:00",
+ "2025-09-10T17:50:00",
+ "2025-09-10T18:01:00",
+ "2025-09-10T18:08:00",
+ "2025-09-10T18:15:00",
+ "2025-09-10T20:45:00",
+ "2025-09-10T21:17:00",
+ "2025-09-10T22:05:00",
+ "2025-09-10T22:26:00"
+ ],
+ "xaxis": "x2",
+ "y": [
+ 1.0191009950817798,
+ 1.0209310305387167,
+ 1.01669907354455,
+ 1.0152121697357885,
+ 1.0169278279766671,
+ 1.0176140912730185,
+ 1.0173853368409014,
+ 1.01509779251973,
+ 1.014640283655496,
+ 1.0148690380876129,
+ 1.0134965114949102,
+ 1.0070913873956309,
+ 1.011208967173739,
+ 1.0128102481985588,
+ 1.0129246254146176
+ ],
+ "yaxis": "y2"
+ },
+ {
+ "hovertemplate": "%{text}",
+ "marker": {
+ "color": "red",
+ "line": {
+ "color": "black",
+ "width": 2
+ },
+ "size": 14,
+ "symbol": "triangle-down"
+ },
+ "mode": "markers",
+ "name": "SOL-USDT SELL CLOSE",
+ "showlegend": true,
+ "text": [
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 13:58:00
Normalized Price: 1.0198
Actual Price: $224.21",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 14:04:00
Normalized Price: 1.0223
Actual Price: $224.70",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 14:45:00
Normalized Price: 1.0162
Actual Price: $223.21",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 14:56:00
Normalized Price: 1.0151
Actual Price: $222.94",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 15:05:00
Normalized Price: 1.0171
Actual Price: $223.75",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 15:54:00
Normalized Price: 1.0171
Actual Price: $223.41",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 17:02:00
Normalized Price: 1.0179
Actual Price: $223.79",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 17:50:00
Normalized Price: 1.0144
Actual Price: $222.93",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 18:01:00
Normalized Price: 1.0137
Actual Price: $222.89",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 18:08:00
Normalized Price: 1.0138
Actual Price: $222.68",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 18:15:00
Normalized Price: 1.0122
Actual Price: $222.28",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 20:45:00
Normalized Price: 1.0113
Actual Price: $222.18",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 21:17:00
Normalized Price: 1.0155
Actual Price: $222.93",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 22:05:00
Normalized Price: 1.0180
Actual Price: $223.66",
+ "SOL-USDT SELL CLOSE CLOSE
Time: 2025-09-10 22:26:00
Normalized Price: 1.0181
Actual Price: $223.68"
+ ],
+ "type": "scatter",
+ "x": [
+ "2025-09-10T13:58:00",
+ "2025-09-10T14:04:00",
+ "2025-09-10T14:45:00",
+ "2025-09-10T14:56:00",
+ "2025-09-10T15:05:00",
+ "2025-09-10T15:54:00",
+ "2025-09-10T17:02:00",
+ "2025-09-10T17:50:00",
+ "2025-09-10T18:01:00",
+ "2025-09-10T18:08:00",
+ "2025-09-10T18:15:00",
+ "2025-09-10T20:45:00",
+ "2025-09-10T21:17:00",
+ "2025-09-10T22:05:00",
+ "2025-09-10T22:26:00"
+ ],
+ "xaxis": "x2",
+ "y": [
+ 1.0198452435138827,
+ 1.0223031406463359,
+ 1.0162494310423305,
+ 1.0150659990896678,
+ 1.0171142467000456,
+ 1.0170687300864816,
+ 1.0178880291306327,
+ 1.0144287664997724,
+ 1.0137460172963133,
+ 1.013837050523441,
+ 1.0122439690487028,
+ 1.01128812016386,
+ 1.0155211652253073,
+ 1.0179790623577607,
+ 1.0180700955848885
+ ],
+ "yaxis": "y2"
+ },
{
"line": {
"color": "blue",
@@ -4490,15 +4882,20 @@
"showlegend": true,
"type": "scatter",
"x": [
- "2025-09-10T15:36:00.000000000",
- "2025-09-10T16:12:00.000000000",
+ "2025-09-10T13:34:00.000000000",
+ "2025-09-10T13:39:00.000000000",
+ "2025-09-10T15:30:00.000000000",
+ "2025-09-10T16:04:00.000000000",
+ "2025-09-10T16:10:00.000000000",
+ "2025-09-10T16:43:00.000000000",
+ "2025-09-10T16:47:00.000000000",
"2025-09-10T18:36:00.000000000",
- "2025-09-10T18:59:00.000000000",
- "2025-09-10T20:56:00.000000000"
+ "2025-09-10T19:11:00.000000000",
+ "2025-09-10T20:54:00.000000000"
],
"xaxis": "x3",
"y": {
- "bdata": "gm3AYB1l7D/HTVm4xkXsPyL03NyySew/DYsa3EFB7D8d4gjlGyLsPw==",
+ "bdata": "6PrImEdZ7D+aY0vhOWXsP3ctXKUiZ+w/AA1fCo5l7D97Da3tIU/sP4WijfCgT+w/cQlWTJVW7D8i9NzcsknsPyN3CWLQJ+w/bseOtXok7D8=",
"dtype": "f8"
},
"yaxis": "y3"
@@ -4518,13 +4915,25 @@
"showlegend": true,
"type": "scatter",
"x": [
+ "2025-09-10T13:58:00.000000000",
"2025-09-10T14:04:00.000000000",
- "2025-09-10T14:39:00.000000000",
- "2025-09-10T17:26:00.000000000"
+ "2025-09-10T14:45:00.000000000",
+ "2025-09-10T14:56:00.000000000",
+ "2025-09-10T15:05:00.000000000",
+ "2025-09-10T15:54:00.000000000",
+ "2025-09-10T17:02:00.000000000",
+ "2025-09-10T17:50:00.000000000",
+ "2025-09-10T18:01:00.000000000",
+ "2025-09-10T18:08:00.000000000",
+ "2025-09-10T18:15:00.000000000",
+ "2025-09-10T20:45:00.000000000",
+ "2025-09-10T21:17:00.000000000",
+ "2025-09-10T22:05:00.000000000",
+ "2025-09-10T22:26:00.000000000"
],
"xaxis": "x3",
"y": {
- "bdata": "DL7nfpmT7D+vKMChEmnsP0pDkMHMWuw/",
+ "bdata": "9zVPZwCH7D8Mvud+mZPsP+Lvsanzb+w/OU7K5Slj7D+Lxm60+nfsP6U7qk5jeew/t750KD+B7D/AMbogOWjsP+FTiv2/Z+w/ckaw3qhg7D/7qXp0ElXsPwf0F2fBLOw/nTuwV1pE7D+uDuRYWVnsPyoneGOpVuw/",
"dtype": "f8"
},
"yaxis": "y3"
@@ -4541,12 +4950,24 @@
"type": "scatter",
"x": [
"2025-09-10T13:50:00.000000000",
+ "2025-09-10T14:03:00.000000000",
"2025-09-10T14:08:00.000000000",
- "2025-09-10T17:08:00.000000000"
+ "2025-09-10T14:48:00.000000000",
+ "2025-09-10T15:04:00.000000000",
+ "2025-09-10T15:52:00.000000000",
+ "2025-09-10T17:00:00.000000000",
+ "2025-09-10T17:04:00.000000000",
+ "2025-09-10T17:57:00.000000000",
+ "2025-09-10T18:05:00.000000000",
+ "2025-09-10T18:12:00.000000000",
+ "2025-09-10T20:37:00.000000000",
+ "2025-09-10T21:12:00.000000000",
+ "2025-09-10T22:03:00.000000000",
+ "2025-09-10T22:16:00.000000000"
],
"xaxis": "x3",
"y": {
- "bdata": "w9+8EKSS7D8na0tgppzsP7qtCTaRjuw/",
+ "bdata": "w9+8EKSS7D8jga3F0YjsPydrS2CmnOw/Z/Zht2tx7D9FYne2NnPsP43Wvrkgduw/yLoI129/7D9x2a/RhILsP4katkaoZ+w/8JGQvNtp7D+5137fT1zsP1tKWdDPKOw/DvGQ9uNJ7D9DhlIbfVnsP7aPYJgyY+w/",
"dtype": "f8"
},
"yaxis": "y3"
@@ -4566,15 +4987,20 @@
"showlegend": true,
"type": "scatter",
"x": [
+ "2025-09-10T13:35:00.000000000",
+ "2025-09-10T13:42:00.000000000",
"2025-09-10T15:47:00.000000000",
- "2025-09-10T16:31:00.000000000",
- "2025-09-10T18:44:00.000000000",
- "2025-09-10T19:32:00.000000000",
+ "2025-09-10T16:05:00.000000000",
+ "2025-09-10T16:41:00.000000000",
+ "2025-09-10T16:46:00.000000000",
+ "2025-09-10T16:49:00.000000000",
+ "2025-09-10T19:10:00.000000000",
+ "2025-09-10T20:00:00.000000000",
"2025-09-10T21:03:00.000000000"
],
"xaxis": "x3",
"y": {
- "bdata": "6we8Mj1z7D+XM8gzjkbsP7NNSQPWP+w/Y2VBgGgQ7D/hwkPnNDrsPw==",
+ "bdata": "IaEH/Q9Z7D9pUvS9EH/sP+sHvDI9c+w/piR6nYpn7D8sG/vHT1HsP/2OKw/fUew/fwZ/+JFg7D+H1MiM3C3sP7xV1gg4HOw/4cJD5zQ67D8=",
"dtype": "f8"
},
"yaxis": "y3"
@@ -5267,12 +5693,24 @@
"type": "scatter",
"x": [
"2025-09-10T13:50:00.000000000",
+ "2025-09-10T14:03:00.000000000",
"2025-09-10T14:08:00.000000000",
- "2025-09-10T17:08:00.000000000"
+ "2025-09-10T14:48:00.000000000",
+ "2025-09-10T15:04:00.000000000",
+ "2025-09-10T15:52:00.000000000",
+ "2025-09-10T17:00:00.000000000",
+ "2025-09-10T17:04:00.000000000",
+ "2025-09-10T17:57:00.000000000",
+ "2025-09-10T18:05:00.000000000",
+ "2025-09-10T18:12:00.000000000",
+ "2025-09-10T20:37:00.000000000",
+ "2025-09-10T21:12:00.000000000",
+ "2025-09-10T22:03:00.000000000",
+ "2025-09-10T22:16:00.000000000"
],
"xaxis": "x4",
"y": {
- "bdata": "ZpT9dgEFbEC6+NqmwwxsQFPwNxK272tA",
+ "bdata": "ZpT9dgEFbEDMFsok0AxsQLr42qbDDGxA4xtKVVjla0Cx9/XNsOxrQEVyWd4y5mtAVVnec7D6a0A/bjLi2flrQBf2zyFu0mtA73zB+FfZa0CD134TBstrQNbWSMRZuGtAEvhoRrXYa0Ay2HftCPNrQJZbu04S92tA",
"dtype": "f8"
},
"yaxis": "y4"
@@ -5292,15 +5730,20 @@
"showlegend": true,
"type": "scatter",
"x": [
+ "2025-09-10T13:35:00.000000000",
+ "2025-09-10T13:42:00.000000000",
"2025-09-10T15:47:00.000000000",
- "2025-09-10T16:31:00.000000000",
- "2025-09-10T18:44:00.000000000",
- "2025-09-10T19:32:00.000000000",
+ "2025-09-10T16:05:00.000000000",
+ "2025-09-10T16:41:00.000000000",
+ "2025-09-10T16:46:00.000000000",
+ "2025-09-10T16:49:00.000000000",
+ "2025-09-10T19:10:00.000000000",
+ "2025-09-10T20:00:00.000000000",
"2025-09-10T21:03:00.000000000"
],
"xaxis": "x4",
"y": {
- "bdata": "SZs/jhzha0DMT3Kck9hrQEu/IZ0lyWtAfBkkV7Gla0AESwQqk9xrQA==",
+ "bdata": "ycKeoqXfa0AY2/YAzgVsQEmbP44c4WtAHJp3Xfvba0AVY+2Lj9xrQIpisYzX4mtAVhf0POzia0CAgbB3jtNrQHCm30tZq2tABEsEKpPca0A=",
"dtype": "f8"
},
"yaxis": "y4"
@@ -5316,15 +5759,20 @@
"showlegend": true,
"type": "scatter",
"x": [
- "2025-09-10T15:36:00.000000000",
- "2025-09-10T16:12:00.000000000",
+ "2025-09-10T13:34:00.000000000",
+ "2025-09-10T13:39:00.000000000",
+ "2025-09-10T15:30:00.000000000",
+ "2025-09-10T16:04:00.000000000",
+ "2025-09-10T16:10:00.000000000",
+ "2025-09-10T16:43:00.000000000",
+ "2025-09-10T16:47:00.000000000",
"2025-09-10T18:36:00.000000000",
- "2025-09-10T18:59:00.000000000",
- "2025-09-10T20:56:00.000000000"
+ "2025-09-10T19:11:00.000000000",
+ "2025-09-10T20:54:00.000000000"
],
"xaxis": "x4",
"y": {
- "bdata": "En8g5Srta0CK1wii19lrQLqGGJj5zWtAs+k+jR7Za0A65VHK8NBrQA==",
+ "bdata": "Q4ekiyzia0CRSXx9svdrQBU8Ec+46mtAP4RwSrnba0C4eRBrCNtrQMT+9q/j2GtAhodZlKnia0C6hhiY+c1rQDT+VFU8zWtAtBY7alzOa0A=",
"dtype": "f8"
},
"yaxis": "y4"
@@ -5344,13 +5792,25 @@
"showlegend": true,
"type": "scatter",
"x": [
+ "2025-09-10T13:58:00.000000000",
"2025-09-10T14:04:00.000000000",
- "2025-09-10T14:39:00.000000000",
- "2025-09-10T17:26:00.000000000"
+ "2025-09-10T14:45:00.000000000",
+ "2025-09-10T14:56:00.000000000",
+ "2025-09-10T15:05:00.000000000",
+ "2025-09-10T15:54:00.000000000",
+ "2025-09-10T17:02:00.000000000",
+ "2025-09-10T17:50:00.000000000",
+ "2025-09-10T18:01:00.000000000",
+ "2025-09-10T18:08:00.000000000",
+ "2025-09-10T18:15:00.000000000",
+ "2025-09-10T20:45:00.000000000",
+ "2025-09-10T21:17:00.000000000",
+ "2025-09-10T22:05:00.000000000",
+ "2025-09-10T22:26:00.000000000"
],
"xaxis": "x4",
"y": {
- "bdata": "34sJZ2kWbECSqahZodtrQL3Em2lBx2tA",
+ "bdata": "XZ20N90GbEDfiwlnaRZsQJcIj/Wb5mtAlY4tl/rda0BJwEjk+PdrQJTBJ3Q47WtAg/kIN3D5a0DbBg4Jst1rQKX1VKtW3GtAoD9426XVa0CSibN2FMlrQPF6hu+txWtAOIbhDtzda0DN6YWAM/VrQAvgM32i9WtA",
"dtype": "f8"
},
"yaxis": "y4"
@@ -5425,8 +5885,8 @@
"x0": "2025-09-10T11:30:00",
"x1": "2025-09-10T22:29:00",
"xref": "x",
- "y0": 1.75,
- "y1": 1.75,
+ "y0": 0.75,
+ "y1": 0.75,
"yref": "y"
},
{
@@ -5440,8 +5900,8 @@
"x0": "2025-09-10T11:30:00",
"x1": "2025-09-10T22:29:00",
"xref": "x",
- "y0": -1.75,
- "y1": -1.75,
+ "y0": -0.75,
+ "y1": -0.75,
"yref": "y"
},
{
@@ -5455,8 +5915,8 @@
"x0": "2025-09-10T11:30:00",
"x1": "2025-09-10T22:29:00",
"xref": "x",
- "y0": 1,
- "y1": 1,
+ "y0": 0.5,
+ "y1": 0.5,
"yref": "y"
},
{
@@ -5470,8 +5930,8 @@
"x0": "2025-09-10T11:30:00",
"x1": "2025-09-10T22:29:00",
"xref": "x",
- "y0": -1,
- "y1": -1,
+ "y0": -0.5,
+ "y1": -0.5,
"yref": "y"
},
{
@@ -6361,9 +6821,9 @@
},
"text/html": [
"