Use actual plan edge in OFI diagnostics

This commit is contained in:
Codex
2026-06-28 07:09:34 +08:00
parent 5a9786d861
commit 3c0f2d0d91
2 changed files with 57 additions and 7 deletions
+33 -1
View File
@@ -18,7 +18,7 @@ from trader_training.dynamic_exit_search import search_dynamic_exit_plans
from trader_training.entry_feature_screen import _bucket_edges, _screen_edge_column
from trader_training.io_utils import read_json, write_json
from trader_training.labels import ENTRY_LABEL_METHOD, _path_stats_for_group, build_entry_labels
from trader_training.ofi_feature_experiment import l1_snapshot_diff_ofi_quote
from trader_training.ofi_feature_experiment import _load_entry_dataset, l1_snapshot_diff_ofi_quote
from trader_training.promote import promote_artifact_bundle
from trader_training.replay import build_splits
from trader_training.schemas import FEATURE_ORDER, LATEST_STRESS_SPLIT, MODEL_OUTPUTS, OUTPUT_MAPPING, TRAINING_SPLITS, VALIDATION_LOCKED_SPLIT
@@ -117,6 +117,38 @@ class TrainingContractTest(unittest.TestCase):
self.assertEqual(1, result["candidate_count"])
self.assertTrue((run_root / "dynamic-exit-search" / "dynamic_exit_search_report.md").is_file())
def test_ofi_entry_dataset_uses_actual_plan_edge(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
baseline_root = Path(tmp)
dataset_path = baseline_root / "dataset" / "entry_train.parquet"
dataset_path.parent.mkdir(parents=True)
pd.DataFrame(
{
"sample_id": ["s1"],
"long_entry_target": [1],
"short_entry_target": [0],
"long_actual_plan_net_edge_bps": [4.0],
"short_actual_plan_net_edge_bps": [-7.0],
}
).to_parquet(dataset_path, index=False)
feature = pd.DataFrame(
{
"sample_id": ["s1"],
"symbol": ["BTC-USDT-PERP"],
"event_time": pd.to_datetime(["2026-01-01T00:00:00Z"]),
"open_time_ms": [0],
"split_id": ["fit_inner"],
"walk_forward_fold": [0],
"data_quality_flag": ["OK"],
}
)
dataset = _load_entry_dataset(baseline_root, feature)
self.assertIn("long_actual_plan_net_edge_bps", dataset.columns)
self.assertNotIn("long_expected_net_edge_bps", dataset.columns)
self.assertEqual(4.0, float(dataset.loc[0, "long_actual_plan_net_edge_bps"]))
def test_split_builder_uses_locked_validation_contract(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
data_root = Path(tmp)