Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions qt/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ def _cmd_run_phase_i5d_intraday_groups(args: argparse.Namespace) -> int:
def _cmd_run_eval_jump_amount_corr(args: argparse.Namespace) -> int:
"""Run the two real jump-amount-corr factor evaluations (cache-only) + reports."""
from qt.eval_jump_amount_corr import run_eval_jump_amount_corr
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_jump_amount_corr(args.config)
Expand All @@ -225,12 +226,14 @@ def _cmd_run_eval_jump_amount_corr(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_minute_ideal_amplitude(args: argparse.Namespace) -> int:
"""Run the two real minute-ideal-amplitude factor evaluations (cache-only) + reports."""
from qt.eval_minute_ideal_amplitude import run_eval_minute_ideal_amplitude
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_minute_ideal_amplitude(args.config)
Expand All @@ -250,12 +253,14 @@ def _cmd_run_eval_minute_ideal_amplitude(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_amp_marginal_anomaly_vol(args: argparse.Namespace) -> int:
"""Run the two real amp-marginal-anomaly-vol factor evaluations (cache-only) + reports."""
from qt.eval_amp_marginal_anomaly_vol import run_eval_amp_marginal_anomaly_vol
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_amp_marginal_anomaly_vol(args.config)
Expand All @@ -275,12 +280,14 @@ def _cmd_run_eval_amp_marginal_anomaly_vol(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_volume_peak_count(args: argparse.Namespace) -> int:
"""Run the two real volume-peak-count factor evaluations (cache-only) + reports."""
from qt.eval_volume_peak_count import run_eval_volume_peak_count
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_volume_peak_count(args.config)
Expand All @@ -300,12 +307,14 @@ def _cmd_run_eval_volume_peak_count(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_intraday_amp_cut(args: argparse.Namespace) -> int:
"""Run the two real intraday-amp-cut factor evaluations (cache-only) + reports."""
from qt.eval_intraday_amp_cut import run_eval_intraday_amp_cut
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_intraday_amp_cut(args.config)
Expand All @@ -325,12 +334,14 @@ def _cmd_run_eval_intraday_amp_cut(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_peak_interval_kurtosis(args: argparse.Namespace) -> int:
"""Run the two real peak-interval-kurtosis evaluations (cache-only) + reports."""
from qt.eval_peak_interval_kurtosis import run_eval_peak_interval_kurtosis
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_peak_interval_kurtosis(args.config)
Expand All @@ -350,12 +361,14 @@ def _cmd_run_eval_peak_interval_kurtosis(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_valley_relative_vwap(args: argparse.Namespace) -> int:
"""Run the two real valley-relative-VWAP evaluations (cache-only) + reports."""
from qt.eval_valley_relative_vwap import run_eval_valley_relative_vwap
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_valley_relative_vwap(args.config)
Expand All @@ -375,6 +388,7 @@ def _cmd_run_eval_valley_relative_vwap(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


Expand All @@ -398,6 +412,7 @@ def _fmt_metric(value: object, spec: str = ".4f") -> str:
def _cmd_run_eval_ridge_minute_return(args: argparse.Namespace) -> int:
"""Run the two real ridge-minute-return evaluations (cache-only) + reports."""
from qt.eval_ridge_minute_return import run_eval_ridge_minute_return
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_ridge_minute_return(args.config)
Expand Down Expand Up @@ -433,12 +448,14 @@ def _cmd_run_eval_ridge_minute_return(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_peak_ridge_amount_ratio(args: argparse.Namespace) -> int:
"""Run the two real peak/ridge amount-ratio evaluations (cache-only) + reports."""
from qt.eval_peak_ridge_amount_ratio import run_eval_peak_ridge_amount_ratio
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_peak_ridge_amount_ratio(args.config)
Expand Down Expand Up @@ -477,12 +494,14 @@ def _cmd_run_eval_peak_ridge_amount_ratio(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_valley_price_quantile(args: argparse.Namespace) -> int:
"""Run the two real valley-price-quantile evaluations (cache-only) + reports."""
from qt.eval_valley_price_quantile import run_eval_valley_price_quantile
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_valley_price_quantile(args.config)
Expand Down Expand Up @@ -527,12 +546,14 @@ def _cmd_run_eval_valley_price_quantile(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


def _cmd_run_eval_valley_ridge_vwap_ratio(args: argparse.Namespace) -> int:
"""Run the two real valley/ridge VWAP-ratio evaluations (cache-only) + reports."""
from qt.eval_valley_ridge_vwap_ratio import run_eval_valley_ridge_vwap_ratio
from qt.exec_basis_eval import format_exec_basis_line

try:
result = run_eval_valley_ridge_vwap_ratio(args.config)
Expand All @@ -555,6 +576,7 @@ def _cmd_run_eval_valley_ridge_vwap_ratio(args: argparse.Namespace) -> int:
f"dashboards: {result.reports.no_book_dashboard} | "
f"{result.reports.with_book_dashboard}"
)
print(format_exec_basis_line(result.exec_basis))
return 0


Expand Down
19 changes: 19 additions & 0 deletions qt/eval_amp_marginal_anomaly_vol.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
from factors.compute.intraday_derived import AmpMarginalAnomalyVolFactor
from factors.spec import FactorSpec
from qt.config import RootConfig, load_config
from qt.exec_basis_eval import ExecBasisEvaluation, run_exec_basis_evaluation
from qt.pipeline import (
_build_cache,
_build_universe,
Expand Down Expand Up @@ -360,6 +361,7 @@ class AmpAnomalyVolEvalResult:
no_book_metrics: dict
with_book_metrics: dict
reports: _RunReports
exec_basis: ExecBasisEvaluation
log_path: Path
elapsed: float

Expand Down Expand Up @@ -452,6 +454,22 @@ def run_eval_amp_marginal_anomaly_vol(config_path: str) -> AmpAnomalyVolEvalResu
report_dir=Path(cfg.output.report_dir),
)

# Second evaluation basis (task card §2.3): the SAME factor values scored on
# the 14:51 VWAP exec-to-exec return instead of close-to-close. The reports
# above are the close_to_close control and are left untouched.
exec_basis = run_exec_basis_evaluation(
factor_series,
spec,
eval_cfg,
book_processed,
cfg=cfg,
panel=panel,
symbols=symbols,
logger=logger,
report_dir=Path(cfg.output.report_dir),
stem=_REPORT_STEM,
)

no_book_metrics = extract_metrics(reports.no_book)
with_book_metrics = extract_metrics(reports.with_book)
logger.info(
Expand All @@ -472,6 +490,7 @@ def run_eval_amp_marginal_anomaly_vol(config_path: str) -> AmpAnomalyVolEvalResu
no_book_metrics=no_book_metrics,
with_book_metrics=with_book_metrics,
reports=reports,
exec_basis=exec_basis,
log_path=log_path,
elapsed=time.monotonic() - started,
)
Expand Down
19 changes: 19 additions & 0 deletions qt/eval_intraday_amp_cut.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@
from factors.compute.intraday_derived import IntradayAmpCutFactor
from factors.spec import FactorSpec
from qt.config import RootConfig, load_config
from qt.exec_basis_eval import ExecBasisEvaluation, run_exec_basis_evaluation
from qt.pipeline import (
_build_cache,
_build_universe,
Expand Down Expand Up @@ -381,6 +382,7 @@ class AmpCutEvalResult:
no_book_metrics: dict
with_book_metrics: dict
reports: _RunReports
exec_basis: ExecBasisEvaluation
log_path: Path
elapsed: float

Expand Down Expand Up @@ -474,6 +476,22 @@ def run_eval_intraday_amp_cut(config_path: str) -> AmpCutEvalResult:
report_dir=Path(cfg.output.report_dir),
)

# Second evaluation basis (task card §2.3): the SAME factor values scored on
# the 14:51 VWAP exec-to-exec return instead of close-to-close. The reports
# above are the close_to_close control and are left untouched.
exec_basis = run_exec_basis_evaluation(
factor_series,
spec,
eval_cfg,
book_processed,
cfg=cfg,
panel=panel,
symbols=symbols,
logger=logger,
report_dir=Path(cfg.output.report_dir),
stem=_REPORT_STEM,
)

no_book_metrics = extract_metrics(reports.no_book)
with_book_metrics = extract_metrics(reports.with_book)
logger.info(
Expand All @@ -495,6 +513,7 @@ def run_eval_intraday_amp_cut(config_path: str) -> AmpCutEvalResult:
no_book_metrics=no_book_metrics,
with_book_metrics=with_book_metrics,
reports=reports,
exec_basis=exec_basis,
log_path=log_path,
elapsed=time.monotonic() - started,
)
Expand Down
19 changes: 19 additions & 0 deletions qt/eval_jump_amount_corr.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
from factors.compute.intraday_derived import JumpAmountCorrFactor
from factors.spec import FactorSpec
from qt.config import RootConfig, load_config
from qt.exec_basis_eval import ExecBasisEvaluation, run_exec_basis_evaluation
from qt.pipeline import (
_build_cache,
_build_universe,
Expand Down Expand Up @@ -346,6 +347,7 @@ class JumpEvalResult:
no_book_metrics: dict
with_book_metrics: dict
reports: _RunReports
exec_basis: ExecBasisEvaluation
log_path: Path
elapsed: float

Expand Down Expand Up @@ -433,6 +435,22 @@ def run_eval_jump_amount_corr(config_path: str) -> JumpEvalResult:
report_dir=Path(cfg.output.report_dir),
)

# Second evaluation basis (task card §2.3): the SAME factor values scored on
# the 14:51 VWAP exec-to-exec return instead of close-to-close. The reports
# above are the close_to_close control and are left untouched.
exec_basis = run_exec_basis_evaluation(
factor_series,
spec,
eval_cfg,
book_processed,
cfg=cfg,
panel=panel,
symbols=symbols,
logger=logger,
report_dir=Path(cfg.output.report_dir),
stem=_REPORT_STEM,
)

no_book_metrics = extract_metrics(reports.no_book)
with_book_metrics = extract_metrics(reports.with_book)
logger.info(
Expand All @@ -453,6 +471,7 @@ def run_eval_jump_amount_corr(config_path: str) -> JumpEvalResult:
no_book_metrics=no_book_metrics,
with_book_metrics=with_book_metrics,
reports=reports,
exec_basis=exec_basis,
log_path=log_path,
elapsed=time.monotonic() - started,
)
Expand Down
19 changes: 19 additions & 0 deletions qt/eval_minute_ideal_amplitude.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
from factors.compute.intraday_derived import MinuteIdealAmplitudeFactor
from factors.spec import FactorSpec
from qt.config import RootConfig, load_config
from qt.exec_basis_eval import ExecBasisEvaluation, run_exec_basis_evaluation
from qt.pipeline import (
_build_cache,
_build_universe,
Expand Down Expand Up @@ -354,6 +355,7 @@ class MinuteIdealAmpEvalResult:
no_book_metrics: dict
with_book_metrics: dict
reports: _RunReports
exec_basis: ExecBasisEvaluation
log_path: Path
elapsed: float

Expand Down Expand Up @@ -445,6 +447,22 @@ def run_eval_minute_ideal_amplitude(config_path: str) -> MinuteIdealAmpEvalResul
report_dir=Path(cfg.output.report_dir),
)

# Second evaluation basis (task card §2.3): the SAME factor values scored on
# the 14:51 VWAP exec-to-exec return instead of close-to-close. The reports
# above are the close_to_close control and are left untouched.
exec_basis = run_exec_basis_evaluation(
factor_series,
spec,
eval_cfg,
book_processed,
cfg=cfg,
panel=panel,
symbols=symbols,
logger=logger,
report_dir=Path(cfg.output.report_dir),
stem=_REPORT_STEM,
)

no_book_metrics = extract_metrics(reports.no_book)
with_book_metrics = extract_metrics(reports.with_book)
logger.info(
Expand All @@ -465,6 +483,7 @@ def run_eval_minute_ideal_amplitude(config_path: str) -> MinuteIdealAmpEvalResul
no_book_metrics=no_book_metrics,
with_book_metrics=with_book_metrics,
reports=reports,
exec_basis=exec_basis,
log_path=log_path,
elapsed=time.monotonic() - started,
)
Expand Down
Loading