| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import pandas as pd
- import pytest
- from okx_codex_trader import eth_nextgen_micro as module
- def test_latest_active_engine_uses_shifted_prior_day_regime(monkeypatch):
- index = pd.date_range("2026-01-01", periods=32, freq="D", tz="UTC")
- existing = pd.DataFrame({"cost_model": ["maker_taker"], "name": ["equal-2-c0003"], "date": [index[0].strftime("%Y-%m-%d")]})
- nextgen = pd.Series([100.0] * 31 + [80.0], index=index)
- micro = pd.Series([100.0] * 31 + [120.0], index=index)
- monkeypatch.setattr(module.pd, "read_csv", lambda _: existing)
- monkeypatch.setattr(module.portfolio, "load_nextgen", lambda _, __: (nextgen, []))
- monkeypatch.setattr(module.portfolio, "load_micro_candidates", lambda _, __: {module.MICRO_NAME: (micro, [])})
- state = module.latest_active_engine()
- assert state["active_engine"] == "nextgen"
- def test_latest_active_engine_switches_on_prior_completed_day(monkeypatch):
- index = pd.date_range("2026-01-01", periods=33, freq="D", tz="UTC")
- existing = pd.DataFrame({"cost_model": ["maker_taker"], "name": ["equal-2-c0003"], "date": [index[0].strftime("%Y-%m-%d")]})
- nextgen = pd.Series([100.0] * 31 + [80.0, 80.0], index=index)
- micro = pd.Series([100.0] * 31 + [120.0, 120.0], index=index)
- monkeypatch.setattr(module.pd, "read_csv", lambda _: existing)
- monkeypatch.setattr(module.portfolio, "load_nextgen", lambda _, __: (nextgen, []))
- monkeypatch.setattr(module.portfolio, "load_micro_candidates", lambda _, __: {module.MICRO_NAME: (micro, [])})
- state = module.latest_active_engine()
- assert state["active_engine"] == "micro"
- def test_payload_is_readonly(monkeypatch):
- monkeypatch.setattr(module, "latest_active_engine", lambda: {"active_engine": "nextgen", "decision_date": "2026-01-01"})
- monkeypatch.setattr(
- module.nextgen_intent,
- "build_payload",
- lambda: {"decision": {"signal": "no_signal"}, "data": {"decision_candle_ts": 1000}, "legs": []},
- )
- monkeypatch.setattr(module, "micro_signal", lambda: {"signal": "short"})
- payload = module.build_payload()
- assert payload["submitted_orders"] == 0
- assert payload["private_key_required"] is False
- assert payload["risk_limits"]["no_order_submission"] is True
- assert payload["risk_limits"]["blocked_for_live_trading"] is True
- assert payload["decision"]["selected_signal"] == "no_signal"
- assert payload["execution_intent"]["entry_signal"] == "no_signal"
- assert payload["execution_intent"]["entry_unit"] == 0.0
- assert payload["execution_intent"]["target_position_known"] is False
- def test_payload_records_nextgen_entry_unit(monkeypatch):
- monkeypatch.setattr(module, "latest_active_engine", lambda: {"active_engine": "nextgen", "decision_date": "2026-01-01"})
- monkeypatch.setattr(
- module.nextgen_intent,
- "build_payload",
- lambda: {"decision": {"signal": "long", "active_suggested_weight": 0.5}, "data": {"decision_candle_ts": 1000}, "legs": []},
- )
- monkeypatch.setattr(module, "micro_signal", lambda: {"signal": "no_signal"})
- payload = module.build_payload()
- assert payload["decision"]["selected_signal"] == "long"
- assert payload["execution_intent"]["entry_signal"] == "long"
- assert payload["execution_intent"]["entry_unit"] == 0.5
- assert payload["execution_intent"]["target_position"] is None
|