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