mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 23:47:46 +00:00
60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
"""Batch 5: runtime verifier edge cases, factor loader, save strategy."""
|
|
|
|
from __future__ import annotations
|
|
import sys, json
|
|
from pathlib import Path
|
|
import numpy as np, pandas as pd, pytest
|
|
|
|
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
|
|
|
|
|
class TestRuntimeVerifierMissesNothing:
|
|
def test_all_keys_missing_detected(self):
|
|
from rdagent.components.backtesting.verify import verify_backtest_result
|
|
assert len(verify_backtest_result({})) > 0
|
|
|
|
def test_partial_keys_missing(self):
|
|
from rdagent.components.backtesting.verify import verify_backtest_result
|
|
w = verify_backtest_result({"sharpe": 1.0, "max_drawdown": -0.1})
|
|
assert len(w) > 0
|
|
|
|
def test_zero_sharpe_accepted(self):
|
|
from rdagent.components.backtesting.verify import verify_backtest_result
|
|
result = {
|
|
"sharpe": 0.0, "max_drawdown": -0.15, "win_rate": 0.5,
|
|
"total_return": 0.0, "annual_return_pct": 0.0,
|
|
"monthly_return_pct": 0.0, "n_trades": 10, "status": "success",
|
|
}
|
|
assert verify_backtest_result(result) == []
|
|
|
|
|
|
class TestSaveStrategyJson:
|
|
def test_save_creates_file(self, tmp_path):
|
|
import json
|
|
(tmp_path / "factors").mkdir()
|
|
data = {"strategy_name": "test", "status": "accepted", "sharpe_ratio": 1.0}
|
|
json_path = tmp_path / "test.json"
|
|
json_path.write_text(json.dumps(data))
|
|
assert json_path.exists()
|
|
loaded = json.loads(json_path.read_text())
|
|
assert loaded["strategy_name"] == "test"
|
|
|
|
|
|
class TestFactorValuesIntegration:
|
|
def test_factor_values_parquet_exists(self):
|
|
vdir = Path("results/factors/values")
|
|
if vdir.exists():
|
|
count = len(list(vdir.glob("*.parquet")))
|
|
assert count > 0
|
|
|
|
def test_factor_json_valid(self):
|
|
d = Path("results/factors")
|
|
if d.exists():
|
|
for f in list(d.glob("*.json"))[:5]:
|
|
try:
|
|
data = json.loads(f.read_text())
|
|
assert "factor_name" in data
|
|
except Exception:
|
|
pass
|