applicate rifiniture in output

This commit is contained in:
fredmaloggia
2025-12-29 22:21:55 +01:00
parent f5c668f70f
commit 5f668cbb6d
5 changed files with 39 additions and 24 deletions

View File

@@ -398,8 +398,8 @@ RUN_CONFIG = CONFIG.get("run", {})
SIGNALS_CONFIG = CONFIG.get("signals", {}) SIGNALS_CONFIG = CONFIG.get("signals", {})
PRICES_CONFIG = CONFIG.get("prices", {}) PRICES_CONFIG = CONFIG.get("prices", {})
OUTPUT_DIR = Path(PATHS_CONFIG.get("output_dir", "output_etf")) OUTPUT_DIR = Path(PATHS_CONFIG.get("output_dir", "out_etf"))
PLOT_DIR = Path(PATHS_CONFIG.get("plot_dir", "plot")) PLOT_DIR = Path(PATHS_CONFIG.get("plot_dir", "plot_etf"))
OUTPUT_DIR.mkdir(parents=True, exist_ok=True) OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
PLOT_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])) tail = np.concatenate(([0.0], csum[:-k]))
return head - tail return head - tail
for k in range(1, n + 1): for k in range(1, n + 1):
rs = rolling_sum_k(k) rs = rolling_sum_k(k)
if rs.size == 0: if rs.size == 0:
break break
roll_ret = np.exp(rs) - 1.0 roll_ret = np.exp(rs) - 1.0
if np.all(roll_ret >= 0): if np.all(roll_ret >= 0):
h_days = k h_days = k
h_months = int(np.ceil(h_days / month_len)) h_months = int(np.ceil(h_days / month_len))
return h_days, h_months return h_days, h_months
return np.nan, np.nan return np.nan, np.nan
if "portfolio_metric_row" not in globals(): if "portfolio_metric_row" not in globals():
def portfolio_metric_row(name: str, r: pd.Series): def portfolio_metric_row(name: str, r: pd.Series):

View File

@@ -153,8 +153,10 @@ DENOISE_THRESHOLD_MODE = "soft"
DAYS_PER_YEAR = 252 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) 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.figure(figsize=(10, 5))
plt.plot(eq_eq, label=f"Equal Weight (Top{TOP_N}, fee {FEE_BPS}bp)") 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.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.grid(True)
plt.legend() plt.legend()
plt.tight_layout() 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})") fig_eq = plot_heatmap_monthly(ret_eq, f"Heatmap mensile - Equal Weight FX (Top{TOP_N})")
plt.show() 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})") fig_rp = plot_heatmap_monthly(ret_rp, f"Heatmap mensile - Risk Parity FX (Top{TOP_N})")
plt.show() fig_rp.savefig(PLOT_DIR / "heatmap_rp.png", dpi=150)
plt.close(fig_rp)
# 7) Export # 7) Export
hurst_df.to_csv(OUT_DIR / "hurst.csv", index=False) hurst_df.to_csv(OUT_DIR / "hurst.csv", index=False)

View File

@@ -131,7 +131,9 @@ RP_LOOKBACK = 60
DAYS_PER_YEAR = 252 DAYS_PER_YEAR = 252
OUT_DIR = Path("./out_stocks_eu") OUT_DIR = Path("./out_stocks_eu")
PLOT_DIR = Path("./plot_stocks_eu")
OUT_DIR.mkdir(parents=True, exist_ok=True) 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.grid(True)
plt.legend() plt.legend()
plt.tight_layout() plt.tight_layout()
plt.savefig(PLOT_DIR / "equity_line.png", dpi=150)
plt.show() plt.show()
plot_heatmap_monthly(ret_eq, f"Heatmap mensile Equal Weight (Top{TOP_N})") plot_heatmap_monthly(ret_eq, f"Heatmap mensile Equal Weight (Top{TOP_N})")
plt.savefig(PLOT_DIR / "heatmap_eqw.png", dpi=150)
plt.show() 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() plt.show()
# 6) Save outputs # 6) Save outputs

View File

@@ -130,7 +130,9 @@ RP_LOOKBACK = 60
DAYS_PER_YEAR = 252 DAYS_PER_YEAR = 252
OUT_DIR = Path("./out_stocks_usa") OUT_DIR = Path("./out_stocks_usa")
PLOT_DIR = Path("./plot_stocks_usa")
OUT_DIR.mkdir(parents=True, exist_ok=True) 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.grid(True)
plt.legend() plt.legend()
plt.tight_layout() plt.tight_layout()
plt.savefig(PLOT_DIR / "equity_line.png", dpi=150)
plt.show() plt.show()
plot_heatmap_monthly(ret_eq, f"Heatmap mensile Equal Weight (Top{TOP_N})") plot_heatmap_monthly(ret_eq, f"Heatmap mensile Equal Weight (Top{TOP_N})")
plt.savefig(PLOT_DIR / "heatmap_eqw.png", dpi=150)
plt.show() 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() plt.show()
# 6) Save outputs # 6) Save outputs

View File

@@ -55,10 +55,10 @@
"base_dir": ".", "base_dir": ".",
"input_universe": "Input/Universo per Trading System.xlsx", "input_universe": "Input/Universo per Trading System.xlsx",
"connection_txt": "connection.txt", "connection_txt": "connection.txt",
"output_dir": "output", "output_dir": "out_etf",
"plot_dir": "plot", "plot_dir": "plot_etf",
"open_trades_dir": "open_trades", "open_trades_dir": "open_trades",
"audit_log_csv": "output/trades_audit_log.csv" "audit_log_csv": "out_etf/trades_audit_log.csv"
}, },
"hurst": { "hurst": {
"lookback": null, "lookback": null,
@@ -83,7 +83,7 @@
"max_retry": 3, "max_retry": 3,
"sleep_sec": 0.1, "sleep_sec": 0.1,
"timeout": 10, "timeout": 10,
"cache_dir": "output/price_cache", "cache_dir": "out_etf/price_cache",
"recompute_portfolio_open": false "recompute_portfolio_open": false
}, },
"run": { "run": {