refactoring the code for pairs, models, strategy

This commit is contained in:
Oleg Sheynin
2025-07-30 04:08:02 +00:00
parent 71822c64b0
commit ed0c0fecb2
18 changed files with 3004 additions and 287 deletions
+17 -7
View File
@@ -195,6 +195,16 @@ def convert_timestamp(timestamp: Any) -> Optional[datetime]:
raise ValueError(f"Unsupported timestamp type: {type(timestamp)}")
class PairResarchResult:
pair_: TradingPair
trades_: Dict[str, Dict[str, Any]]
outstanding_positions_: List[Dict[str, Any]]
def __init__(self, config: Dict[str, Any], pair: TradingPair, trades: Dict[str, Dict[str, Any]], outstanding_positions: List[Dict[str, Any]]):
self.config = config
self.pair_ = pair
self.trades_ = trades
self.outstanding_positions_ = outstanding_positions
class BacktestResult:
"""
@@ -206,7 +216,7 @@ class BacktestResult:
self.trades: Dict[str, Dict[str, Any]] = {}
self.total_realized_pnl = 0.0
self.outstanding_positions: List[Dict[str, Any]] = []
self.pairs_trades_: Dict[str, List[Dict[str, Any]]] = {}
self.symbol_roundtrip_trades_: Dict[str, List[Dict[str, Any]]] = {}
def add_trade(
self,
@@ -334,7 +344,7 @@ class BacktestResult:
for filename, data in all_results.items():
pairs = list(data["trades"].keys())
for pair in pairs:
self.pairs_trades_[pair] = []
self.symbol_roundtrip_trades_[pair] = []
trades_dict = data["trades"][pair]
for symbol in trades_dict.keys():
trades.extend(trades_dict[symbol])
@@ -369,7 +379,7 @@ class BacktestResult:
pair_return = symbol_a_return + symbol_b_return
self.pairs_trades_[pair].append(
self.symbol_roundtrip_trades_[pair].append(
{
"symbol": symbol_a,
"open_side": trade_a_1["side"],
@@ -391,7 +401,7 @@ class BacktestResult:
"pair_return": pair_return
}
)
self.pairs_trades_[pair].append(
self.symbol_roundtrip_trades_[pair].append(
{
"symbol": symbol_b,
"open_side": trade_b_1["side"],
@@ -417,11 +427,11 @@ class BacktestResult:
# Print pair returns with disequilibrium information
day_return = 0.0
if pair in self.pairs_trades_:
if pair in self.symbol_roundtrip_trades_:
print(f"{pair}:")
pair_return = 0.0
for trd in self.pairs_trades_[pair]:
for trd in self.symbol_roundtrip_trades_[pair]:
disequil_info = ""
if (
trd["open_scaled_disequilibrium"] is not None
@@ -641,7 +651,7 @@ class BacktestResult:
for pair_name, _ in trades.items():
# Second pass: insert completed trade records into database
for trade_pair in sorted(self.pairs_trades_[pair_name], key=lambda x: x["open_time"]):
for trade_pair in sorted(self.symbol_roundtrip_trades_[pair_name], key=lambda x: x["open_time"]):
# Only store completed trades in pt_bt_results table
cursor.execute(
"""