# -*- coding: utf-8 -*- """P3-S.3 diagnostic: runtime-training pivot parity (strict vs equal-allowed) utk CHoCH.""" import os import sys import numpy as np HERE = os.path.dirname(os.path.abspath(__file__)) REPO_ML = os.path.normpath(os.path.join(HERE, "..", "..", "..", "ml")) REPO_P3 = os.path.normpath(os.path.join(REPO_ML, "p3")) REPO_PARITY = os.path.normpath(os.path.join(REPO_ML, "parity")) sys.path.insert(0, HERE) sys.path.insert(0, REPO_ML) sys.path.insert(0, REPO_P3) sys.path.insert(0, REPO_PARITY) import p3_common as P3 P3.DATA = r"D:\TradingTerminal\HFM Metatrader 5\MQL5\Files\AlgoForge\Data" import smc_semantic_common as SC import train_model as TM import build_features_p2 as BFP def main(): t, o, h, l, c, v, htf = SC.load_data() n = len(c) sw_at = np.zeros(n, dtype=int) sw_s = TM.build_structure(o, h, l, c, SC.SWING_LEN, False, sw_at, begin=100) inn_s = TM.build_structure(o, h, l, c, SC.INTERNAL_LEN, True, sw_s["trend"].copy(), begin=100) sw_e = BFP.build_structure_fast(o, h, l, c, SC.SWING_LEN, False, sw_at, begin=100) inn_e = BFP.build_structure_fast(o, h, l, c, SC.INTERNAL_LEN, True, sw_e["trend"].copy(), begin=100) cd_s, cd_e = inn_s["choch_dir"], inn_e["choch_dir"] cb_s, cb_e = inn_s["choch_bar"], inn_e["choch_bar"] out = { "n_bars": int(n), "choch_dir_mismatch": int((cd_s != cd_e).sum()), "choch_dir_mismatch_pct": round(float((cd_s != cd_e).sum()) / n * 100.0, 4), "choch_bar_mismatch": int((cb_s != cb_e).sum()), "onsets_strict": int((cb_s == np.arange(n)).sum()), "onsets_equal_allowed": int((cb_e == np.arange(n)).sum()), "note": "strict = train_model.build_structure (equal TIDAK allowed); " "equal = build_features_p2.build_structure_fast / EA IsPivotHigh (equal allowed)", } print(out) with open(os.path.join(HERE, "output", "parity_choch_pivot_strict_vs_equal.json"), "w", encoding="utf-8") as f: import json json.dump(out, f, indent=2, default=str) if __name__ == "__main__": main()