Prepare source-only public release for develop.
Add cluster audit pipeline, united EA updates, brochure generators, and publication hygiene (gitignore, MT5 path desensitization, pre-upload scan). Remove tracked reports, models, and binary artifacts from the repo. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
co-authored by
Cursor
parent
3f75a08848
commit
605faf5310
@@ -0,0 +1,58 @@
|
||||
"""Parse MetaTrader 5 .set optimization files."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
|
||||
@dataclass
|
||||
class SetParam:
|
||||
name: str
|
||||
value: Any
|
||||
start: Any
|
||||
step: Any
|
||||
stop: Any
|
||||
optimize: bool
|
||||
|
||||
|
||||
def _cast(raw: str) -> Any:
|
||||
low = raw.strip().lower()
|
||||
if low == "true":
|
||||
return True
|
||||
if low == "false":
|
||||
return False
|
||||
if "." in raw:
|
||||
try:
|
||||
return float(raw)
|
||||
except ValueError:
|
||||
return raw
|
||||
try:
|
||||
return int(raw)
|
||||
except ValueError:
|
||||
return raw
|
||||
|
||||
|
||||
def parse_set_file(path: str | Path) -> dict[str, SetParam]:
|
||||
params: dict[str, SetParam] = {}
|
||||
for line in Path(path).read_text(encoding="utf-8", errors="ignore").splitlines():
|
||||
line = line.strip()
|
||||
if not line or line.startswith(";"):
|
||||
continue
|
||||
if "=" not in line:
|
||||
continue
|
||||
name, rest = line.split("=", 1)
|
||||
parts = rest.split("||")
|
||||
if len(parts) < 5:
|
||||
continue
|
||||
value, start, step, stop, opt = parts[0], parts[1], parts[2], parts[3], parts[4]
|
||||
params[name] = SetParam(
|
||||
name=name,
|
||||
value=_cast(value),
|
||||
start=_cast(start),
|
||||
step=_cast(step),
|
||||
stop=_cast(stop),
|
||||
optimize=opt.strip().upper() == "Y",
|
||||
)
|
||||
return params
|
||||
Reference in New Issue
Block a user