dragon_glued_refined_year_regime_review.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. from __future__ import annotations
  2. from pathlib import Path
  3. import pandas as pd
  4. def _load_csv(base_dir: Path, name: str) -> pd.DataFrame:
  5. return pd.read_csv(base_dir / name, encoding="utf-8-sig")
  6. def main() -> None:
  7. base_dir = Path(__file__).resolve().parent
  8. yearly = _load_csv(base_dir, "dragon_glued_refined_yearly_breakdown.csv")
  9. regime = _load_csv(base_dir, "dragon_glued_refined_regime_breakdown.csv")
  10. family = _load_csv(base_dir, "dragon_glued_refined_family_breakdown.csv")
  11. holding = _load_csv(base_dir, "dragon_glued_refined_holding_breakdown.csv")
  12. alpha_year = yearly[yearly["branch"] == "alpha_first_selective_veto"].copy()
  13. refined_year = yearly[yearly["branch"] == "alpha_first_glued_refined_hot_cap"].copy()
  14. year_cmp = alpha_year.merge(refined_year, on="sell_year", suffixes=("_alpha", "_refined"))
  15. year_cmp["delta_avg_return"] = year_cmp["avg_return_refined"] - year_cmp["avg_return_alpha"]
  16. year_cmp["delta_profit_factor"] = year_cmp["profit_factor_refined"] - year_cmp["profit_factor_alpha"]
  17. year_cmp.to_csv(base_dir / "dragon_glued_refined_year_regime_review.csv", index=False, encoding="utf-8-sig")
  18. alpha_regime = regime[regime["branch"] == "alpha_first_selective_veto"].copy()
  19. refined_regime = regime[regime["branch"] == "alpha_first_glued_refined_hot_cap"].copy()
  20. regime_cmp = alpha_regime.merge(refined_regime, on="regime_bucket", suffixes=("_alpha", "_refined"))
  21. regime_cmp["delta_avg_return"] = regime_cmp["avg_return_refined"] - regime_cmp["avg_return_alpha"]
  22. regime_cmp["delta_profit_factor"] = regime_cmp["profit_factor_refined"] - regime_cmp["profit_factor_alpha"]
  23. regime_cmp.to_csv(base_dir / "dragon_glued_refined_regime_review.csv", index=False, encoding="utf-8-sig")
  24. alpha_holding = holding[holding["branch"] == "alpha_first_selective_veto"].copy()
  25. refined_holding = holding[holding["branch"] == "alpha_first_glued_refined_hot_cap"].copy()
  26. holding_cmp = alpha_holding.merge(refined_holding, on="holding_bucket", suffixes=("_alpha", "_refined"))
  27. holding_cmp["delta_avg_return"] = holding_cmp["avg_return_refined"] - holding_cmp["avg_return_alpha"]
  28. holding_cmp["delta_profit_factor"] = holding_cmp["profit_factor_refined"] - holding_cmp["profit_factor_alpha"]
  29. holding_cmp.to_csv(base_dir / "dragon_glued_refined_holding_review.csv", index=False, encoding="utf-8-sig")
  30. alpha_family = family[family["branch"] == "alpha_first_selective_veto"].copy()
  31. refined_family = family[family["branch"] == "alpha_first_glued_refined_hot_cap"].copy()
  32. family_cmp = alpha_family.merge(refined_family, on="entry_family", suffixes=("_alpha", "_refined"))
  33. family_cmp["delta_avg_return"] = family_cmp["avg_return_refined"] - family_cmp["avg_return_alpha"]
  34. family_cmp["delta_profit_factor"] = family_cmp["profit_factor_refined"] - family_cmp["profit_factor_alpha"]
  35. family_cmp.to_csv(base_dir / "dragon_glued_refined_family_review.csv", index=False, encoding="utf-8-sig")
  36. year_better = int((year_cmp["delta_avg_return"] > 0).sum())
  37. regime_better = int((regime_cmp["delta_avg_return"] > 0).sum())
  38. holding_better = int((holding_cmp["delta_avg_return"] > 0).sum())
  39. top_family_deltas = family_cmp.sort_values("delta_avg_return", ascending=False).head(8)
  40. lines = [
  41. "# Dragon Glued Refined Year/Regime Review",
  42. "",
  43. "## Yearly Comparison",
  44. f"- refined improves avg_return in `{year_better}` yearly buckets out of `{int(len(year_cmp))}`",
  45. ]
  46. for _, row in year_cmp.sort_values("sell_year").iterrows():
  47. lines.append(
  48. f"- `{int(row['sell_year'])}`: alpha `{row['avg_return_alpha']:.2%}` vs refined `{row['avg_return_refined']:.2%}`, "
  49. f"delta `{row['delta_avg_return']:.2%}`"
  50. )
  51. lines.extend(
  52. [
  53. "",
  54. "## Regime Comparison",
  55. f"- refined improves avg_return in `{regime_better}` regime buckets out of `{int(len(regime_cmp))}`",
  56. ]
  57. )
  58. for _, row in regime_cmp.sort_values("regime_bucket").iterrows():
  59. lines.append(
  60. f"- `{row['regime_bucket']}`: alpha `{row['avg_return_alpha']:.2%}` vs refined `{row['avg_return_refined']:.2%}`, "
  61. f"delta `{row['delta_avg_return']:.2%}`"
  62. )
  63. lines.extend(
  64. [
  65. "",
  66. "## Holding-Bucket Comparison",
  67. f"- refined improves avg_return in `{holding_better}` holding buckets out of `{int(len(holding_cmp))}`",
  68. ]
  69. )
  70. for _, row in holding_cmp.sort_values("holding_bucket").iterrows():
  71. lines.append(
  72. f"- `{row['holding_bucket']}`: alpha `{row['avg_return_alpha']:.2%}` vs refined `{row['avg_return_refined']:.2%}`, "
  73. f"delta `{row['delta_avg_return']:.2%}`"
  74. )
  75. lines.extend(["", "## Entry-Family Comparison"])
  76. for _, row in top_family_deltas.iterrows():
  77. lines.append(
  78. f"- `{row['entry_family']}`: alpha `{row['avg_return_alpha']:.2%}` vs refined `{row['avg_return_refined']:.2%}`, "
  79. f"delta `{row['delta_avg_return']:.2%}`, alpha trades `{int(row['trades_alpha'])}`, refined trades `{int(row['trades_refined'])}`"
  80. )
  81. lines.extend(
  82. [
  83. "",
  84. "## Quant Judgment",
  85. "- This review checks whether improvement is broad-based or concentrated in a narrow slice of the sample.",
  86. "- If refined mainly wins through short-holding cleanup while not damaging medium and long holding buckets, the branch is behaving as intended.",
  87. ]
  88. )
  89. (base_dir / "dragon_glued_refined_year_regime_review.md").write_text("\n".join(lines) + "\n", encoding="utf-8")
  90. if __name__ == "__main__":
  91. main()