llm-quant/scripts/run_decision_env_example.py
2025-09-29 14:59:39 +08:00

53 lines
1.6 KiB
Python

"""Quick example of using DecisionEnv for weight tuning experiments."""
from __future__ import annotations
import json
from datetime import date, timedelta
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from app.backtest.decision_env import DecisionEnv, ParameterSpec
from app.backtest.engine import BtConfig
from app.agents.registry import default_agents
from app.utils.config import get_config
def main() -> None:
cfg = get_config()
agents = default_agents()
baseline_weights = {agent.name: cfg.agent_weights.as_dict().get(agent.name, 1.0) for agent in agents}
today = date.today()
bt_cfg = BtConfig(
id="decision_env_example",
name="Decision Env Demo",
start_date=today - timedelta(days=60),
end_date=today,
universe=["000001.SZ"],
params={},
method=cfg.decision_method,
)
specs = [
ParameterSpec(name="momentum_weight", target="agent_weights.A_mom", minimum=0.1, maximum=0.6),
ParameterSpec(name="value_weight", target="agent_weights.A_val", minimum=0.1, maximum=0.4),
]
env = DecisionEnv(bt_config=bt_cfg, parameter_specs=specs, baseline_weights=baseline_weights)
env.reset()
observation, reward, done, info = env.step([0.5, 0.2])
print("Observation:", json.dumps(observation, ensure_ascii=False, indent=2))
print("Reward:", reward)
print("Done:", done)
print("Weights:", json.dumps(info.get("weights", {}), ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()