Initial commit — BTC 5-minute binary options edge study
Reconstructed strategy engine + execution layer, trained XGBoost models, a manual trading tool, and the research writeup. Paper mode runs keyless over live WebSocket feeds; live trading requires your own wallet. No secrets committed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,400 @@
|
||||
{"strategy": "clob_volume", "ask": 0.59, "pm_a": 20.69, "left": 11.0, "rv_5m": 4.61, "rv_15m": 4.46, "sim_a_vol": 9.11, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "cheap_winner", "ask": 0.67, "pm_a": -50.95, "left": 35.0, "rv_5m": 4.01, "rv_15m": 3.75, "sim_a_vol": 11.33, "direction": "DOWN", "won": true, "pnl_5sh": 1.65}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": -52.0, "left": 140.0, "rv_5m": 6.03, "rv_15m": 5.75, "sim_a_vol": 14.16, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 53.71, "left": 140.0, "rv_5m": 2.35, "rv_15m": 1.85, "sim_a_vol": 4.8, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.92, "pm_a": -45.11, "left": 140.0, "rv_5m": 2.68, "rv_15m": 3.38, "sim_a_vol": 3.53, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.94, "pm_a": -63.11, "left": 119.0, "rv_5m": 3.32, "rv_15m": 5.03, "sim_a_vol": 22.97, "direction": "DOWN", "won": true, "pnl_5sh": 0.3}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": -9.31, "left": 250.0, "rv_5m": 2.52, "rv_15m": 2.85, "sim_a_vol": 9.98, "direction": "DOWN", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.29, "pm_a": 4.84, "left": 140.0, "rv_5m": 3.37, "rv_15m": 3.61, "sim_a_vol": 8.23, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -11.18, "left": 250.0, "rv_5m": 5.03, "rv_15m": 6.31, "sim_a_vol": 11.41, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": -75.22, "left": 140.0, "rv_5m": 2.24, "rv_15m": 1.78, "sim_a_vol": 13.75, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 86.39, "left": 140.0, "rv_5m": 3.81, "rv_15m": 3.81, "sim_a_vol": 6.44, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.64, "pm_a": 14.14, "left": 140.0, "rv_5m": 6.36, "rv_15m": 6.09, "sim_a_vol": 27.94, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "mid_flip", "ask": 0.42, "pm_a": -2.44, "left": 205.0, "rv_5m": 11.23, "rv_15m": 10.22, "sim_a_vol": 42.3, "direction": "DOWN", "won": false, "pnl_5sh": -2.1}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": 2.65, "left": 233.0, "rv_5m": 2.41, "rv_15m": 3.0, "sim_a_vol": 1.56, "direction": "DOWN", "won": true, "pnl_5sh": 2.5}
|
||||
{"strategy": "depth_cheap", "ask": 0.45, "pm_a": 11.5, "left": 248.0, "rv_5m": 4.82, "rv_15m": 5.41, "sim_a_vol": 7.82, "direction": "DOWN", "won": false, "pnl_5sh": -2.25}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.74, "pm_a": -15.31, "left": 140.0, "rv_5m": 5.0, "rv_15m": 4.18, "sim_a_vol": 6.08, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "maker_bias", "ask": 0.13, "pm_a": -85.07, "left": 200.0, "rv_5m": 4.15, "rv_15m": 5.67, "sim_a_vol": 9.77, "direction": "UP", "won": true, "pnl_5sh": 4.35}
|
||||
{"strategy": "maker_bias", "ask": 0.6, "pm_a": 14.65, "left": 200.0, "rv_5m": 2.13, "rv_15m": 2.23, "sim_a_vol": 3.91, "direction": "UP", "won": true, "pnl_5sh": 2.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.63, "pm_a": -14.76, "left": 140.0, "rv_5m": 0.0, "rv_15m": 0.0, "sim_a_vol": 15.83, "direction": "DOWN", "won": true, "pnl_5sh": 1.85}
|
||||
{"strategy": "lock", "ask": 0.96, "pm_a": -248.13, "left": 138.7, "rv_5m": 12.32, "rv_15m": 12.3, "sim_a_vol": 33.05, "direction": "DOWN", "won": true, "pnl_5sh": 0.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.7, "pm_a": 10.22, "left": 140.0, "rv_5m": 2.87, "rv_15m": 2.76, "sim_a_vol": 1.55, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_50", "ask": 0.94, "pm_a": 68.14, "left": 50.0, "rv_5m": 5.52, "rv_15m": 5.85, "sim_a_vol": 23.35, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 8.04, "left": 250.0, "rv_5m": 3.51, "rv_15m": 3.37, "sim_a_vol": 3.8, "direction": "UP", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "xgb_dir_10", "ask": 0.79, "pm_a": 35.43, "left": 15.0, "rv_5m": 5.75, "rv_15m": 5.87, "sim_a_vol": 19.52, "direction": "UP", "won": true, "pnl_5sh": 1.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.89, "pm_a": 67.42, "left": 140.0, "rv_5m": 5.81, "rv_15m": 5.78, "sim_a_vol": 17.41, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "spread_arb", "ask": 0.3, "pm_a": -43.91, "left": 282.0, "rv_5m": 7.24, "rv_15m": 5.17, "sim_a_vol": 3.09, "direction": "UP", "won": false, "pnl_5sh": -1.5}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -6.45, "left": 202.0, "rv_5m": 1.85, "rv_15m": 2.59, "sim_a_vol": 1.88, "direction": "DOWN", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.85, "pm_a": -34.11, "left": 140.0, "rv_5m": 3.56, "rv_15m": 4.41, "sim_a_vol": 13.14, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.72, "pm_a": -23.78, "left": 106.9, "rv_5m": 20.01, "rv_15m": 20.55, "sim_a_vol": 14.69, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -84.1, "left": 129.0, "rv_5m": 3.76, "rv_15m": 4.0, "sim_a_vol": 10.65, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.61, "pm_a": -3.95, "left": 140.0, "rv_5m": 2.55, "rv_15m": 2.84, "sim_a_vol": 3.53, "direction": "DOWN", "won": false, "pnl_5sh": -3.05}
|
||||
{"strategy": "depth_cheap", "ask": 0.55, "pm_a": -12.92, "left": 241.0, "rv_5m": 4.36, "rv_15m": 4.2, "sim_a_vol": 18.58, "direction": "DOWN", "won": true, "pnl_5sh": 2.25}
|
||||
{"strategy": "clob_momentum", "ask": 0.51, "pm_a": 3.29, "left": 29.0, "rv_5m": 4.95, "rv_15m": 4.54, "sim_a_vol": 4.37, "direction": "DOWN", "won": true, "pnl_5sh": 2.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.53, "pm_a": 8.38, "left": 140.0, "rv_5m": 2.92, "rv_15m": 3.59, "sim_a_vol": 3.99, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "maker_bias", "ask": 0.81, "pm_a": -18.39, "left": 85.0, "rv_5m": 2.57, "rv_15m": 3.01, "sim_a_vol": 2.57, "direction": "DOWN", "won": false, "pnl_5sh": -4.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.95, "pm_a": -106.34, "left": 140.0, "rv_5m": 7.68, "rv_15m": 5.92, "sim_a_vol": 12.93, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_hours", "ask": 0.45, "pm_a": 0.52, "left": 296.0, "rv_5m": 3.92, "rv_15m": 3.81, "sim_a_vol": 9.8, "direction": "DOWN", "won": true, "pnl_5sh": 2.75}
|
||||
{"strategy": "depth_cheap", "ask": 0.24, "pm_a": -11.34, "left": 241.0, "rv_5m": 2.52, "rv_15m": 4.03, "sim_a_vol": 19.06, "direction": "UP", "won": false, "pnl_5sh": -1.2}
|
||||
{"strategy": "depth_cheap", "ask": 0.54, "pm_a": -6.07, "left": 227.0, "rv_5m": 2.44, "rv_15m": 2.96, "sim_a_vol": 6.1, "direction": "UP", "won": true, "pnl_5sh": 2.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.69, "pm_a": -9.21, "left": 140.0, "rv_5m": 1.38, "rv_15m": 1.96, "sim_a_vol": 1.2, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "break", "ask": 0.53, "pm_a": -2.94, "left": 20.0, "rv_5m": 6.17, "rv_15m": 6.25, "sim_a_vol": 19.42, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.68, "pm_a": 18.4, "left": 140.0, "rv_5m": 4.45, "rv_15m": 4.08, "sim_a_vol": 16.32, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.72, "pm_a": -18.85, "left": 140.0, "rv_5m": 2.24, "rv_15m": 2.58, "sim_a_vol": 2.24, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.79, "pm_a": -27.73, "left": 140.0, "rv_5m": 3.32, "rv_15m": 3.41, "sim_a_vol": 2.01, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.09, "pm_a": -82.8, "left": 192.0, "rv_5m": 3.89, "rv_15m": 3.85, "sim_a_vol": 10.57, "direction": "UP", "won": false, "pnl_5sh": -0.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.82, "pm_a": 37.46, "left": 140.0, "rv_5m": 2.52, "rv_15m": 6.02, "sim_a_vol": 17.88, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.67, "pm_a": 19.86, "left": 140.0, "rv_5m": 4.54, "rv_15m": 5.1, "sim_a_vol": 1.51, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": -66.77, "left": 140.0, "rv_5m": 10.04, "rv_15m": 12.45, "sim_a_vol": 21.8, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.31, "pm_a": -54.9, "left": 241.0, "rv_5m": 9.16, "rv_15m": 9.23, "sim_a_vol": 17.78, "direction": "UP", "won": false, "pnl_5sh": -1.55}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.54, "pm_a": -3.98, "left": 140.0, "rv_5m": 1.7, "rv_15m": 2.57, "sim_a_vol": 5.58, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 2.2, "left": 40.0, "rv_5m": 9.41, "rv_15m": 7.88, "sim_a_vol": 29.84, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.71, "pm_a": -12.78, "left": 140.0, "rv_5m": 3.09, "rv_15m": 3.32, "sim_a_vol": 10.86, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.52, "pm_a": 13.07, "left": 250.0, "rv_5m": 7.37, "rv_15m": 9.29, "sim_a_vol": 9.98, "direction": "UP", "won": true, "pnl_5sh": 2.4}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": -73.56, "left": 140.0, "rv_5m": 5.39, "rv_15m": 6.2, "sim_a_vol": 9.81, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 6.54, "left": 241.0, "rv_5m": 4.19, "rv_15m": 3.42, "sim_a_vol": 24.27, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "spread_arb", "ask": 0.64, "pm_a": -20.15, "left": 287.0, "rv_5m": 2.05, "rv_15m": 4.87, "sim_a_vol": 7.4, "direction": "DOWN", "won": true, "pnl_5sh": 1.8}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.4, "pm_a": 8.85, "left": 140.0, "rv_5m": 1.9, "rv_15m": 2.35, "sim_a_vol": 4.51, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.53, "pm_a": 4.47, "left": 248.0, "rv_5m": 4.98, "rv_15m": 4.43, "sim_a_vol": 61.24, "direction": "DOWN", "won": false, "pnl_5sh": -2.65}
|
||||
{"strategy": "maker_bias", "ask": 0.62, "pm_a": 7.37, "left": 164.0, "rv_5m": 4.4, "rv_15m": 3.92, "sim_a_vol": 10.27, "direction": "UP", "won": true, "pnl_5sh": 1.9}
|
||||
{"strategy": "clob_rev", "ask": 0.22, "pm_a": -29.72, "left": 42.0, "rv_5m": 6.74, "rv_15m": 5.94, "sim_a_vol": 5.49, "direction": "UP", "won": false, "pnl_5sh": -1.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.91, "pm_a": 92.49, "left": 140.0, "rv_5m": 8.0, "rv_15m": 9.98, "sim_a_vol": 28.18, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.71, "pm_a": -11.56, "left": 140.0, "rv_5m": 1.39, "rv_15m": 1.45, "sim_a_vol": 3.67, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.67, "pm_a": 25.82, "left": 140.0, "rv_5m": 4.57, "rv_15m": 7.68, "sim_a_vol": 7.69, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "early_lock", "ask": 0.69, "pm_a": 50.23, "left": 226.0, "rv_5m": 5.84, "rv_15m": 6.62, "sim_a_vol": 22.05, "direction": "UP", "won": false, "pnl_5sh": -3.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.89, "pm_a": -43.39, "left": 140.0, "rv_5m": 4.57, "rv_15m": 3.32, "sim_a_vol": 5.57, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.42, "pm_a": 34.39, "left": 7.0, "rv_5m": 2.8, "rv_15m": 1.98, "sim_a_vol": 1.62, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.24, "pm_a": 54.35, "left": 230.0, "rv_5m": 25.95, "rv_15m": 19.8, "sim_a_vol": 22.84, "direction": "DOWN", "won": false, "pnl_5sh": 0.0}
|
||||
{"strategy": "cb_confirm", "ask": 0.7, "pm_a": -20.59, "left": 271.0, "rv_5m": 4.23, "rv_15m": 5.58, "sim_a_vol": 6.98, "direction": "DOWN", "won": false, "pnl_5sh": -3.5}
|
||||
{"strategy": "depth_cheap", "ask": 0.57, "pm_a": 18.31, "left": 227.0, "rv_5m": 4.91, "rv_15m": 4.26, "sim_a_vol": 9.89, "direction": "UP", "won": true, "pnl_5sh": 2.15}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.69, "pm_a": 28.01, "left": 137.0, "rv_5m": 3.16, "rv_15m": 4.21, "sim_a_vol": 5.96, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.36, "pm_a": -6.42, "left": 140.0, "rv_5m": 1.32, "rv_15m": 2.07, "sim_a_vol": 2.2, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.38, "pm_a": 0.16, "left": 292.1, "rv_5m": 3.89, "rv_15m": 4.47, "sim_a_vol": 43.83, "direction": "DOWN", "won": false, "pnl_5sh": -1.9}
|
||||
{"strategy": "depth_cheap", "ask": 0.47, "pm_a": 1.82, "left": 214.0, "rv_5m": 2.18, "rv_15m": 2.3, "sim_a_vol": 1.22, "direction": "DOWN", "won": true, "pnl_5sh": 2.65}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 24.22, "left": 218.0, "rv_5m": 5.57, "rv_15m": 5.19, "sim_a_vol": 11.6, "direction": "UP", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "edge_reversal", "ask": 0.12, "pm_a": 31.61, "left": 24.0, "rv_5m": 5.24, "rv_15m": 5.96, "sim_a_vol": 10.64, "direction": "DOWN", "won": false, "pnl_5sh": -0.6}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -19.66, "left": 247.0, "rv_5m": 6.57, "rv_15m": 7.13, "sim_a_vol": 47.91, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "open_hedge", "ask": 0.32, "pm_a": -37.68, "left": 245.5, "rv_5m": 5.52, "rv_15m": 8.52, "sim_a_vol": 33.3, "direction": "UP", "won": false, "pnl_5sh": -1.6}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.91, "pm_a": 46.12, "left": 140.0, "rv_5m": 2.68, "rv_15m": 3.23, "sim_a_vol": 5.09, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.9, "pm_a": 129.07, "left": 139.9, "rv_5m": 8.84, "rv_15m": 8.84, "sim_a_vol": 48.36, "direction": "UP", "won": false, "pnl_5sh": -4.5}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": -26.18, "left": 250.0, "rv_5m": 6.69, "rv_15m": 6.98, "sim_a_vol": 11.32, "direction": "DOWN", "won": true, "pnl_5sh": 2.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": -24.94, "left": 140.0, "rv_5m": 3.48, "rv_15m": 3.85, "sim_a_vol": 4.5, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.9, "pm_a": -38.15, "left": 140.0, "rv_5m": 3.3, "rv_15m": 2.48, "sim_a_vol": 5.45, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.99, "pm_a": -65.06, "left": 42.0, "rv_5m": 5.47, "rv_15m": 4.49, "sim_a_vol": 24.24, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": 94.07, "left": 140.0, "rv_5m": 4.87, "rv_15m": 6.24, "sim_a_vol": 9.43, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": 17.4, "left": 224.0, "rv_5m": 5.39, "rv_15m": 4.03, "sim_a_vol": 9.14, "direction": "DOWN", "won": false, "pnl_5sh": -2.5}
|
||||
{"strategy": "lock", "ask": 0.99, "pm_a": -63.09, "left": 41.0, "rv_5m": 3.22, "rv_15m": 5.49, "sim_a_vol": 4.38, "direction": "DOWN", "won": true, "pnl_5sh": 0.05}
|
||||
{"strategy": "lock", "ask": 0.95, "pm_a": 120.81, "left": 140.0, "rv_5m": 5.99, "rv_15m": 5.8, "sim_a_vol": 16.2, "direction": "UP", "won": true, "pnl_5sh": 0.25}
|
||||
{"strategy": "mid_flip", "ask": 0.25, "pm_a": -12.6, "left": 96.0, "rv_5m": 2.61, "rv_15m": 4.55, "sim_a_vol": 9.81, "direction": "UP", "won": true, "pnl_5sh": 3.75}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.59, "pm_a": 24.27, "left": 140.0, "rv_5m": 2.39, "rv_15m": 2.74, "sim_a_vol": 2.82, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.82, "pm_a": -51.98, "left": 140.0, "rv_5m": 5.03, "rv_15m": 6.73, "sim_a_vol": 3.49, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.78, "pm_a": 23.45, "left": 39.0, "rv_5m": 4.29, "rv_15m": 2.93, "sim_a_vol": 8.84, "direction": "UP", "won": true, "pnl_5sh": 1.1}
|
||||
{"strategy": "xgb_dir_50", "ask": 0.83, "pm_a": -20.83, "left": 50.0, "rv_5m": 3.78, "rv_15m": 4.2, "sim_a_vol": 4.64, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.97, "pm_a": 166.57, "left": 140.0, "rv_5m": 8.75, "rv_15m": 6.94, "sim_a_vol": 14.67, "direction": "UP", "won": true, "pnl_5sh": 0.15}
|
||||
{"strategy": "open_hedge", "ask": 0.38, "pm_a": 4.51, "left": 20.5, "rv_5m": 4.29, "rv_15m": 6.86, "sim_a_vol": 2.34, "direction": "UP", "won": true, "pnl_5sh": 3.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.9, "pm_a": 39.74, "left": 140.0, "rv_5m": 2.19, "rv_15m": 3.95, "sim_a_vol": 6.95, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 41.06, "left": 169.0, "rv_5m": 7.36, "rv_15m": 5.67, "sim_a_vol": 7.46, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "depth_cheap", "ask": 0.11, "pm_a": -54.43, "left": 122.0, "rv_5m": 4.72, "rv_15m": 5.33, "sim_a_vol": 8.06, "direction": "UP", "won": false, "pnl_5sh": -0.55}
|
||||
{"strategy": "depth_cheap", "ask": 0.48, "pm_a": -6.88, "left": 249.0, "rv_5m": 3.79, "rv_15m": 4.23, "sim_a_vol": 25.6, "direction": "DOWN", "won": true, "pnl_5sh": 2.6}
|
||||
{"strategy": "cheap_winner", "ask": 0.57, "pm_a": -32.94, "left": 24.0, "rv_5m": 2.55, "rv_15m": 2.57, "sim_a_vol": 0.73, "direction": "DOWN", "won": true, "pnl_5sh": 2.15}
|
||||
{"strategy": "cheap_winner", "ask": 0.44, "pm_a": -13.76, "left": 33.0, "rv_5m": 4.28, "rv_15m": 4.12, "sim_a_vol": 7.63, "direction": "UP", "won": true, "pnl_5sh": 2.8}
|
||||
{"strategy": "spread_arb", "ask": 0.63, "pm_a": -28.11, "left": 263.0, "rv_5m": 3.24, "rv_15m": 3.22, "sim_a_vol": 14.14, "direction": "DOWN", "won": true, "pnl_5sh": 1.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.54, "pm_a": 44.49, "left": 158.0, "rv_5m": 2.03, "rv_15m": 2.15, "sim_a_vol": 3.78, "direction": "UP", "won": true, "pnl_5sh": 2.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.59, "pm_a": -5.87, "left": 140.0, "rv_5m": 3.75, "rv_15m": 6.11, "sim_a_vol": 9.81, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": -27.18, "left": 250.0, "rv_5m": 4.43, "rv_15m": 4.06, "sim_a_vol": 30.14, "direction": "DOWN", "won": false, "pnl_5sh": -2.8}
|
||||
{"strategy": "spread_arb", "ask": 0.6, "pm_a": -13.09, "left": 284.0, "rv_5m": 3.74, "rv_15m": 3.61, "sim_a_vol": 8.84, "direction": "DOWN", "won": true, "pnl_5sh": 2.0}
|
||||
{"strategy": "last7s", "ask": 0.92, "pm_a": 44.4, "left": 19.9, "rv_5m": 2.76, "rv_15m": 3.6, "sim_a_vol": 18.56, "direction": "UP", "won": true, "pnl_5sh": 0.4}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.62, "pm_a": 5.8, "left": 140.0, "rv_5m": 3.5, "rv_15m": 3.6, "sim_a_vol": 5.57, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.46, "pm_a": -8.81, "left": 157.0, "rv_5m": 2.68, "rv_15m": 4.47, "sim_a_vol": 5.53, "direction": "UP", "won": false, "pnl_5sh": -2.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.67, "pm_a": -23.21, "left": 140.0, "rv_5m": 3.11, "rv_15m": 3.38, "sim_a_vol": 12.06, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cb_flip", "ask": 0.52, "pm_a": -8.83, "left": 29.4, "rv_5m": 3.44, "rv_15m": 3.83, "sim_a_vol": 5.22, "direction": "UP", "won": false, "pnl_5sh": -3.6}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.92, "pm_a": 26.77, "left": 140.0, "rv_5m": 1.97, "rv_15m": 2.12, "sim_a_vol": 10.14, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 1.0, "pm_a": 0.0, "left": 299.8, "rv_5m": 8.96, "rv_15m": 7.51, "sim_a_vol": 28.92, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "last_flip", "ask": 0.51, "pm_a": 10.01, "left": 30.0, "rv_5m": 3.07, "rv_15m": 3.75, "sim_a_vol": 11.32, "direction": "UP", "won": true, "pnl_5sh": 2.45}
|
||||
{"strategy": "last7s", "ask": 1.0, "pm_a": -192.28, "left": 19.7, "rv_5m": 5.05, "rv_15m": 4.69, "sim_a_vol": 15.06, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "maker_bias", "ask": 0.93, "pm_a": -42.94, "left": 200.0, "rv_5m": 2.52, "rv_15m": 2.76, "sim_a_vol": 7.89, "direction": "DOWN", "won": true, "pnl_5sh": 0.35}
|
||||
{"strategy": "depth_cheap", "ask": 0.51, "pm_a": 11.64, "left": 250.0, "rv_5m": 4.81, "rv_15m": 4.01, "sim_a_vol": 46.38, "direction": "UP", "won": false, "pnl_5sh": -2.55}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": -36.0, "left": 216.0, "rv_5m": 5.65, "rv_15m": 5.2, "sim_a_vol": 6.3, "direction": "DOWN", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "depth_cheap", "ask": 0.52, "pm_a": 8.75, "left": 241.0, "rv_5m": 4.01, "rv_15m": 4.73, "sim_a_vol": 9.34, "direction": "DOWN", "won": false, "pnl_5sh": -2.6}
|
||||
{"strategy": "depth_cheap", "ask": 0.23, "pm_a": 27.45, "left": 208.0, "rv_5m": 6.44, "rv_15m": 5.74, "sim_a_vol": 14.46, "direction": "DOWN", "won": true, "pnl_5sh": 3.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": 43.63, "left": 250.0, "rv_5m": 5.44, "rv_15m": 5.59, "sim_a_vol": 25.44, "direction": "UP", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": -21.01, "left": 245.0, "rv_5m": 3.09, "rv_15m": 3.96, "sim_a_vol": 17.85, "direction": "DOWN", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.9, "pm_a": 49.13, "left": 140.0, "rv_5m": 3.76, "rv_15m": 4.85, "sim_a_vol": 10.32, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cb_confirm", "ask": 0.7, "pm_a": -7.87, "left": 226.0, "rv_5m": 3.47, "rv_15m": 4.29, "sim_a_vol": 6.68, "direction": "DOWN", "won": true, "pnl_5sh": 1.5}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.64, "pm_a": -8.19, "left": 140.0, "rv_5m": 1.43, "rv_15m": 1.81, "sim_a_vol": 1.49, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 1.0, "pm_a": 92.5, "left": 3.0, "rv_5m": 4.97, "rv_15m": 4.52, "sim_a_vol": 11.09, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.84, "pm_a": -51.05, "left": 140.0, "rv_5m": 6.17, "rv_15m": 10.72, "sim_a_vol": 10.26, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.12, "pm_a": 47.9, "left": 192.0, "rv_5m": 3.23, "rv_15m": 2.88, "sim_a_vol": 6.19, "direction": "DOWN", "won": false, "pnl_5sh": -0.6}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.86, "pm_a": 49.1, "left": 140.0, "rv_5m": 3.45, "rv_15m": 3.41, "sim_a_vol": 10.46, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "spread_arb", "ask": 0.33, "pm_a": -32.75, "left": 269.0, "rv_5m": 5.47, "rv_15m": 6.9, "sim_a_vol": 26.04, "direction": "UP", "won": true, "pnl_5sh": 3.35}
|
||||
{"strategy": "depth_cheap", "ask": 0.41, "pm_a": 16.39, "left": 239.0, "rv_5m": 2.76, "rv_15m": 2.97, "sim_a_vol": 6.87, "direction": "UP", "won": true, "pnl_5sh": 2.95}
|
||||
{"strategy": "lock", "ask": 0.95, "pm_a": -62.38, "left": 116.0, "rv_5m": 5.25, "rv_15m": 4.53, "sim_a_vol": 8.02, "direction": "DOWN", "won": true, "pnl_5sh": 0.25}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.88, "pm_a": 60.78, "left": 140.0, "rv_5m": 2.54, "rv_15m": 2.6, "sim_a_vol": 11.37, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "last7s", "ask": 0.97, "pm_a": -52.32, "left": 19.3, "rv_5m": 4.25, "rv_15m": 4.78, "sim_a_vol": 7.37, "direction": "DOWN", "won": true, "pnl_5sh": 0.15}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.46, "pm_a": 3.37, "left": 140.0, "rv_5m": 3.09, "rv_15m": 3.37, "sim_a_vol": 2.82, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.97, "pm_a": 62.34, "left": 140.0, "rv_5m": 3.83, "rv_15m": 3.96, "sim_a_vol": 3.84, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "spread_arb", "ask": 0.32, "pm_a": -57.48, "left": 261.0, "rv_5m": 5.12, "rv_15m": 5.09, "sim_a_vol": 48.61, "direction": "UP", "won": false, "pnl_5sh": -1.6}
|
||||
{"strategy": "depth_cheap", "ask": 0.55, "pm_a": -5.25, "left": 244.0, "rv_5m": 4.03, "rv_15m": 4.13, "sim_a_vol": 20.91, "direction": "DOWN", "won": true, "pnl_5sh": 2.25}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 27.06, "left": 250.0, "rv_5m": 6.8, "rv_15m": 7.89, "sim_a_vol": 14.9, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "mid_flip", "ask": 0.38, "pm_a": -17.38, "left": 123.0, "rv_5m": 6.62, "rv_15m": 4.51, "sim_a_vol": 13.36, "direction": "UP", "won": false, "pnl_5sh": -1.9}
|
||||
{"strategy": "spread_arb", "ask": 0.34, "pm_a": -24.0, "left": 279.0, "rv_5m": 5.08, "rv_15m": 7.41, "sim_a_vol": 24.13, "direction": "UP", "won": true, "pnl_5sh": 3.3}
|
||||
{"strategy": "depth_cheap", "ask": 0.55, "pm_a": 7.16, "left": 238.0, "rv_5m": 4.14, "rv_15m": 3.85, "sim_a_vol": 9.44, "direction": "UP", "won": true, "pnl_5sh": 2.25}
|
||||
{"strategy": "depth_cheap", "ask": 0.57, "pm_a": -19.52, "left": 250.0, "rv_5m": 6.91, "rv_15m": 6.26, "sim_a_vol": 17.41, "direction": "DOWN", "won": false, "pnl_5sh": -2.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": 7.09, "left": 138.0, "rv_5m": 4.95, "rv_15m": 5.03, "sim_a_vol": 2.85, "direction": "UP", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": -140.6, "left": 140.0, "rv_5m": 8.66, "rv_15m": 5.5, "sim_a_vol": 20.92, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.52, "pm_a": -8.79, "left": 140.0, "rv_5m": 5.97, "rv_15m": 4.72, "sim_a_vol": 13.12, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.94, "pm_a": 51.62, "left": 134.1, "rv_5m": 3.67, "rv_15m": 4.26, "sim_a_vol": 2.21, "direction": "UP", "won": true, "pnl_5sh": 0.3}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": 13.35, "left": 218.0, "rv_5m": 4.59, "rv_15m": 6.19, "sim_a_vol": 16.54, "direction": "UP", "won": true, "pnl_5sh": 2.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": -21.61, "left": 140.0, "rv_5m": 3.5, "rv_15m": 3.52, "sim_a_vol": 10.14, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.82, "pm_a": 36.24, "left": 140.0, "rv_5m": 4.22, "rv_15m": 4.39, "sim_a_vol": 7.2, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.35, "pm_a": 15.74, "left": 217.0, "rv_5m": 1.7, "rv_15m": 2.99, "sim_a_vol": 2.8, "direction": "DOWN", "won": false, "pnl_5sh": -1.75}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": 85.05, "left": 140.0, "rv_5m": 4.25, "rv_15m": 4.02, "sim_a_vol": 17.41, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.67, "pm_a": -38.08, "left": 140.0, "rv_5m": 9.7, "rv_15m": 8.05, "sim_a_vol": 12.57, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.63, "pm_a": 38.96, "left": 140.0, "rv_5m": 2.45, "rv_15m": 2.36, "sim_a_vol": 8.5, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 1.0, "pm_a": 0.0, "left": 300.0, "rv_5m": 7.04, "rv_15m": 6.54, "sim_a_vol": 14.05, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.51, "pm_a": -7.33, "left": 250.0, "rv_5m": 4.17, "rv_15m": 5.15, "sim_a_vol": 5.12, "direction": "DOWN", "won": true, "pnl_5sh": 2.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": -10.24, "left": 140.0, "rv_5m": 2.16, "rv_15m": 3.04, "sim_a_vol": 5.75, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.31, "pm_a": 27.2, "left": 199.0, "rv_5m": 1.11, "rv_15m": 1.14, "sim_a_vol": 4.56, "direction": "DOWN", "won": false, "pnl_5sh": -1.55}
|
||||
{"strategy": "lock", "ask": 0.88, "pm_a": -62.91, "left": 116.0, "rv_5m": 5.1, "rv_15m": 7.54, "sim_a_vol": 15.18, "direction": "DOWN", "won": false, "pnl_5sh": -4.4}
|
||||
{"strategy": "depth_cheap", "ask": 0.04, "pm_a": -149.41, "left": 218.0, "rv_5m": 4.2, "rv_15m": 3.31, "sim_a_vol": 47.4, "direction": "UP", "won": false, "pnl_5sh": -0.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.74, "pm_a": 12.57, "left": 140.0, "rv_5m": 1.73, "rv_15m": 2.7, "sim_a_vol": 5.85, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.54, "pm_a": -5.66, "left": 140.0, "rv_5m": 3.76, "rv_15m": 4.17, "sim_a_vol": 2.86, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 1.0, "pm_a": -8.46, "left": 136.0, "rv_5m": 12.65, "rv_15m": 20.59, "sim_a_vol": 19.67, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": 6.65, "left": 140.0, "rv_5m": 1.5, "rv_15m": 1.73, "sim_a_vol": 4.62, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.68, "pm_a": 10.42, "left": 140.0, "rv_5m": 2.46, "rv_15m": 2.56, "sim_a_vol": 6.18, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.29, "pm_a": 28.06, "left": 216.0, "rv_5m": 2.38, "rv_15m": 3.17, "sim_a_vol": 6.98, "direction": "DOWN", "won": false, "pnl_5sh": -1.45}
|
||||
{"strategy": "depth_cheap", "ask": 0.32, "pm_a": -11.41, "left": 249.0, "rv_5m": 26.55, "rv_15m": 20.11, "sim_a_vol": 20.14, "direction": "DOWN", "won": false, "pnl_5sh": -1.6}
|
||||
{"strategy": "mid_flip", "ask": 0.47, "pm_a": -15.06, "left": 240.0, "rv_5m": 5.65, "rv_15m": 4.58, "sim_a_vol": 15.32, "direction": "UP", "won": true, "pnl_5sh": 2.65}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.65, "pm_a": -23.72, "left": 140.0, "rv_5m": 7.6, "rv_15m": 7.15, "sim_a_vol": 11.1, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "spread_arb", "ask": 0.63, "pm_a": 21.58, "left": 260.0, "rv_5m": 4.03, "rv_15m": 3.83, "sim_a_vol": 30.22, "direction": "UP", "won": true, "pnl_5sh": 1.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.42, "pm_a": 4.28, "left": 186.0, "rv_5m": 3.14, "rv_15m": 3.23, "sim_a_vol": 2.95, "direction": "DOWN", "won": false, "pnl_5sh": -2.1}
|
||||
{"strategy": "xgb_dir_250", "ask": 0.41, "pm_a": -7.53, "left": 260.0, "rv_5m": 3.58, "rv_15m": 4.07, "sim_a_vol": 30.11, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.55, "pm_a": 15.05, "left": 140.0, "rv_5m": 3.52, "rv_15m": 5.38, "sim_a_vol": 5.66, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.44, "pm_a": 4.34, "left": 198.0, "rv_5m": 3.0, "rv_15m": 2.72, "sim_a_vol": 3.82, "direction": "DOWN", "won": false, "pnl_5sh": -2.2}
|
||||
{"strategy": "lock", "ask": 0.61, "pm_a": 60.01, "left": 134.0, "rv_5m": 19.73, "rv_15m": 18.16, "sim_a_vol": 25.04, "direction": "UP", "won": true, "pnl_5sh": 1.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.95, "pm_a": -97.38, "left": 140.0, "rv_5m": 13.62, "rv_15m": 9.36, "sim_a_vol": 12.35, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "maker_bias", "ask": 0.31, "pm_a": -47.61, "left": 176.0, "rv_5m": 6.61, "rv_15m": 5.89, "sim_a_vol": 9.03, "direction": "UP", "won": true, "pnl_5sh": 3.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.38, "pm_a": 15.8, "left": 140.0, "rv_5m": 3.76, "rv_15m": 2.75, "sim_a_vol": 1.97, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.52, "pm_a": -0.96, "left": 242.0, "rv_5m": 3.9, "rv_15m": 3.5, "sim_a_vol": 18.65, "direction": "DOWN", "won": true, "pnl_5sh": 2.4}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.68, "pm_a": -35.32, "left": 140.0, "rv_5m": 3.86, "rv_15m": 3.17, "sim_a_vol": 2.88, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.95, "pm_a": 52.15, "left": 140.0, "rv_5m": 3.04, "rv_15m": 2.46, "sim_a_vol": 5.56, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.97, "pm_a": 94.41, "left": 140.0, "rv_5m": 4.82, "rv_15m": 4.28, "sim_a_vol": 12.62, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.4, "pm_a": 6.93, "left": 140.0, "rv_5m": 2.25, "rv_15m": 2.19, "sim_a_vol": 1.37, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.55, "pm_a": 12.35, "left": 294.5, "rv_5m": 9.04, "rv_15m": 7.46, "sim_a_vol": 52.54, "direction": "UP", "won": false, "pnl_5sh": -2.75}
|
||||
{"strategy": "open_hedge", "ask": 0.58, "pm_a": 14.97, "left": 294.4, "rv_5m": 4.86, "rv_15m": 5.13, "sim_a_vol": 46.91, "direction": "UP", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": -17.68, "left": 140.0, "rv_5m": 2.39, "rv_15m": 3.1, "sim_a_vol": 4.85, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.85, "pm_a": 30.31, "left": 140.0, "rv_5m": 3.22, "rv_15m": 3.24, "sim_a_vol": 3.93, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.52, "pm_a": 1.78, "left": 242.0, "rv_5m": 4.75, "rv_15m": 3.77, "sim_a_vol": 21.55, "direction": "UP", "won": true, "pnl_5sh": 2.4}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": -53.07, "left": 140.0, "rv_5m": 2.36, "rv_15m": 2.8, "sim_a_vol": 4.93, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": -21.33, "left": 240.0, "rv_5m": 3.77, "rv_15m": 3.78, "sim_a_vol": 31.56, "direction": "DOWN", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.79, "pm_a": 15.47, "left": 140.0, "rv_5m": 1.15, "rv_15m": 1.25, "sim_a_vol": 2.25, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "maker_bias", "ask": 0.72, "pm_a": -37.52, "left": 200.0, "rv_5m": 5.35, "rv_15m": 6.24, "sim_a_vol": 23.14, "direction": "DOWN", "won": false, "pnl_5sh": -3.6}
|
||||
{"strategy": "depth_cheap", "ask": 0.53, "pm_a": 11.38, "left": 216.0, "rv_5m": 1.85, "rv_15m": 1.33, "sim_a_vol": 3.29, "direction": "UP", "won": false, "pnl_5sh": -2.65}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": 19.97, "left": 140.0, "rv_5m": 3.63, "rv_15m": 2.87, "sim_a_vol": 4.57, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.58, "pm_a": -22.49, "left": 140.0, "rv_5m": 73.22, "rv_15m": 42.63, "sim_a_vol": 9.67, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.95, "pm_a": 71.62, "left": 140.0, "rv_5m": 4.25, "rv_15m": 3.68, "sim_a_vol": 9.76, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_100", "ask": 0.6, "pm_a": 9.25, "left": 110.0, "rv_5m": 3.93, "rv_15m": 3.45, "sim_a_vol": 5.4, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -29.75, "left": 109.0, "rv_5m": 2.89, "rv_15m": 3.26, "sim_a_vol": 5.59, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "depth_cheap", "ask": 0.49, "pm_a": -1.43, "left": 188.0, "rv_5m": 3.07, "rv_15m": 3.69, "sim_a_vol": 2.02, "direction": "UP", "won": true, "pnl_5sh": 2.55}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.95, "pm_a": -65.45, "left": 140.0, "rv_5m": 2.64, "rv_15m": 2.97, "sim_a_vol": 2.4, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.56, "pm_a": 7.66, "left": 140.0, "rv_5m": 2.4, "rv_15m": 2.61, "sim_a_vol": 3.33, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.43, "pm_a": 4.05, "left": 150.0, "rv_5m": 1.89, "rv_15m": 2.35, "sim_a_vol": 4.37, "direction": "UP", "won": false, "pnl_5sh": -2.15}
|
||||
{"strategy": "lock", "ask": 0.98, "pm_a": -62.92, "left": 71.0, "rv_5m": 2.59, "rv_15m": 2.72, "sim_a_vol": 13.07, "direction": "DOWN", "won": true, "pnl_5sh": 0.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.84, "pm_a": 35.25, "left": 140.0, "rv_5m": 6.21, "rv_15m": 7.16, "sim_a_vol": 11.39, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_hours", "ask": 0.45, "pm_a": -5.08, "left": 288.0, "rv_5m": 5.56, "rv_15m": 4.68, "sim_a_vol": 22.92, "direction": "UP", "won": true, "pnl_5sh": 2.75}
|
||||
{"strategy": "depth_cheap", "ask": 0.34, "pm_a": 14.56, "left": 146.0, "rv_5m": 4.14, "rv_15m": 4.14, "sim_a_vol": 22.06, "direction": "DOWN", "won": false, "pnl_5sh": -1.7}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.64, "pm_a": 2.72, "left": 140.0, "rv_5m": 4.3, "rv_15m": 4.02, "sim_a_vol": 8.18, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "bounce", "ask": 0.75, "pm_a": -27.6, "left": 50.0, "rv_5m": 2.3, "rv_15m": 2.73, "sim_a_vol": 4.12, "direction": "DOWN", "won": false, "pnl_5sh": -3.75}
|
||||
{"strategy": "last_flip", "ask": 0.94, "pm_a": -0.95, "left": 3.0, "rv_5m": 5.19, "rv_15m": 4.58, "sim_a_vol": 3.14, "direction": "DOWN", "won": true, "pnl_5sh": 0.3}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": 7.05, "left": 235.0, "rv_5m": 4.08, "rv_15m": 4.15, "sim_a_vol": 16.94, "direction": "UP", "won": false, "pnl_5sh": -2.8}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.58, "pm_a": -8.1, "left": 140.0, "rv_5m": 4.02, "rv_15m": 3.82, "sim_a_vol": 8.66, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 1.0, "pm_a": 0.0, "left": 299.8, "rv_5m": 7.39, "rv_15m": 8.2, "sim_a_vol": 14.23, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.53, "pm_a": -12.41, "left": 244.0, "rv_5m": 8.19, "rv_15m": 9.64, "sim_a_vol": 107.62, "direction": "DOWN", "won": true, "pnl_5sh": 2.35}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 31.15, "left": 140.0, "rv_5m": 1.6, "rv_15m": 2.09, "sim_a_vol": 10.94, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.12, "pm_a": 49.56, "left": 154.0, "rv_5m": 3.43, "rv_15m": 3.91, "sim_a_vol": 4.96, "direction": "DOWN", "won": false, "pnl_5sh": -0.6}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 108.77, "left": 140.0, "rv_5m": 3.88, "rv_15m": 5.55, "sim_a_vol": 10.98, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.34, "pm_a": 33.6, "left": 242.0, "rv_5m": 4.02, "rv_15m": 3.65, "sim_a_vol": 33.63, "direction": "DOWN", "won": true, "pnl_5sh": 3.3}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": -12.21, "left": 214.0, "rv_5m": 2.15, "rv_15m": 2.55, "sim_a_vol": 4.11, "direction": "DOWN", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": -3.44, "left": 246.0, "rv_5m": 5.03, "rv_15m": 6.8, "sim_a_vol": 46.38, "direction": "UP", "won": true, "pnl_5sh": 2.2}
|
||||
{"strategy": "depth_cheap", "ask": 0.43, "pm_a": 29.52, "left": 249.0, "rv_5m": 3.37, "rv_15m": 3.66, "sim_a_vol": 19.42, "direction": "UP", "won": true, "pnl_5sh": 2.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -20.04, "left": 248.0, "rv_5m": 5.1, "rv_15m": 5.64, "sim_a_vol": 34.78, "direction": "DOWN", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "depth_cheap", "ask": 0.55, "pm_a": 0.61, "left": 231.0, "rv_5m": 3.61, "rv_15m": 3.91, "sim_a_vol": 7.61, "direction": "UP", "won": false, "pnl_5sh": -2.75}
|
||||
{"strategy": "cb_flip", "ask": 0.19, "pm_a": -34.98, "left": 28.0, "rv_5m": 10.45, "rv_15m": 9.32, "sim_a_vol": 34.81, "direction": "UP", "won": false, "pnl_5sh": -1.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": 92.48, "left": 140.0, "rv_5m": 6.86, "rv_15m": 6.63, "sim_a_vol": 14.82, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.66, "pm_a": -11.89, "left": 140.0, "rv_5m": 3.1, "rv_15m": 2.82, "sim_a_vol": 4.26, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": -56.6, "left": 140.0, "rv_5m": 4.88, "rv_15m": 3.98, "sim_a_vol": 3.82, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "bounce", "ask": 0.73, "pm_a": -21.14, "left": 43.0, "rv_5m": 3.97, "rv_15m": 5.16, "sim_a_vol": 11.34, "direction": "DOWN", "won": true, "pnl_5sh": 1.35}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.94, "pm_a": 57.89, "left": 140.0, "rv_5m": 2.97, "rv_15m": 4.14, "sim_a_vol": 9.94, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -9.31, "left": 209.0, "rv_5m": 3.14, "rv_15m": 4.28, "sim_a_vol": 2.03, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 53.65, "left": 140.0, "rv_5m": 3.65, "rv_15m": 3.9, "sim_a_vol": 4.69, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -13.1, "left": 248.0, "rv_5m": 3.98, "rv_15m": 3.87, "sim_a_vol": 20.66, "direction": "DOWN", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "lock", "ask": 0.93, "pm_a": 78.16, "left": 140.0, "rv_5m": 5.65, "rv_15m": 6.05, "sim_a_vol": 20.72, "direction": "UP", "won": true, "pnl_5sh": 0.35}
|
||||
{"strategy": "xgb_dir_50", "ask": 0.96, "pm_a": -82.25, "left": 60.0, "rv_5m": 5.58, "rv_15m": 7.97, "sim_a_vol": 11.78, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.74, "pm_a": -26.96, "left": 140.0, "rv_5m": 5.51, "rv_15m": 5.98, "sim_a_vol": 6.41, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.55, "pm_a": -11.73, "left": 182.0, "rv_5m": 2.94, "rv_15m": 2.46, "sim_a_vol": 15.15, "direction": "DOWN", "won": true, "pnl_5sh": 2.25}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 137.52, "left": 140.0, "rv_5m": 6.15, "rv_15m": 5.6, "sim_a_vol": 19.23, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.16, "pm_a": 19.73, "left": 26.0, "rv_5m": 36.74, "rv_15m": 33.82, "sim_a_vol": 137.31, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "mid_flip", "ask": 0.37, "pm_a": -10.59, "left": 52.0, "rv_5m": 3.89, "rv_15m": 4.03, "sim_a_vol": 15.96, "direction": "UP", "won": false, "pnl_5sh": -1.85}
|
||||
{"strategy": "depth_cheap", "ask": 0.57, "pm_a": 5.84, "left": 245.0, "rv_5m": 3.07, "rv_15m": 2.62, "sim_a_vol": 21.57, "direction": "UP", "won": true, "pnl_5sh": 2.15}
|
||||
{"strategy": "clob_rev", "ask": 0.25, "pm_a": -40.78, "left": 53.8, "rv_5m": 5.91, "rv_15m": 6.94, "sim_a_vol": 17.62, "direction": "UP", "won": false, "pnl_5sh": -1.25}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": -26.93, "left": 140.0, "rv_5m": 3.71, "rv_15m": 4.04, "sim_a_vol": 6.39, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.65, "pm_a": 15.96, "left": 140.0, "rv_5m": 1.96, "rv_15m": 2.73, "sim_a_vol": 3.86, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_hours", "ask": 0.44, "pm_a": 10.82, "left": 294.0, "rv_5m": 3.6, "rv_15m": 3.51, "sim_a_vol": 13.13, "direction": "DOWN", "won": false, "pnl_5sh": -2.2}
|
||||
{"strategy": "open_hedge", "ask": 0.51, "pm_a": -4.81, "left": 294.6, "rv_5m": 3.29, "rv_15m": 4.33, "sim_a_vol": 6.68, "direction": "UP", "won": false, "pnl_5sh": -2.55}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": 6.03, "left": 117.0, "rv_5m": 3.84, "rv_15m": 3.68, "sim_a_vol": 12.24, "direction": "DOWN", "won": false, "pnl_5sh": -2.5}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.62, "pm_a": 10.4, "left": 140.0, "rv_5m": 3.2, "rv_15m": 3.5, "sim_a_vol": 8.49, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 35.81, "left": 140.0, "rv_5m": 1.28, "rv_15m": 2.94, "sim_a_vol": 10.17, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.96, "pm_a": -60.06, "left": 58.0, "rv_5m": 4.8, "rv_15m": 4.53, "sim_a_vol": 11.29, "direction": "DOWN", "won": true, "pnl_5sh": 0.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.78, "pm_a": -17.36, "left": 140.0, "rv_5m": 2.36, "rv_15m": 2.59, "sim_a_vol": 4.73, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.59, "pm_a": 4.35, "left": 31.0, "rv_5m": 2.58, "rv_15m": 2.0, "sim_a_vol": 7.68, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -110.58, "left": 140.0, "rv_5m": 5.73, "rv_15m": 4.51, "sim_a_vol": 33.09, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": 52.36, "left": 140.0, "rv_5m": 4.02, "rv_15m": 4.49, "sim_a_vol": 10.15, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.59, "pm_a": -25.6, "left": 294.3, "rv_5m": 7.58, "rv_15m": 8.79, "sim_a_vol": 36.7, "direction": "DOWN", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.49, "pm_a": 2.02, "left": 124.0, "rv_5m": 2.79, "rv_15m": 3.68, "sim_a_vol": 1.1, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": 1.89, "left": 231.0, "rv_5m": 3.16, "rv_15m": 3.43, "sim_a_vol": 4.39, "direction": "UP", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "depth_cheap", "ask": 0.45, "pm_a": 3.75, "left": 247.0, "rv_5m": 4.16, "rv_15m": 4.09, "sim_a_vol": 25.64, "direction": "DOWN", "won": false, "pnl_5sh": -2.25}
|
||||
{"strategy": "spread_arb", "ask": 0.3, "pm_a": 47.99, "left": 268.0, "rv_5m": 5.4, "rv_15m": 5.4, "sim_a_vol": 14.55, "direction": "DOWN", "won": false, "pnl_5sh": -1.5}
|
||||
{"strategy": "spread_arb", "ask": 0.69, "pm_a": -29.64, "left": 280.0, "rv_5m": 2.69, "rv_15m": 4.97, "sim_a_vol": 7.35, "direction": "DOWN", "won": true, "pnl_5sh": 1.55}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 51.32, "left": 244.0, "rv_5m": 11.05, "rv_15m": 6.85, "sim_a_vol": 116.87, "direction": "UP", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "mid_flip_v2", "ask": 0.48, "pm_a": -9.47, "left": 125.0, "rv_5m": 4.3, "rv_15m": 3.82, "sim_a_vol": 8.14, "direction": "UP", "won": false, "pnl_5sh": -2.4}
|
||||
{"strategy": "lock", "ask": 0.82, "pm_a": 73.96, "left": 131.0, "rv_5m": 7.55, "rv_15m": 9.95, "sim_a_vol": 9.58, "direction": "UP", "won": true, "pnl_5sh": 0.9}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.48, "pm_a": 4.58, "left": 136.0, "rv_5m": 3.09, "rv_15m": 5.57, "sim_a_vol": 9.97, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.58, "pm_a": -11.59, "left": 140.0, "rv_5m": 2.96, "rv_15m": 3.13, "sim_a_vol": 13.0, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.61, "pm_a": -10.89, "left": 140.0, "rv_5m": 4.71, "rv_15m": 3.91, "sim_a_vol": 10.59, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.37, "pm_a": 2.96, "left": 154.2, "rv_5m": 5.86, "rv_15m": 5.13, "sim_a_vol": 12.66, "direction": "DOWN", "won": false, "pnl_5sh": -1.85}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.91, "pm_a": -35.58, "left": 140.0, "rv_5m": 2.06, "rv_15m": 1.92, "sim_a_vol": 5.6, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": 14.01, "left": 140.0, "rv_5m": 2.29, "rv_15m": 3.49, "sim_a_vol": 8.51, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cb_flip", "ask": 0.98, "pm_a": 12.37, "left": 4.9, "rv_5m": 3.01, "rv_15m": 3.17, "sim_a_vol": 7.13, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.4, "pm_a": 40.24, "left": 227.0, "rv_5m": 9.14, "rv_15m": 7.59, "sim_a_vol": 18.0, "direction": "DOWN", "won": false, "pnl_5sh": -2.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.33, "pm_a": 23.86, "left": 140.0, "rv_5m": 5.48, "rv_15m": 5.45, "sim_a_vol": 13.91, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_50", "ask": 1.0, "pm_a": -161.29, "left": 60.0, "rv_5m": 4.97, "rv_15m": 4.63, "sim_a_vol": 16.01, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.53, "pm_a": -8.34, "left": 140.0, "rv_5m": 2.62, "rv_15m": 4.11, "sim_a_vol": 2.38, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": 54.19, "left": 140.0, "rv_5m": 2.66, "rv_15m": 3.04, "sim_a_vol": 10.48, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock_hedge", "ask": 0.09, "pm_a": -61.63, "left": 126.0, "rv_5m": 3.42, "rv_15m": 4.03, "sim_a_vol": 11.93, "direction": "UP", "won": false, "pnl_5sh": -0.45}
|
||||
{"strategy": "lock", "ask": 0.94, "pm_a": 64.45, "left": 41.0, "rv_5m": 4.89, "rv_15m": 6.94, "sim_a_vol": 12.26, "direction": "UP", "won": true, "pnl_5sh": 0.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 89.14, "left": 140.0, "rv_5m": 3.11, "rv_15m": 3.54, "sim_a_vol": 7.99, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner_strict", "ask": 0.78, "pm_a": 15.99, "left": 59.0, "rv_5m": 2.9, "rv_15m": 2.89, "sim_a_vol": 4.24, "direction": "UP", "won": false, "pnl_5sh": -3.9}
|
||||
{"strategy": "depth_cheap", "ask": 0.4, "pm_a": 7.16, "left": 187.0, "rv_5m": 4.05, "rv_15m": 3.76, "sim_a_vol": 1.53, "direction": "DOWN", "won": true, "pnl_5sh": 3.0}
|
||||
{"strategy": "cheap_hours", "ask": 0.42, "pm_a": -31.8, "left": 295.0, "rv_5m": 2.6, "rv_15m": 2.71, "sim_a_vol": 11.8, "direction": "UP", "won": false, "pnl_5sh": -2.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.47, "pm_a": -6.78, "left": 139.0, "rv_5m": 4.58, "rv_15m": 5.8, "sim_a_vol": 8.76, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "mid_flip", "ask": 0.31, "pm_a": -25.91, "left": 135.0, "rv_5m": 5.1, "rv_15m": 4.64, "sim_a_vol": 24.42, "direction": "UP", "won": false, "pnl_5sh": -1.55}
|
||||
{"strategy": "lock", "ask": 0.92, "pm_a": -60.73, "left": 103.0, "rv_5m": 5.43, "rv_15m": 4.58, "sim_a_vol": 3.58, "direction": "DOWN", "won": true, "pnl_5sh": 0.4}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.72, "pm_a": 32.41, "left": 139.0, "rv_5m": 6.91, "rv_15m": 6.18, "sim_a_vol": 15.08, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.55, "pm_a": 15.94, "left": 294.1, "rv_5m": 5.74, "rv_15m": 6.94, "sim_a_vol": 11.23, "direction": "UP", "won": false, "pnl_5sh": -2.75}
|
||||
{"strategy": "mid_flip_v2", "ask": 0.49, "pm_a": 2.44, "left": 124.0, "rv_5m": 3.74, "rv_15m": 4.28, "sim_a_vol": 5.19, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "mid_flip", "ask": 0.47, "pm_a": -24.77, "left": 124.0, "rv_5m": 4.97, "rv_15m": 4.95, "sim_a_vol": 4.69, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.66, "pm_a": -32.25, "left": 140.0, "rv_5m": 6.57, "rv_15m": 8.06, "sim_a_vol": 8.83, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.18, "pm_a": 38.18, "left": 224.0, "rv_5m": 3.4, "rv_15m": 2.76, "sim_a_vol": 11.04, "direction": "DOWN", "won": true, "pnl_5sh": 4.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 87.33, "left": 140.0, "rv_5m": 4.27, "rv_15m": 3.18, "sim_a_vol": 7.13, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.27, "pm_a": 42.92, "left": 235.0, "rv_5m": 6.81, "rv_15m": 6.31, "sim_a_vol": 28.08, "direction": "DOWN", "won": false, "pnl_5sh": -1.35}
|
||||
{"strategy": "cheap_winner_strict", "ask": 0.8, "pm_a": 24.45, "left": 39.0, "rv_5m": 1.63, "rv_15m": 2.52, "sim_a_vol": 1.57, "direction": "UP", "won": true, "pnl_5sh": 1.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.56, "pm_a": 9.5, "left": 140.0, "rv_5m": 5.01, "rv_15m": 5.72, "sim_a_vol": 3.76, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": 23.01, "left": 140.0, "rv_5m": 2.2, "rv_15m": 2.18, "sim_a_vol": 7.92, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -49.68, "left": 140.0, "rv_5m": 2.58, "rv_15m": 2.51, "sim_a_vol": 10.67, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.49, "pm_a": -3.7, "left": 140.0, "rv_5m": 6.48, "rv_15m": 16.93, "sim_a_vol": 20.65, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.8, "pm_a": 11.86, "left": 30.0, "rv_5m": 3.67, "rv_15m": 3.62, "sim_a_vol": 4.99, "direction": "UP", "won": true, "pnl_5sh": 1.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.61, "pm_a": 22.04, "left": 140.0, "rv_5m": 6.7, "rv_15m": 7.26, "sim_a_vol": 6.52, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.08, "pm_a": -32.04, "left": 127.0, "rv_5m": 1.99, "rv_15m": 2.52, "sim_a_vol": 8.44, "direction": "UP", "won": false, "pnl_5sh": -0.4}
|
||||
{"strategy": "last7s", "ask": 1.0, "pm_a": 154.72, "left": 19.9, "rv_5m": 6.41, "rv_15m": 7.23, "sim_a_vol": 7.82, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "maker_bias", "ask": 0.58, "pm_a": -1.37, "left": 195.0, "rv_5m": 4.89, "rv_15m": 4.67, "sim_a_vol": 7.1, "direction": "DOWN", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "spread_arb", "ask": 0.66, "pm_a": 11.48, "left": 140.0, "rv_5m": 2.43, "rv_15m": 2.43, "sim_a_vol": 7.56, "direction": "UP", "won": true, "pnl_5sh": 1.7}
|
||||
{"strategy": "cheap_hours", "ask": 0.44, "pm_a": -3.33, "left": 202.0, "rv_5m": 6.71, "rv_15m": 7.61, "sim_a_vol": 6.54, "direction": "UP", "won": false, "pnl_5sh": -2.2}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.8, "pm_a": -37.96, "left": 140.0, "rv_5m": 4.41, "rv_15m": 4.07, "sim_a_vol": 7.29, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.63, "pm_a": -9.22, "left": 140.0, "rv_5m": 3.63, "rv_15m": 4.97, "sim_a_vol": 8.84, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.6, "pm_a": -11.54, "left": 294.6, "rv_5m": 6.26, "rv_15m": 6.25, "sim_a_vol": 15.22, "direction": "UP", "won": true, "pnl_5sh": 2.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": 0.28, "left": 107.0, "rv_5m": 2.37, "rv_15m": 2.74, "sim_a_vol": 6.3, "direction": "UP", "won": true, "pnl_5sh": 2.5}
|
||||
{"strategy": "mid_flip", "ask": 0.46, "pm_a": -12.19, "left": 118.0, "rv_5m": 2.29, "rv_15m": 2.86, "sim_a_vol": 7.2, "direction": "UP", "won": false, "pnl_5sh": -2.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.89, "pm_a": -47.47, "left": 140.0, "rv_5m": 4.27, "rv_15m": 3.95, "sim_a_vol": 4.04, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.83, "pm_a": -32.14, "left": 140.0, "rv_5m": 3.89, "rv_15m": 4.58, "sim_a_vol": 4.62, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.54, "pm_a": -0.87, "left": 194.0, "rv_5m": 7.68, "rv_15m": 5.92, "sim_a_vol": 16.82, "direction": "DOWN", "won": false, "pnl_5sh": -2.7}
|
||||
{"strategy": "spread_arb", "ask": 0.33, "pm_a": 18.55, "left": 284.0, "rv_5m": 5.72, "rv_15m": 5.14, "sim_a_vol": 9.54, "direction": "DOWN", "won": false, "pnl_5sh": -1.65}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.77, "pm_a": 15.49, "left": 140.0, "rv_5m": 2.03, "rv_15m": 2.21, "sim_a_vol": 7.88, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.66, "pm_a": 6.39, "left": 120.0, "rv_5m": 4.04, "rv_15m": 3.68, "sim_a_vol": 16.91, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner_v2", "ask": 0.58, "pm_a": -10.85, "left": 59.0, "rv_5m": 1.99, "rv_15m": 2.08, "sim_a_vol": 4.32, "direction": "DOWN", "won": false, "pnl_5sh": -2.9}
|
||||
{"strategy": "mid_flip", "ask": 0.39, "pm_a": -9.21, "left": 149.0, "rv_5m": 3.89, "rv_15m": 3.75, "sim_a_vol": 17.49, "direction": "UP", "won": true, "pnl_5sh": 3.05}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.41, "pm_a": 11.7, "left": 140.0, "rv_5m": 1.5, "rv_15m": 1.3, "sim_a_vol": 1.43, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "open_hedge", "ask": 0.38, "pm_a": 30.4, "left": 264.7, "rv_5m": 5.37, "rv_15m": 4.78, "sim_a_vol": 6.56, "direction": "DOWN", "won": false, "pnl_5sh": -1.9}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": -3.53, "left": 250.0, "rv_5m": 4.58, "rv_15m": 3.69, "sim_a_vol": 7.06, "direction": "DOWN", "won": false, "pnl_5sh": -2.5}
|
||||
{"strategy": "depth_cheap", "ask": 0.16, "pm_a": -34.18, "left": 237.0, "rv_5m": 2.04, "rv_15m": 2.81, "sim_a_vol": 9.26, "direction": "UP", "won": false, "pnl_5sh": -0.8}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -27.67, "left": 250.0, "rv_5m": 9.12, "rv_15m": 7.31, "sim_a_vol": 99.56, "direction": "DOWN", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "cheap_winner", "ask": 0.55, "pm_a": -2.42, "left": 51.0, "rv_5m": 4.8, "rv_15m": 5.4, "sim_a_vol": 13.92, "direction": "DOWN", "won": false, "pnl_5sh": -2.75}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.66, "pm_a": 3.73, "left": 133.0, "rv_5m": 2.04, "rv_15m": 1.92, "sim_a_vol": 1.5, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": 5.17, "left": 140.0, "rv_5m": 1.48, "rv_15m": 2.11, "sim_a_vol": 1.04, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.82, "pm_a": 2.18, "left": 140.0, "rv_5m": 3.17, "rv_15m": 3.15, "sim_a_vol": 2.99, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.48, "pm_a": 9.72, "left": 140.0, "rv_5m": 2.73, "rv_15m": 4.78, "sim_a_vol": 2.85, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.49, "pm_a": 0.94, "left": 240.0, "rv_5m": 14.08, "rv_15m": 10.42, "sim_a_vol": 36.64, "direction": "UP", "won": false, "pnl_5sh": -2.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.84, "pm_a": -36.28, "left": 140.0, "rv_5m": 3.56, "rv_15m": 3.27, "sim_a_vol": 11.63, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.9, "pm_a": 50.31, "left": 124.1, "rv_5m": 4.54, "rv_15m": 4.19, "sim_a_vol": 9.85, "direction": "UP", "won": true, "pnl_5sh": 0.5}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.79, "pm_a": -28.78, "left": 140.0, "rv_5m": 3.67, "rv_15m": 2.82, "sim_a_vol": 9.95, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.62, "pm_a": -13.32, "left": 140.0, "rv_5m": 3.37, "rv_15m": 3.03, "sim_a_vol": 1.93, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.48, "pm_a": -2.72, "left": 237.0, "rv_5m": 2.01, "rv_15m": 1.91, "sim_a_vol": 5.52, "direction": "UP", "won": false, "pnl_5sh": -2.4}
|
||||
{"strategy": "open_hedge", "ask": 0.66, "pm_a": 70.12, "left": 295.0, "rv_5m": 11.42, "rv_15m": 12.44, "sim_a_vol": 50.14, "direction": "UP", "won": true, "pnl_5sh": 1.7}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": -21.25, "left": 250.0, "rv_5m": 7.0, "rv_15m": 5.11, "sim_a_vol": 77.42, "direction": "DOWN", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 90.89, "left": 140.0, "rv_5m": 2.61, "rv_15m": 3.25, "sim_a_vol": 10.8, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.38, "pm_a": 9.55, "left": 140.0, "rv_5m": 2.17, "rv_15m": 2.12, "sim_a_vol": 3.53, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "spread_arb", "ask": 0.32, "pm_a": -11.21, "left": 286.0, "rv_5m": 4.43, "rv_15m": 4.27, "sim_a_vol": 13.98, "direction": "UP", "won": true, "pnl_5sh": 3.4}
|
||||
{"strategy": "bounce", "ask": 0.77, "pm_a": -44.49, "left": 49.0, "rv_5m": 6.62, "rv_15m": 5.98, "sim_a_vol": 11.98, "direction": "DOWN", "won": true, "pnl_5sh": 1.15}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.93, "pm_a": 67.12, "left": 140.0, "rv_5m": 4.09, "rv_15m": 3.82, "sim_a_vol": 6.95, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.8, "pm_a": -11.2, "left": 140.0, "rv_5m": 2.33, "rv_15m": 2.52, "sim_a_vol": 3.99, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.76, "pm_a": -60.37, "left": 140.0, "rv_5m": 7.29, "rv_15m": 9.39, "sim_a_vol": 10.67, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.58, "pm_a": 17.97, "left": 250.0, "rv_5m": 4.54, "rv_15m": 4.21, "sim_a_vol": 12.78, "direction": "UP", "won": true, "pnl_5sh": 2.1}
|
||||
{"strategy": "depth_cheap", "ask": 0.49, "pm_a": -1.2, "left": 232.0, "rv_5m": 6.5, "rv_15m": 7.46, "sim_a_vol": 14.67, "direction": "UP", "won": false, "pnl_5sh": -2.45}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.56, "pm_a": -11.81, "left": 140.0, "rv_5m": 2.0, "rv_15m": 2.52, "sim_a_vol": 3.83, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 1.0, "pm_a": -178.58, "left": 140.0, "rv_5m": 5.83, "rv_15m": 4.4, "sim_a_vol": 24.94, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.49, "pm_a": 11.86, "left": 30.0, "rv_5m": 6.12, "rv_15m": 8.63, "sim_a_vol": 6.35, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.81, "pm_a": 20.59, "left": 140.0, "rv_5m": 2.97, "rv_15m": 3.19, "sim_a_vol": 16.09, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.98, "pm_a": 52.44, "left": 42.3, "rv_5m": 4.76, "rv_15m": 4.12, "sim_a_vol": 5.17, "direction": "UP", "won": true, "pnl_5sh": 0.1}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.56, "pm_a": 8.01, "left": 140.0, "rv_5m": 3.42, "rv_15m": 3.26, "sim_a_vol": 5.59, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cb_confirm", "ask": 0.75, "pm_a": 29.74, "left": 241.0, "rv_5m": 4.64, "rv_15m": 4.48, "sim_a_vol": 12.16, "direction": "UP", "won": false, "pnl_5sh": -3.75}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.68, "pm_a": 34.25, "left": 140.0, "rv_5m": 6.67, "rv_15m": 6.5, "sim_a_vol": 8.99, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.81, "pm_a": -54.68, "left": 140.0, "rv_5m": 7.94, "rv_15m": 8.97, "sim_a_vol": 6.7, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "last7s", "ask": 1.0, "pm_a": 114.48, "left": 20.0, "rv_5m": 6.91, "rv_15m": 7.54, "sim_a_vol": 23.92, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.87, "pm_a": -52.5, "left": 140.0, "rv_5m": 6.93, "rv_15m": 6.36, "sim_a_vol": 7.74, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "cheap_winner", "ask": 0.63, "pm_a": 16.48, "left": 55.0, "rv_5m": 3.65, "rv_15m": 6.95, "sim_a_vol": 10.93, "direction": "UP", "won": false, "pnl_5sh": -3.15}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -128.98, "left": 140.0, "rv_5m": 6.21, "rv_15m": 5.87, "sim_a_vol": 42.82, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "hold7s", "ask": 0.81, "pm_a": 10.41, "left": 10.0, "rv_5m": 5.39, "rv_15m": 6.36, "sim_a_vol": 9.58, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 6.2, "left": 236.0, "rv_5m": 1.37, "rv_15m": 1.34, "sim_a_vol": 3.59, "direction": "UP", "won": false, "pnl_5sh": -2.95}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.63, "pm_a": 9.99, "left": 140.0, "rv_5m": 1.84, "rv_15m": 2.1, "sim_a_vol": 3.08, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.52, "pm_a": 2.43, "left": 139.0, "rv_5m": 6.39, "rv_15m": 6.13, "sim_a_vol": 36.51, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.67, "pm_a": -19.42, "left": 139.0, "rv_5m": 3.28, "rv_15m": 3.49, "sim_a_vol": 5.93, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": 9.48, "left": 235.0, "rv_5m": 2.75, "rv_15m": 3.53, "sim_a_vol": 7.66, "direction": "DOWN", "won": false, "pnl_5sh": -2.5}
|
||||
{"strategy": "cb_flip", "ask": 0.03, "pm_a": -11.49, "left": 3.0, "rv_5m": 3.21, "rv_15m": 3.98, "sim_a_vol": 7.48, "direction": "UP", "won": false, "pnl_5sh": -1.15}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.79, "pm_a": -21.57, "left": 140.0, "rv_5m": 4.29, "rv_15m": 3.68, "sim_a_vol": 8.88, "direction": "DOWN", "won": false, "pnl_5sh": -3.95}
|
||||
{"strategy": "cb_flip", "ask": 0.9, "pm_a": 18.44, "left": 30.0, "rv_5m": 3.17, "rv_15m": 3.19, "sim_a_vol": 4.3, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.94, "pm_a": 109.64, "left": 140.0, "rv_5m": 8.32, "rv_15m": 8.54, "sim_a_vol": 14.22, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.87, "pm_a": 37.88, "left": 140.0, "rv_5m": 2.02, "rv_15m": 2.12, "sim_a_vol": 2.55, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.91, "pm_a": -63.65, "left": 140.0, "rv_5m": 5.04, "rv_15m": 5.54, "sim_a_vol": 9.08, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.5, "pm_a": -8.03, "left": 193.0, "rv_5m": 3.16, "rv_15m": 3.38, "sim_a_vol": 7.87, "direction": "UP", "won": true, "pnl_5sh": 2.5}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -75.46, "left": 140.0, "rv_5m": 4.79, "rv_15m": 4.31, "sim_a_vol": 6.39, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.32, "pm_a": 33.71, "left": 210.0, "rv_5m": 3.7, "rv_15m": 3.67, "sim_a_vol": 7.78, "direction": "DOWN", "won": false, "pnl_5sh": -1.6}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.98, "pm_a": 123.27, "left": 140.0, "rv_5m": 5.13, "rv_15m": 5.67, "sim_a_vol": 16.64, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.54, "pm_a": -0.38, "left": 246.0, "rv_5m": 1.62, "rv_15m": 2.02, "sim_a_vol": 6.91, "direction": "DOWN", "won": true, "pnl_5sh": 2.3}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.64, "pm_a": 8.77, "left": 140.0, "rv_5m": 2.87, "rv_15m": 3.02, "sim_a_vol": 5.89, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.71, "pm_a": -8.54, "left": 140.0, "rv_5m": 1.97, "rv_15m": 2.13, "sim_a_vol": 1.57, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.53, "pm_a": 8.45, "left": 140.0, "rv_5m": 2.87, "rv_15m": 2.78, "sim_a_vol": 15.43, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.69, "pm_a": -41.2, "left": 140.0, "rv_5m": 4.05, "rv_15m": 3.8, "sim_a_vol": 4.74, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.9, "pm_a": -86.43, "left": 140.0, "rv_5m": 7.94, "rv_15m": 6.11, "sim_a_vol": 23.1, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.42, "pm_a": 30.98, "left": 212.0, "rv_5m": 10.25, "rv_15m": 8.73, "sim_a_vol": 17.37, "direction": "DOWN", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.59, "pm_a": 34.18, "left": 213.0, "rv_5m": 0.0, "rv_15m": 0.0, "sim_a_vol": 47.77, "direction": "UP", "won": true, "pnl_5sh": 2.05}
|
||||
{"strategy": "open_hedge", "ask": 0.64, "pm_a": -21.08, "left": 294.2, "rv_5m": 3.97, "rv_15m": 4.62, "sim_a_vol": 10.83, "direction": "DOWN", "won": false, "pnl_5sh": -3.2}
|
||||
{"strategy": "open_hedge", "ask": 1.0, "pm_a": 0.0, "left": 299.6, "rv_5m": 7.16, "rv_15m": 7.96, "sim_a_vol": 27.76, "direction": "DOWN", "won": false, "pnl_5sh": -5.0}
|
||||
{"strategy": "spread_arb", "ask": 0.34, "pm_a": -5.22, "left": 276.0, "rv_5m": 5.25, "rv_15m": 5.25, "sim_a_vol": 7.9, "direction": "UP", "won": false, "pnl_5sh": -1.7}
|
||||
{"strategy": "depth_cheap", "ask": 0.34, "pm_a": 16.69, "left": 206.0, "rv_5m": 2.65, "rv_15m": 3.33, "sim_a_vol": 2.05, "direction": "DOWN", "won": false, "pnl_5sh": -1.7}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.99, "pm_a": -83.42, "left": 140.0, "rv_5m": 3.16, "rv_15m": 2.96, "sim_a_vol": 2.08, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "lock", "ask": 0.92, "pm_a": 71.87, "left": 20.0, "rv_5m": 3.84, "rv_15m": 4.02, "sim_a_vol": 17.33, "direction": "UP", "won": true, "pnl_5sh": 0.0}
|
||||
{"strategy": "depth_cheap", "ask": 0.56, "pm_a": 20.21, "left": 250.0, "rv_5m": 4.33, "rv_15m": 3.01, "sim_a_vol": 10.49, "direction": "UP", "won": false, "pnl_5sh": -2.8}
|
||||
{"strategy": "depth_cheap", "ask": 0.49, "pm_a": -4.31, "left": 234.0, "rv_5m": 4.63, "rv_15m": 4.13, "sim_a_vol": 7.42, "direction": "DOWN", "won": true, "pnl_5sh": 2.55}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -40.58, "left": 140.0, "rv_5m": 1.24, "rv_15m": 1.77, "sim_a_vol": 11.79, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.74, "pm_a": -23.56, "left": 140.0, "rv_5m": 3.0, "rv_15m": 3.21, "sim_a_vol": 6.2, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.89, "pm_a": 41.94, "left": 140.0, "rv_5m": 1.98, "rv_15m": 1.66, "sim_a_vol": 1.89, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.7, "pm_a": -13.97, "left": 140.0, "rv_5m": 2.03, "rv_15m": 2.17, "sim_a_vol": 6.59, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.99, "pm_a": -72.04, "left": 140.0, "rv_5m": 3.55, "rv_15m": 3.3, "sim_a_vol": 4.58, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.94, "pm_a": 78.91, "left": 140.0, "rv_5m": 4.94, "rv_15m": 4.35, "sim_a_vol": 7.91, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.96, "pm_a": -73.86, "left": 140.0, "rv_5m": 3.24, "rv_15m": 3.82, "sim_a_vol": 7.07, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.58, "pm_a": -10.57, "left": 140.0, "rv_5m": 8.13, "rv_15m": 7.24, "sim_a_vol": 11.55, "direction": "DOWN", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": 32.47, "left": 140.0, "rv_5m": 4.23, "rv_15m": 4.16, "sim_a_vol": 5.56, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.73, "pm_a": 25.04, "left": 140.0, "rv_5m": 2.7, "rv_15m": 3.1, "sim_a_vol": 3.0, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
{"strategy": "depth_cheap", "ask": 0.31, "pm_a": -25.81, "left": 174.0, "rv_5m": 5.15, "rv_15m": 7.72, "sim_a_vol": 12.96, "direction": "UP", "won": false, "pnl_5sh": -1.55}
|
||||
{"strategy": "depth_cheap", "ask": 0.57, "pm_a": -4.6, "left": 250.0, "rv_5m": 6.08, "rv_15m": 5.83, "sim_a_vol": 46.0, "direction": "DOWN", "won": true, "pnl_5sh": 2.15}
|
||||
{"strategy": "spread_arb", "ask": 0.34, "pm_a": 59.55, "left": 282.0, "rv_5m": 5.67, "rv_15m": 6.97, "sim_a_vol": 32.24, "direction": "DOWN", "won": false, "pnl_5sh": -1.7}
|
||||
{"strategy": "xgb_dir_140", "ask": 0.75, "pm_a": 32.64, "left": 140.0, "rv_5m": 5.97, "rv_15m": 17.17, "sim_a_vol": 17.44, "direction": "UP", "won": false, "pnl_5sh": 0}
|
||||
@@ -0,0 +1,352 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Train layered XGBoost direction models at different time points.
|
||||
|
||||
Layer 1: Predict UP/DOWN direction (no ask as feature)
|
||||
Layer 2: Use confidence + ask to decide if trade is worth it
|
||||
|
||||
Saves models to models/direction_left{N}.json for use in paper strategy.
|
||||
|
||||
Usage:
|
||||
cd ~/btc_15m_collab/rewrite
|
||||
source .venv/bin/activate
|
||||
python3 tools/xgb_direction_train.py
|
||||
"""
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xgboost as xgb
|
||||
from sklearn.metrics import roc_auc_score
|
||||
from collections import defaultdict
|
||||
import os
|
||||
|
||||
SNAPSHOT_FILE = "data/chainlink_predictor/snapshots.jsonl"
|
||||
SUMMARY_FILE = "data/chainlink_predictor/window_summary.jsonl"
|
||||
MODEL_DIR = "models"
|
||||
|
||||
FEATURE_NAMES = [
|
||||
'abs_pm_a', 'pm_a_accel', 'cb_a_abs', 'bn_a_abs', 'edge',
|
||||
'cb_same', 'bn_same', 'cb_stronger', 'bid_ratio',
|
||||
'vol_ratio', 'total_vol', 'vol_growth', 'rv_5m', 'trades',
|
||||
'open_vol_ratio', 'open_matches', 'diff_abs',
|
||||
'pm_a_velocity', # pts per 10s — how fast pm_a built up
|
||||
'pm_a_from_peak', # current |pm_a| / max |pm_a| this window (1.0=at peak, <1=dropping)
|
||||
'ask_from_peak', # current ask / max ask this window (1.0=at peak, <1=dropping)
|
||||
'direction_flips', # how many times pm_a flipped sign this window
|
||||
'time_at_direction', # seconds pm_a has been in current direction
|
||||
# --- BTC market state (cross-window) ---
|
||||
'rv_ratio', # rv_5m / rv_15m — short-term vol expanding? >1 = heating up
|
||||
'dvol', # Deribit implied vol — market fear/calm
|
||||
'funding', # funding rate — long/short sentiment
|
||||
'oi_chg', # open interest change — money flowing in/out
|
||||
'cb_vol_60s', # CB spot volume last 60s
|
||||
'vol_spike', # volume spike indicator
|
||||
'flip_rate', # price flip rate — choppy vs trending
|
||||
'left_sec', # seconds left in window — small pm_a at left=10 is valuable, not at left=140
|
||||
'pm_a_z', # |pm_a| / rv_5m — volatility-normalized strength
|
||||
'pm_a_vol_z', # |pm_a| / cb_vol_60s — volume-normalized strength
|
||||
]
|
||||
|
||||
LEFT_TARGETS = [140, 50, 10] # Three models: trend (140s) + confirmation (50s) + last-second (10s)
|
||||
|
||||
|
||||
def load_data():
|
||||
outcomes = {}
|
||||
with open(SUMMARY_FILE) as f:
|
||||
for l in f:
|
||||
try:
|
||||
w = json.loads(l)
|
||||
outcomes[str(w['window_id'])] = w.get('pm_direction', '')
|
||||
except: pass
|
||||
|
||||
print("Loading snapshots...")
|
||||
windows = defaultdict(list)
|
||||
with open(SNAPSHOT_FILE, 'rb') as f:
|
||||
f.seek(0, 2)
|
||||
sz = f.tell()
|
||||
for offset in range(0, sz, 200_000_000):
|
||||
f.seek(offset)
|
||||
f.readline()
|
||||
chunk = f.read(200_000_000)
|
||||
for line in chunk.split(b'\n'):
|
||||
if not line: continue
|
||||
try:
|
||||
s = json.loads(line)
|
||||
wid = str(s.get('window_id', ''))
|
||||
if wid not in outcomes: continue
|
||||
clob = s.get('clob', {})
|
||||
ob = s.get('ob', {})
|
||||
cb_ob = ob.get('coinbase', {})
|
||||
bn_ob = ob.get('binance', {})
|
||||
windows[wid].append({
|
||||
'left': s.get('left_sec', 0),
|
||||
'pm_a': s.get('pm_a', 0),
|
||||
'diff': s.get('diff', 0),
|
||||
'rv_5m': s.get('rv_5m', 0),
|
||||
'rv_15m': s.get('rv_15m', 0),
|
||||
'up_ask': clob.get('up_ask', 0),
|
||||
'down_ask': clob.get('down_ask', 0),
|
||||
'up_vol': clob.get('up_buy_usdc', 0),
|
||||
'down_vol': clob.get('down_buy_usdc', 0),
|
||||
'trades': clob.get('trades', 0),
|
||||
'cb_gap': cb_ob.get('gap', 0) if cb_ob else 0,
|
||||
'cb_bid': cb_ob.get('bid', 0) if cb_ob else 0,
|
||||
'cb_ask': cb_ob.get('ask', 0) if cb_ob else 0,
|
||||
'bn_gap': bn_ob.get('gap', 0) if bn_ob else 0,
|
||||
'dvol': s.get('dvol', 0),
|
||||
'funding': s.get('funding', 0),
|
||||
'oi_chg': s.get('oi_chg', 0),
|
||||
'cb_vol_60s': s.get('cb_vol_60s', 0),
|
||||
'vol_spike': s.get('vol_spike', 0),
|
||||
'flip_rate': s.get('flip_rate', 0),
|
||||
})
|
||||
except: pass
|
||||
print(f'Windows: {len(windows)}')
|
||||
return windows, outcomes
|
||||
|
||||
|
||||
def build_features(snaps, left_target, wid_int=0, prev_dirs=None):
|
||||
obs = [s for s in snaps if abs(s['left'] - left_target) < 5]
|
||||
if not obs: return None
|
||||
s = obs[0]
|
||||
|
||||
if abs(s['pm_a']) < 2: return None
|
||||
if s['up_ask'] <= 0 or s['down_ask'] <= 0: return None
|
||||
|
||||
direction = 1 if s['pm_a'] > 0 else -1
|
||||
|
||||
earlier = [x for x in snaps if abs(x['left'] - (s['left'] + 30)) < 5]
|
||||
if earlier:
|
||||
e = earlier[0]
|
||||
pm_a_accel = abs(s['pm_a']) - abs(e['pm_a'])
|
||||
e_up_vol = e['up_vol']
|
||||
e_down_vol = e['down_vol']
|
||||
else:
|
||||
pm_a_accel = 0
|
||||
e_up_vol = 0
|
||||
e_down_vol = 0
|
||||
|
||||
total_vol = s['up_vol'] + s['down_vol']
|
||||
our_vol = s['up_vol'] if direction == 1 else s['down_vol']
|
||||
vol_ratio = our_vol / (total_vol + 1)
|
||||
|
||||
e_total = e_up_vol + e_down_vol
|
||||
vol_growth = total_vol / (e_total + 1) if e_total > 10 else 0
|
||||
|
||||
cb_a = s['cb_gap']
|
||||
bn_a = s['bn_gap']
|
||||
edge = cb_a - s['pm_a']
|
||||
|
||||
cb_same = 1 if (cb_a > 0 and s['pm_a'] > 0) or (cb_a < 0 and s['pm_a'] < 0) else 0
|
||||
bn_same = 1 if (bn_a > 0 and s['pm_a'] > 0) or (bn_a < 0 and s['pm_a'] < 0) else 0
|
||||
|
||||
cb_total = s['cb_bid'] + s['cb_ask']
|
||||
bid_ratio = s['cb_bid'] / (cb_total + 0.01) if cb_total > 0.1 else 0.5
|
||||
|
||||
first_snaps = [x for x in snaps if x['left'] > 260]
|
||||
if first_snaps:
|
||||
f = first_snaps[-1]
|
||||
open_vol_dir = 1 if f['up_vol'] > f['down_vol'] else (-1 if f['down_vol'] > f['up_vol'] else 0)
|
||||
open_vol_ratio = max(f['up_vol'], f['down_vol']) / (min(f['up_vol'], f['down_vol']) + 1) if f['up_vol'] + f['down_vol'] > 50 else 0
|
||||
open_matches = 1 if open_vol_dir == direction else 0
|
||||
else:
|
||||
open_vol_ratio = 0
|
||||
open_matches = 0
|
||||
|
||||
# All snaps before observation point (for trajectory analysis)
|
||||
snaps_by_time = sorted(snaps, key=lambda x: -x['left'])
|
||||
before = [x for x in snaps_by_time if x['left'] >= s['left']]
|
||||
|
||||
# pm_a velocity: how fast did pm_a build up (pts per 10s)
|
||||
pm_a_velocity = 0
|
||||
current_pm_a = abs(s['pm_a'])
|
||||
if current_pm_a >= 15:
|
||||
start_left = None
|
||||
for snap in before:
|
||||
if snap['left'] <= s['left']: continue
|
||||
if direction == 1 and snap['pm_a'] < 10:
|
||||
start_left = snap['left']
|
||||
break
|
||||
elif direction == -1 and snap['pm_a'] > -10:
|
||||
start_left = snap['left']
|
||||
break
|
||||
if start_left is not None:
|
||||
build_time = start_left - s['left']
|
||||
if build_time >= 5:
|
||||
pm_a_velocity = (current_pm_a - 10) / build_time * 10
|
||||
|
||||
# pm_a from peak: is pm_a at its highest or dropping back?
|
||||
if before:
|
||||
max_abs_pma = max(abs(x['pm_a']) for x in before)
|
||||
pm_a_from_peak = current_pm_a / (max_abs_pma + 0.1)
|
||||
else:
|
||||
pm_a_from_peak = 1.0
|
||||
|
||||
# ask from peak: is our ask at its highest or dropping?
|
||||
our_ask_key = 'up_ask' if direction == 1 else 'down_ask'
|
||||
our_asks = [x[our_ask_key] for x in before if x[our_ask_key] > 0]
|
||||
if our_asks:
|
||||
max_ask = max(our_asks)
|
||||
current_ask = s[our_ask_key]
|
||||
ask_from_peak = current_ask / (max_ask + 0.001) if max_ask > 0 else 1.0
|
||||
else:
|
||||
ask_from_peak = 1.0
|
||||
|
||||
# direction flips: how many times pm_a changed sign
|
||||
direction_flips = 0
|
||||
prev_sign = 0
|
||||
for snap in before:
|
||||
cur_sign = 1 if snap['pm_a'] > 0 else (-1 if snap['pm_a'] < 0 else 0)
|
||||
if cur_sign != 0 and prev_sign != 0 and cur_sign != prev_sign:
|
||||
direction_flips += 1
|
||||
if cur_sign != 0:
|
||||
prev_sign = cur_sign
|
||||
|
||||
# time at current direction: how long has pm_a been in current sign?
|
||||
time_at_direction = 0
|
||||
for snap in before:
|
||||
if snap['left'] <= s['left']: continue
|
||||
snap_dir = 1 if snap['pm_a'] > 0 else -1
|
||||
if snap_dir == direction:
|
||||
time_at_direction = snap['left'] - s['left']
|
||||
else:
|
||||
break
|
||||
|
||||
# rv ratio: short-term vol vs medium-term vol
|
||||
rv_5 = s['rv_5m']
|
||||
rv_15 = s.get('rv_15m', 0)
|
||||
rv_ratio = rv_5 / (rv_15 + 0.01) if rv_15 > 0.1 else 1.0
|
||||
|
||||
return {
|
||||
'abs_pm_a': abs(s['pm_a']),
|
||||
'pm_a_accel': pm_a_accel,
|
||||
'cb_a_abs': abs(cb_a),
|
||||
'bn_a_abs': abs(bn_a),
|
||||
'edge': edge * direction,
|
||||
'cb_same': cb_same,
|
||||
'bn_same': bn_same,
|
||||
'cb_stronger': 1 if abs(cb_a) > abs(s['pm_a']) else 0,
|
||||
'bid_ratio': bid_ratio,
|
||||
'vol_ratio': vol_ratio,
|
||||
'total_vol': total_vol,
|
||||
'vol_growth': vol_growth,
|
||||
'rv_5m': rv_5,
|
||||
'trades': s['trades'],
|
||||
'open_vol_ratio': open_vol_ratio,
|
||||
'open_matches': open_matches,
|
||||
'diff_abs': abs(s['diff']),
|
||||
'pm_a_velocity': pm_a_velocity,
|
||||
'pm_a_from_peak': pm_a_from_peak,
|
||||
'ask_from_peak': ask_from_peak,
|
||||
'direction_flips': direction_flips,
|
||||
'time_at_direction': time_at_direction,
|
||||
# BTC market state
|
||||
'rv_ratio': rv_ratio,
|
||||
'dvol': s.get('dvol', 0),
|
||||
'funding': s.get('funding', 0),
|
||||
'oi_chg': s.get('oi_chg', 0),
|
||||
'cb_vol_60s': s.get('cb_vol_60s', 0),
|
||||
'vol_spike': s.get('vol_spike', 0),
|
||||
'flip_rate': s.get('flip_rate', 0),
|
||||
'left_sec': s['left'],
|
||||
'pm_a_z': abs(s['pm_a']) / (rv_5 + 0.1) if rv_5 > 0.5 else 0,
|
||||
'pm_a_vol_z': abs(s['pm_a']) / (s.get('cb_vol_60s', 0) + 0.1) if s.get('cb_vol_60s', 0) > 0.5 else 0,
|
||||
# Extra for paper trade logging (not used as feature)
|
||||
'_up_ask': s['up_ask'],
|
||||
'_down_ask': s['down_ask'],
|
||||
'_pm_a': s['pm_a'],
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
windows, outcomes = load_data()
|
||||
os.makedirs(MODEL_DIR, exist_ok=True)
|
||||
|
||||
# Build consecutive-same-direction map
|
||||
sorted_wids = sorted(windows.keys(), key=lambda x: int(x))
|
||||
consec_map = {}
|
||||
prev_outcome = ''
|
||||
consec = 0
|
||||
for wid in sorted_wids:
|
||||
outcome = outcomes.get(wid, '')
|
||||
if not outcome: continue
|
||||
if outcome == prev_outcome:
|
||||
consec += 1
|
||||
else:
|
||||
consec = 0
|
||||
consec_map[wid] = consec
|
||||
prev_outcome = outcome
|
||||
|
||||
# Build recent_flips map — how many of last 5 windows had pm_a sign change during window
|
||||
flip_map = {}
|
||||
recent_flips = []
|
||||
for wid in sorted_wids:
|
||||
snaps = windows.get(wid, [])
|
||||
if not snaps: continue
|
||||
# Check if pm_a changed sign during this window
|
||||
signs = [1 if s['pm_a'] > 5 else (-1 if s['pm_a'] < -5 else 0) for s in snaps]
|
||||
signs = [s for s in signs if s != 0]
|
||||
had_flip = 0
|
||||
if len(signs) > 5:
|
||||
for i in range(1, len(signs)):
|
||||
if signs[i] != signs[i-1]:
|
||||
had_flip = 1
|
||||
break
|
||||
recent_flips.append(had_flip)
|
||||
flip_map[wid] = sum(recent_flips[-5:])
|
||||
|
||||
# Define sample ranges for each model
|
||||
# Model 140: sample from left 20-140 (every 20s)
|
||||
# Model 50: sample from left 10-50 (every 10s)
|
||||
sample_points = {
|
||||
140: list(range(20, 141, 20)), # [20, 40, 60, 80, 100, 120, 140]
|
||||
50: list(range(10, 51, 10)), # [10, 20, 30, 40, 50]
|
||||
10: list(range(3, 16, 3)), # [3, 6, 9, 12, 15] — last 15s snapshots
|
||||
}
|
||||
|
||||
for left_target in LEFT_TARGETS:
|
||||
rows = []
|
||||
points = sample_points.get(left_target, [left_target])
|
||||
for wid, snaps in windows.items():
|
||||
outcome = outcomes.get(wid, '')
|
||||
if not outcome: continue
|
||||
for pt in points:
|
||||
feats = build_features(snaps, pt, wid_int=int(wid))
|
||||
if feats is None: continue
|
||||
direction_label = 'UP' if feats['_pm_a'] > 0 else 'DOWN'
|
||||
feats['won'] = 1 if direction_label == outcome else 0
|
||||
rows.append(feats)
|
||||
|
||||
df = pd.DataFrame(rows)
|
||||
if len(df) < 100: continue
|
||||
|
||||
X = df[FEATURE_NAMES]
|
||||
y = df['won']
|
||||
|
||||
# Train on all data for production
|
||||
model = xgb.XGBClassifier(
|
||||
n_estimators=200, max_depth=4, learning_rate=0.05,
|
||||
subsample=0.8, colsample_bytree=0.7,
|
||||
eval_metric='logloss', random_state=42,
|
||||
)
|
||||
model.fit(X, y, verbose=False)
|
||||
|
||||
# Validation
|
||||
split = int(len(df) * 0.7)
|
||||
X_test = X.iloc[split:]
|
||||
y_test = y.iloc[split:]
|
||||
proba = model.predict_proba(X_test)[:, 1]
|
||||
auc = roc_auc_score(y_test, proba)
|
||||
|
||||
model_path = f"{MODEL_DIR}/direction_left{left_target}.json"
|
||||
model.save_model(model_path)
|
||||
print(f'LEFT={left_target}s: {len(df)} samples, AUC={auc:.3f} → saved {model_path}')
|
||||
|
||||
# Save feature names
|
||||
with open(f"{MODEL_DIR}/direction_features.json", "w") as f:
|
||||
json.dump(FEATURE_NAMES, f)
|
||||
print(f'\nFeature names saved. Models ready for paper strategy.')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Offline XGBoost inspection — load the REAL trained models and report them.
|
||||
|
||||
python ml/xgb_eval.py
|
||||
|
||||
Needs only `xgboost` + `numpy` + the committed model files under models/. No live
|
||||
feeds, no keys, no 16 GB of ticks. Prints each model's feature-importance ranking,
|
||||
and — if a held-out sample is present at ml/data/lock_sample.csv — the test AUC.
|
||||
|
||||
The point this makes, straight from the model: the strongest features are the
|
||||
market maker's OWN quote (ask, ask_margin, ask_vel), not BTC's price dynamics.
|
||||
The model taught itself that the best estimate of the outcome is what the maker is
|
||||
already charging — which is exactly why the edge isn't capturable. And the AUC is
|
||||
deliberately weak (~coin-flip-plus): that weakness IS the finding. See the README.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
|
||||
import xgboost as xgb
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
ROOT = os.path.dirname(HERE)
|
||||
|
||||
|
||||
def _importances(name: str, model_file: str, feat_file: str, top: int = 8) -> None:
|
||||
# Native Booster API — no sklearn needed (XGBClassifier would require it).
|
||||
try:
|
||||
booster = xgb.Booster()
|
||||
booster.load_model(os.path.join(ROOT, "models", model_file))
|
||||
with open(os.path.join(ROOT, "models", feat_file)) as f:
|
||||
names = json.load(f)
|
||||
except Exception as e:
|
||||
print(f" [{name}] could not load ({e})")
|
||||
return
|
||||
gain = booster.get_score(importance_type="gain") # {feature: score}, unused feats absent
|
||||
# if the model stored generic f0/f1 names, remap them onto the real feature list
|
||||
if gain and all(k[1:].isdigit() for k in gain if k.startswith("f")):
|
||||
gain = {names[int(k[1:])]: v for k, v in gain.items()
|
||||
if k.startswith("f") and int(k[1:]) < len(names)} or gain
|
||||
total = sum(gain.values()) or 1.0
|
||||
ranked = sorted(((n, gain.get(n, 0.0) / total) for n in names), key=lambda x: -x[1])
|
||||
print(f"\n{name} ({model_file}, {len(names)} features)")
|
||||
top1 = ranked[0][1] or 1.0
|
||||
for feat, w in ranked[:top]:
|
||||
bar = "█" * int(round(w / top1 * 28)) if w > 0 else "·"
|
||||
print(f" {feat:<14} {w:6.3f} {bar}")
|
||||
|
||||
|
||||
def _economics_from_log() -> None:
|
||||
"""The 'high win-rate trap', straight from real paper trades.
|
||||
|
||||
A trade filled at ask A pays (1 - A) on a win and loses A on a loss. Paying up
|
||||
for a high win rate hands the payoff to the maker — high WR, negative PnL.
|
||||
"""
|
||||
path = os.path.join(HERE, "data", "paper_trades_sample.jsonl")
|
||||
if not os.path.exists(path):
|
||||
return
|
||||
rows = []
|
||||
with open(path) as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
d = json.loads(line)
|
||||
if d.get("ask") is not None and d.get("won") is not None and d.get("pnl_5sh") is not None:
|
||||
rows.append(d)
|
||||
if not rows:
|
||||
return
|
||||
wr_all = sum(r["won"] for r in rows) / len(rows)
|
||||
pnl_all = sum(r["pnl_5sh"] for r in rows) / len(rows)
|
||||
print("\n" + "=" * 68)
|
||||
print(f"Real paper trades — no price bucket is profitable ({len(rows)} trades, ml/data/)")
|
||||
print("=" * 68)
|
||||
print(" fill at ask A → a win pays (1-A), a loss costs A. Split by entry price:\n")
|
||||
print(f" {'ask range':<11} {'n':>4} {'win rate':>9} {'mean PnL / 5sh':>15}")
|
||||
for lo, hi in [(0.0, 0.5), (0.5, 0.7), (0.7, 0.85), (0.85, 1.01)]:
|
||||
b = [r for r in rows if lo <= r["ask"] < hi]
|
||||
if not b:
|
||||
continue
|
||||
wr = sum(r["won"] for r in b) / len(b)
|
||||
pnl = sum(r["pnl_5sh"] for r in b) / len(b)
|
||||
print(f" {lo:.2f}-{hi:<6.2f} {len(b):>4} {wr:>8.0%} {pnl:>+15.2f}")
|
||||
print(f" {'ALL':<11} {len(rows):>4} {wr_all:>8.0%} {pnl_all:>+15.2f}")
|
||||
print("\n Mean PnL is negative in every bucket — cheap or expensive, high win rate or")
|
||||
print(" low. Across this cross-section of 29 strategies there is no entry price that")
|
||||
print(" comes out ahead: the maker's spread plus execution costs take the rest.")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
print("=" * 68)
|
||||
print("XGBoost models — feature importances (what the model actually learned)")
|
||||
print("=" * 68)
|
||||
_importances("Lock model — will the current leader hold to settlement?",
|
||||
"lock_xgb.json", "lock_xgb_features.json")
|
||||
_importances("Direction model (left=140s)", "direction_left140.json", "direction_features.json")
|
||||
_importances("Hold-7s model", "direction_hold7s.json", "hold7s_features.json")
|
||||
_economics_from_log()
|
||||
print("\n" + "-" * 68)
|
||||
print("Read the top features: `ask`, `ask_margin`, `ask_vel` are the maker's own")
|
||||
print("price. The best predictor of the outcome is what the maker already charges —")
|
||||
print("you can't beat a signal that IS the counterparty. See README, Pillar 2.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,249 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Train XGBoost lock model V2 — pre-trigger features only (no data leakage).
|
||||
|
||||
Targets ask<0.85 trades where the real edge is.
|
||||
Features computed ONLY from snapshots BEFORE trigger moment.
|
||||
|
||||
Usage:
|
||||
cd ~/btc_15m_collab/rewrite
|
||||
source .venv/bin/activate
|
||||
python3 tools/xgb_lock_train_v2.py
|
||||
"""
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import xgboost as xgb
|
||||
from sklearn.metrics import roc_auc_score
|
||||
from collections import defaultdict
|
||||
|
||||
PAPER_FILE = "data/chainlink_predictor/paper_trades.jsonl"
|
||||
SNAPSHOT_FILE = "data/chainlink_predictor/snapshots.jsonl"
|
||||
MODEL_PATH = "models/lock_xgb.json"
|
||||
FEATURES_PATH = "models/lock_xgb_features.json"
|
||||
|
||||
# New feature set — all computable from pre-trigger snapshots
|
||||
FEATURE_NAMES = [
|
||||
"ask", # our side's CLOB ask at trigger
|
||||
"abs_pm_a", # |pm_a| at trigger
|
||||
"left", # seconds remaining when triggered
|
||||
"rv_5m", # 5-min realized volatility
|
||||
"rv_15m", # 15-min realized volatility
|
||||
"sim_a_vol", # exchange price divergence
|
||||
"ask_margin", # our_ask - opp_ask (CLOB directional confidence)
|
||||
"pm_a_accel", # |pm_a| growth in last 30s before trigger
|
||||
"ask_vel", # ask price change rate before trigger
|
||||
"vol_ratio", # our volume / total volume
|
||||
"total_vol", # total CLOB volume (USDC)
|
||||
"sign_changes", # pm_a sign flips before trigger (regime)
|
||||
"pm_a_std", # pm_a standard deviation (stability)
|
||||
"diff", # |sim - pm| at trigger (CB-PM divergence proxy)
|
||||
"trades_count", # CLOB trade count
|
||||
]
|
||||
|
||||
|
||||
def build_snapshot_index():
|
||||
"""Index snapshots by window_id."""
|
||||
print("Loading snapshots...")
|
||||
snaps_by_wid = defaultdict(list)
|
||||
with open(SNAPSHOT_FILE, "rb") as f:
|
||||
f.seek(0, 2)
|
||||
sz = f.tell()
|
||||
for offset in range(0, sz, 200_000_000):
|
||||
f.seek(offset)
|
||||
f.readline()
|
||||
chunk = f.read(200_000_000)
|
||||
for line in chunk.split(b"\n"):
|
||||
if not line:
|
||||
continue
|
||||
try:
|
||||
s = json.loads(line)
|
||||
wid = str(s.get("window_id", ""))
|
||||
if not wid:
|
||||
continue
|
||||
clob = s.get("clob", {})
|
||||
snaps_by_wid[wid].append({
|
||||
"left": s.get("left_sec", 0),
|
||||
"pm_a": s.get("pm_a", 0),
|
||||
"rv_5m": s.get("rv_5m", 0),
|
||||
"rv_15m": s.get("rv_15m", 0),
|
||||
"diff": s.get("diff", 0),
|
||||
"sim_a_vol": s.get("sim_a_vol", 0),
|
||||
"up_ask": clob.get("up_ask", 0),
|
||||
"down_ask": clob.get("down_ask", 0),
|
||||
"up_vol": clob.get("up_buy_usdc", 0),
|
||||
"down_vol": clob.get("down_buy_usdc", 0),
|
||||
"trades": clob.get("trades", 0),
|
||||
})
|
||||
except Exception:
|
||||
pass
|
||||
print(f" {len(snaps_by_wid)} windows indexed")
|
||||
return snaps_by_wid
|
||||
|
||||
|
||||
def compute_pretrigger_features(snaps, trigger_left, direction):
|
||||
"""Compute features using ONLY snapshots BEFORE trigger moment."""
|
||||
before = [s for s in snaps if s["left"] > trigger_left]
|
||||
if len(before) < 5:
|
||||
return None
|
||||
|
||||
our_ask_key = "up_ask" if direction == "UP" else "down_ask"
|
||||
opp_ask_key = "down_ask" if direction == "UP" else "up_ask"
|
||||
|
||||
at_trig = before[-1] # closest to trigger
|
||||
our_ask = at_trig[our_ask_key]
|
||||
opp_ask = at_trig[opp_ask_key]
|
||||
|
||||
our_asks = [s[our_ask_key] for s in before if s[our_ask_key] > 0]
|
||||
if not our_asks:
|
||||
return None
|
||||
|
||||
pma_vals = [abs(s["pm_a"]) for s in before]
|
||||
|
||||
# pm_a acceleration (last 30s before trigger vs earlier)
|
||||
recent = [s for s in before if s["left"] <= trigger_left + 35]
|
||||
earlier = [s for s in before if s["left"] > trigger_left + 35]
|
||||
if recent and earlier:
|
||||
pm_a_accel = np.mean([abs(s["pm_a"]) for s in recent]) - np.mean([abs(s["pm_a"]) for s in earlier])
|
||||
ask_vel = (our_asks[-1] - our_asks[0]) / max(len(our_asks), 1) if len(our_asks) > 3 else 0
|
||||
else:
|
||||
pm_a_accel = 0
|
||||
ask_vel = 0
|
||||
|
||||
# Volume
|
||||
our_vol = at_trig["up_vol"] if direction == "UP" else at_trig["down_vol"]
|
||||
opp_vol = at_trig["down_vol"] if direction == "UP" else at_trig["up_vol"]
|
||||
total_vol = our_vol + opp_vol
|
||||
vol_ratio = our_vol / (total_vol + 1)
|
||||
|
||||
# Regime
|
||||
signs = np.sign([s["pm_a"] for s in before])
|
||||
sign_changes = int(np.sum(np.diff(signs) != 0))
|
||||
pm_a_std = float(np.std(pma_vals))
|
||||
|
||||
return {
|
||||
"ask_margin": our_ask - opp_ask,
|
||||
"pm_a_accel": pm_a_accel,
|
||||
"ask_vel": ask_vel,
|
||||
"vol_ratio": vol_ratio,
|
||||
"total_vol": total_vol,
|
||||
"sign_changes": sign_changes,
|
||||
"pm_a_std": pm_a_std,
|
||||
"rv_5m": at_trig["rv_5m"],
|
||||
"rv_15m": at_trig.get("rv_15m", 0),
|
||||
"sim_a_vol": at_trig["sim_a_vol"],
|
||||
"diff": abs(at_trig["diff"]),
|
||||
"trades_count": at_trig["trades"],
|
||||
}
|
||||
|
||||
|
||||
def load_data(snaps_by_wid):
|
||||
"""Load lock paper trades and compute pre-trigger features."""
|
||||
rows = []
|
||||
with open(PAPER_FILE) as f:
|
||||
for line in f:
|
||||
try:
|
||||
d = json.loads(line)
|
||||
except Exception:
|
||||
continue
|
||||
if d.get("strategy") != "lock" or "won" not in d:
|
||||
continue
|
||||
if abs(d.get("pm_a", 0)) < 60:
|
||||
continue
|
||||
|
||||
wid = str(d.get("window_id", ""))
|
||||
snaps = snaps_by_wid.get(wid, [])
|
||||
trigger_left = d.get("left", 140)
|
||||
direction = d.get("direction", "UP")
|
||||
|
||||
feats = compute_pretrigger_features(snaps, trigger_left, direction)
|
||||
if feats is None:
|
||||
continue
|
||||
|
||||
row = {
|
||||
"won": int(bool(d["won"])),
|
||||
"ask": d["ask"],
|
||||
"abs_pm_a": abs(d["pm_a"]),
|
||||
"left": trigger_left,
|
||||
}
|
||||
row.update(feats)
|
||||
rows.append(row)
|
||||
|
||||
return pd.DataFrame(rows)
|
||||
|
||||
|
||||
def main():
|
||||
snaps = build_snapshot_index()
|
||||
df = load_data(snaps)
|
||||
print(f"\nLoaded {len(df)} lock trades (pm_a>=60), WR={df['won'].mean():.1%}")
|
||||
|
||||
# Show ask distribution
|
||||
cheap = df[df["ask"] < 0.85]
|
||||
expensive = df[df["ask"] >= 0.85]
|
||||
print(f" ask<0.85: {len(cheap)} trades, WR={cheap['won'].mean():.1%}")
|
||||
print(f" ask>=0.85: {len(expensive)} trades, WR={expensive['won'].mean():.1%}")
|
||||
|
||||
# Train on ALL trades (model learns ask is important feature)
|
||||
X = df[FEATURE_NAMES]
|
||||
y = df["won"]
|
||||
|
||||
# Time-based split
|
||||
split = int(len(df) * 0.7)
|
||||
X_train, X_test = X.iloc[:split], X.iloc[split:]
|
||||
y_train, y_test = y.iloc[:split], y.iloc[split:]
|
||||
print(f"\nTrain: {len(X_train)} (WR={y_train.mean():.1%})")
|
||||
print(f"Test: {len(X_test)} (WR={y_test.mean():.1%})")
|
||||
|
||||
model = xgb.XGBClassifier(
|
||||
n_estimators=200, max_depth=3, learning_rate=0.05,
|
||||
subsample=0.8, colsample_bytree=0.7,
|
||||
eval_metric="logloss", random_state=42,
|
||||
)
|
||||
model.fit(X_train, y_train, eval_set=[(X_test, y_test)], verbose=False)
|
||||
|
||||
proba = model.predict_proba(X_test)[:, 1]
|
||||
auc = roc_auc_score(y_test, proba)
|
||||
print(f"\nOut-of-sample AUC: {auc:.3f}")
|
||||
|
||||
# Threshold analysis — focus on ask<0.85 trades in test set
|
||||
print(f"\nThreshold analysis (test set, ask<0.85 only):")
|
||||
cheap_mask = X_test["ask"] < 0.85
|
||||
cheap_proba = proba[cheap_mask]
|
||||
cheap_y = y_test[cheap_mask]
|
||||
cheap_X = X_test[cheap_mask]
|
||||
print(f" Total cheap trades in test: {cheap_mask.sum()}")
|
||||
for thresh in [0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90]:
|
||||
keep = cheap_proba >= thresh
|
||||
if keep.sum() == 0:
|
||||
continue
|
||||
wr = cheap_y[keep].mean()
|
||||
n = keep.sum()
|
||||
block_n = (~keep).sum()
|
||||
asks = cheap_X.loc[keep, "ask"]
|
||||
pnl = sum((1 - asks.iloc[i]) * 5 if cheap_y[keep].iloc[i] else -asks.iloc[i] * 5 for i in range(n))
|
||||
print(f" >={thresh:.2f}: KEEP {n:3d} WR={wr:.0%} PnL=${pnl:+.1f} | BLOCK {block_n:3d}")
|
||||
|
||||
# Feature importance
|
||||
print(f"\nTop features:")
|
||||
importance = sorted(zip(FEATURE_NAMES, model.feature_importances_), key=lambda x: -x[1])
|
||||
for name, score in importance:
|
||||
print(f" {name:>15s} {score:.3f}")
|
||||
|
||||
# Train final model on ALL data
|
||||
print(f"\nTraining final model on all {len(df)} samples...")
|
||||
model_final = xgb.XGBClassifier(
|
||||
n_estimators=200, max_depth=3, learning_rate=0.05,
|
||||
subsample=0.8, colsample_bytree=0.7,
|
||||
eval_metric="logloss", random_state=42,
|
||||
)
|
||||
model_final.fit(X, y, verbose=False)
|
||||
model_final.save_model(MODEL_PATH)
|
||||
print(f"Model saved to {MODEL_PATH}")
|
||||
|
||||
with open(FEATURES_PATH, "w") as f:
|
||||
json.dump(FEATURE_NAMES, f)
|
||||
print(f"Feature names saved to {FEATURES_PATH}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user