38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
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
|