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,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from itertools import product
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from .engine import EngineConfig, run_factor_engine, summary_metrics
|
||||
|
||||
|
||||
def optimize_grid(
|
||||
df: pd.DataFrame,
|
||||
factor_expression: str,
|
||||
freqs: list[str],
|
||||
long_qs: list[float],
|
||||
short_qs: list[float],
|
||||
long_short_options: list[bool],
|
||||
) -> pd.DataFrame:
|
||||
rows = []
|
||||
for freq, lq, sq, ls in product(freqs, long_qs, short_qs, long_short_options):
|
||||
cfg = EngineConfig(
|
||||
factor_expression=factor_expression,
|
||||
rebalance_frequency=freq,
|
||||
long_quantile=lq,
|
||||
short_quantile=sq,
|
||||
long_short=ls,
|
||||
)
|
||||
curve, _ = run_factor_engine(df, cfg)
|
||||
m = summary_metrics(curve)
|
||||
rows.append(
|
||||
{
|
||||
"rebalance_frequency": freq,
|
||||
"long_quantile": lq,
|
||||
"short_quantile": sq,
|
||||
"long_short": ls,
|
||||
**m,
|
||||
}
|
||||
)
|
||||
out = pd.DataFrame(rows)
|
||||
if out.empty:
|
||||
return out
|
||||
return out.sort_values(["sharpe", "cagr"], ascending=[False, False]).reset_index(drop=True)
|
||||
|
||||
Reference in New Issue
Block a user