mql5/Experts/Advisors/DualEA/ML/policy.py

38 行
1.3 KiB
Python

2025-08-10 17:43:21 -04:00
import json
import os
from dataclasses import dataclass, asdict
from datetime import datetime
from typing import Optional, Dict, Any
# Default Common Files folder used elsewhere
DEFAULT_COMMON = os.path.join(os.environ.get("APPDATA", ""), "MetaQuotes", "Terminal", "Common", "Files", "DualEA")
POLICY_NAME = "policy.json"
def resolve_policy_path(common_dir: str = None) -> str:
base = common_dir or DEFAULT_COMMON
os.makedirs(base, exist_ok=True)
return os.path.join(base, POLICY_NAME)
@dataclass
class Policy:
version: str
timestamp: str
min_confidence: float = 0.55
# Optional: per-slice overrides in future
overrides: Optional[Dict[str, Any]] = None
# Optional: list of slice probabilities
slice_probs: Optional[list[Dict[str, Any]]] = None
def to_json(self) -> str:
return json.dumps(asdict(self), indent=2)
def write_policy(min_confidence: float, common_dir: str = None, version: str = "1.0.0", slice_probs: Optional[list[Dict[str, Any]]] = None) -> str:
ts = datetime.utcnow().isoformat() + "Z"
policy = Policy(version=version, timestamp=ts, min_confidence=min_confidence, slice_probs=slice_probs)
path = resolve_policy_path(common_dir)
with open(path, "w", encoding="utf-8") as f:
f.write(policy.to_json())
return path