From 5f668cbb6d826c7a100837f7469fe968f07ab49b Mon Sep 17 00:00:00 2001 From: fredmaloggia Date: Mon, 29 Dec 2025 22:21:55 +0100 Subject: [PATCH] applicate rifiniture in output --- Trading Pattern Recon w Hurst - ETF.py | 24 +++++++++---------- Trading Pattern Recon w Hurst - Forex.py | 19 +++++++++------ Trading Pattern Recon w Hurst - Stocks EU.py | 7 +++++- Trading Pattern Recon w Hurst - Stocks USA.py | 5 ++++ config/pattern_knn_config.json | 8 +++---- 5 files changed, 39 insertions(+), 24 deletions(-) diff --git a/Trading Pattern Recon w Hurst - ETF.py b/Trading Pattern Recon w Hurst - ETF.py index 6e16394..4613585 100644 --- a/Trading Pattern Recon w Hurst - ETF.py +++ b/Trading Pattern Recon w Hurst - ETF.py @@ -398,8 +398,8 @@ RUN_CONFIG = CONFIG.get("run", {}) SIGNALS_CONFIG = CONFIG.get("signals", {}) PRICES_CONFIG = CONFIG.get("prices", {}) -OUTPUT_DIR = Path(PATHS_CONFIG.get("output_dir", "output_etf")) -PLOT_DIR = Path(PATHS_CONFIG.get("plot_dir", "plot")) +OUTPUT_DIR = Path(PATHS_CONFIG.get("output_dir", "out_etf")) +PLOT_DIR = Path(PATHS_CONFIG.get("plot_dir", "plot_etf")) OUTPUT_DIR.mkdir(parents=True, exist_ok=True) PLOT_DIR.mkdir(parents=True, exist_ok=True) @@ -720,17 +720,17 @@ def h_min_100(returns: pd.Series, month_len: int = 21): tail = np.concatenate(([0.0], csum[:-k])) return head - tail - for k in range(1, n + 1): - rs = rolling_sum_k(k) - if rs.size == 0: - break - roll_ret = np.exp(rs) - 1.0 - if np.all(roll_ret >= 0): - h_days = k - h_months = int(np.ceil(h_days / month_len)) - return h_days, h_months + for k in range(1, n + 1): + rs = rolling_sum_k(k) + if rs.size == 0: + break + roll_ret = np.exp(rs) - 1.0 + if np.all(roll_ret >= 0): + h_days = k + h_months = int(np.ceil(h_days / month_len)) + return h_days, h_months - return np.nan, np.nan + return np.nan, np.nan if "portfolio_metric_row" not in globals(): def portfolio_metric_row(name: str, r: pd.Series): diff --git a/Trading Pattern Recon w Hurst - Forex.py b/Trading Pattern Recon w Hurst - Forex.py index 9395d98..fb10c52 100644 --- a/Trading Pattern Recon w Hurst - Forex.py +++ b/Trading Pattern Recon w Hurst - Forex.py @@ -153,8 +153,10 @@ DENOISE_THRESHOLD_MODE = "soft" DAYS_PER_YEAR = 252 -OUT_DIR = Path("./out_shared_utils_url_forex") +OUT_DIR = Path("./out_forex") +PLOT_DIR = Path("./plot_forex") OUT_DIR.mkdir(parents=True, exist_ok=True) +PLOT_DIR.mkdir(parents=True, exist_ok=True) # ============================================================ @@ -812,17 +814,20 @@ def main(): plt.figure(figsize=(10, 5)) plt.plot(eq_eq, label=f"Equal Weight (Top{TOP_N}, fee {FEE_BPS}bp)") plt.plot(eq_rp, label=f"Risk Parity (Top{TOP_N}, cap {RP_MAX_WEIGHT:.4f}, fee {FEE_BPS}bp)") - plt.title(f"Equity line portafogli FX (base 100) – Top{TOP_N} (shared_utils + URL)") + plt.title(f"Equity line portafogli FX (base 100) - Top{TOP_N} (shared_utils + URL)") plt.grid(True) plt.legend() plt.tight_layout() - plt.show() + plt.savefig(PLOT_DIR / "equity_line.png", dpi=150) + plt.close() - plot_heatmap_monthly(ret_eq, f"Heatmap mensile – Equal Weight FX (Top{TOP_N})") - plt.show() + fig_eq = plot_heatmap_monthly(ret_eq, f"Heatmap mensile - Equal Weight FX (Top{TOP_N})") + fig_eq.savefig(PLOT_DIR / "heatmap_eqw.png", dpi=150) + plt.close(fig_eq) - plot_heatmap_monthly(ret_rp, f"Heatmap mensile – Risk Parity FX (Top{TOP_N})") - plt.show() + fig_rp = plot_heatmap_monthly(ret_rp, f"Heatmap mensile - Risk Parity FX (Top{TOP_N})") + fig_rp.savefig(PLOT_DIR / "heatmap_rp.png", dpi=150) + plt.close(fig_rp) # 7) Export hurst_df.to_csv(OUT_DIR / "hurst.csv", index=False) diff --git a/Trading Pattern Recon w Hurst - Stocks EU.py b/Trading Pattern Recon w Hurst - Stocks EU.py index 873a0dd..48dd56d 100644 --- a/Trading Pattern Recon w Hurst - Stocks EU.py +++ b/Trading Pattern Recon w Hurst - Stocks EU.py @@ -131,7 +131,9 @@ RP_LOOKBACK = 60 DAYS_PER_YEAR = 252 OUT_DIR = Path("./out_stocks_eu") +PLOT_DIR = Path("./plot_stocks_eu") OUT_DIR.mkdir(parents=True, exist_ok=True) +PLOT_DIR.mkdir(parents=True, exist_ok=True) # ------------------------------------------------------------ @@ -975,12 +977,15 @@ def main(): plt.grid(True) plt.legend() plt.tight_layout() + plt.savefig(PLOT_DIR / "equity_line.png", dpi=150) plt.show() plot_heatmap_monthly(ret_eq, f"Heatmap mensile – Equal Weight (Top{TOP_N})") + plt.savefig(PLOT_DIR / "heatmap_eqw.png", dpi=150) plt.show() - plot_heatmap_monthly(ret_rp, f"Heatmap mensile - Risk Parity (Top{TOP_N})") + plot_heatmap_monthly(ret_rp, f"Heatmap mensile – Risk Parity (Top{TOP_N})") + plt.savefig(PLOT_DIR / "heatmap_rp.png", dpi=150) plt.show() # 6) Save outputs diff --git a/Trading Pattern Recon w Hurst - Stocks USA.py b/Trading Pattern Recon w Hurst - Stocks USA.py index a1a97ec..cfca1b8 100644 --- a/Trading Pattern Recon w Hurst - Stocks USA.py +++ b/Trading Pattern Recon w Hurst - Stocks USA.py @@ -130,7 +130,9 @@ RP_LOOKBACK = 60 DAYS_PER_YEAR = 252 OUT_DIR = Path("./out_stocks_usa") +PLOT_DIR = Path("./plot_stocks_usa") OUT_DIR.mkdir(parents=True, exist_ok=True) +PLOT_DIR.mkdir(parents=True, exist_ok=True) # ------------------------------------------------------------ @@ -964,12 +966,15 @@ def main(): plt.grid(True) plt.legend() plt.tight_layout() + plt.savefig(PLOT_DIR / "equity_line.png", dpi=150) plt.show() plot_heatmap_monthly(ret_eq, f"Heatmap mensile – Equal Weight (Top{TOP_N})") + plt.savefig(PLOT_DIR / "heatmap_eqw.png", dpi=150) plt.show() plot_heatmap_monthly(ret_rp, f"Heatmap mensile – Risk Parity (Top{TOP_N})") + plt.savefig(PLOT_DIR / "heatmap_rp.png", dpi=150) plt.show() # 6) Save outputs diff --git a/config/pattern_knn_config.json b/config/pattern_knn_config.json index 5d4d5fd..706b207 100644 --- a/config/pattern_knn_config.json +++ b/config/pattern_knn_config.json @@ -55,10 +55,10 @@ "base_dir": ".", "input_universe": "Input/Universo per Trading System.xlsx", "connection_txt": "connection.txt", - "output_dir": "output", - "plot_dir": "plot", + "output_dir": "out_etf", + "plot_dir": "plot_etf", "open_trades_dir": "open_trades", - "audit_log_csv": "output/trades_audit_log.csv" + "audit_log_csv": "out_etf/trades_audit_log.csv" }, "hurst": { "lookback": null, @@ -83,7 +83,7 @@ "max_retry": 3, "sleep_sec": 0.1, "timeout": 10, - "cache_dir": "output/price_cache", + "cache_dir": "out_etf/price_cache", "recompute_portfolio_open": false }, "run": {