
策略預定義階段的代碼庫架構剖析machine-learning-for-trading 第六章的策略定義、統計方法與事件研究設計【免費下載鏈接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.項目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading本指南基于machine-learning-for-trading倉庫中的 06_strategy_definition/exploration.md 深度架構分析報告系統梳理策略定義這一章節代碼庫的整體架構、核心代碼模式、統計方法與數據流設計并結合當前倉庫中的 notebook 源碼、測試用例與相關實現進行交叉印證。讀者讀完后將掌握一套可復用的假說驅動探索工程范式從數據契約到凍結配置、從基于時間的遠期收益到事件冷卻再到可版本化的策略條款表Term Sheet以及 Newey-West HAC、Lo2002Sharpe 標準誤等統計工具的正確分工。一、文檔背景一次針對策略預定義代碼庫的深度架構審查exploration.md是一份對策略定義章節代碼庫的Deep Architecture Pattern Review深度架構與模式審查生成于 2026-01-25審查類型為深度架構與模式審查。其結論將整章代碼庫評為★★★★☆4/5出版就緒仍有小幅改進空間并從架構、代碼質量、組件清單、數據流、統計方法、依賴關系、風險區域等多個維度給出了完整的證據鏈。值得注意的是該報告撰寫時對應的是章節編號為Chapter 5Strategy Definition的代碼結構而當前倉庫快照中該目錄已演進為Chapter 6Strategy Research Framework目錄內實際包含 3 個 notebook01_where_ideas_come_from、02_cv_foundations、03_case_study_overview與 README.md。因此本文以分析報告為骨架同時以當前倉庫的實際源碼為佐證指出兩者之間的演進關系確保所有結論可驗證、可追溯。核心結論速覽維度評估整體質量★★★★☆4/5出版就緒文檔質量★★★★★每個 notebook 均含用途、數據契約、假設與局限類型安全★★★★☆凍結數據類 關鍵函數類型標注Polars 使用★★★★★惰性 API、.over()窗口僅邊界處使用 pandas時間處理★★★★★基于時間的 join 而非 shift、時區感知、容差參數時點正確性Point-in-Time★★★★☆滾動 z-score、宏觀數據滯后處理、明確的未來函數警告二、架構總覽目錄結構與假說驅動探索模式2.1 報告記錄的目錄結構Chapter 5 時期06_strategy_definition/ ├── chapter/ # 書稿基于分節的工作流 │ ├── draft.md # 由分節自動生成 │ ├── summary.md # 章節范圍定義 │ ├── bibliography.md # 學術參考文獻 │ └── sections/ # 10 個分節文件真源 │ ├── code/ # 5 個 Jupytext notebook約 4,500 行 │ ├── 01_etf_momentum.py # ETF 相關性、狀態、輪動858 行 │ ├── 02_crypto_premium.py # 資金費率均值回歸792 行 │ ├── 03_algoseek_intraday.py # 微觀結構探索817 行 │ ├── 04_aqr_factor_performance.py # 一個世紀的因子證據1,395 行 │ └── 05_strategy_term_sheet_template.py # Python 數據類模板694 行 │ ├── term_sheets/ # 8 份已完成的策略規格說明書 ├── catalog/ # 5 份 notebook 元數據 JSON ├── figures/ # 書稿圖AI 生成 notebook 輸出 └── reviews/ # 代碼審查產物2.2 當前倉庫的對應結構Chapter 6 時期當前倉庫中該目錄已精簡為 3 個 notebook但保持了同樣的研究框架定位Notebook教學內容對應章節01_where_ideas_come_from.py從故事到可測量的足跡用 SLOW/WRONG/RISK 分類命名策略優勢來源再通過五分位條件收益排序、時代壓力測試與換手率檢查驗證跨資產動量是否留下足跡§6.1–§6.202_cv_foundations.py從第一性原理推導 Walk-Forward 交叉驗證決策時點可納性、標簽緩沖purging、特征緩沖embargo、日歷感知切分、嵌套 Walk-Forward 與 CPCV§6.503_case_study_overview.py九個案例研究的跨策略匯總資產類別、標的池、成本類別、評估協議與預測覆蓋時間線§6.32.3 核心模式假說驅動探索Hypothesis-Driven Exploration整個章節代碼庫遵循一條清晰的教學模式流水線1. Data Contract文檔化的數據假設 ↓ 2. Configuration Dataclass凍結、版本化 ↓ 3. Exploratory Analysis相關性、分布、狀態 ↓ 4. Event Study含冷卻期、遠期收益 ↓ 5. Key Priors Summary供 Term Sheet 使用這條流水線在 01_where_ideas_come_from.py 中有著直接體現notebook 首先明確想法與機制SLOW/WRONG/RISK 分類、誰在對賭、為何愿意與我們交易然后通過參數區定義探索配置再執行五分位條件收益排序、時代壓力測試與換手率檢查最后把可測量的結論留給后續章節凍結設定。README 將這種邏輯表述為策略不只是信號或模型而是一個必須在決策時點定義、并像實盤一樣評估的可執行決策過程——假說驅動探索正是把這句話工程化的手段。三、四大核心代碼模式文檔精華3.1 模式一配置數據類Configuration Dataclasses——評分為 Excellentdataclass(frozenTrue) class EtfExplorationConfig: Configuration for ETF momentum exploration (Chapter 2). start_date_str: str 2007-01-01 trading_days_per_year: int 252 momentum_formation_days: int 126 # 6 months skip_month_days: int 21 # Skip most recent month # ... etc收益不可變immutable、文檔化、成為 notebook 參數的單一真源single source of truth。凍結數據類可以防止探索過程中參數被意外篡改配合類型標注讓 IDE 與靜態檢查工具都能參與校驗。當前倉庫中的對應實現在 01_where_ideas_come_from.py 中同樣的參數化哲學以參數區 Papermill 注入的形式出現# %% tags[parameters] # Production defaults — Papermill injects overrides for CI LOOKBACK 12 # months of past return in the signal SKIP 1 # skip the most recent month (the 12-1 convention) N_QUANTILES 5 # quintiles MIN_NAMES 30 # minimum eligible ETFs in a month to include itLOOKBACK 12信號使用過去 12 個月收益即經典12-1 動量約定SKIP 1跳過最近一個月規避短期反轉噪音N_QUANTILES 5按信號分為五分位MIN_NAMES 30月度內合格 ETF 數量下限防止小樣本月份污染排序。這與報告中的skip_month_days: int 21遙相呼應——兩種時期分別用月數與交易日數表達同一個跳過最近一個月的約定。3.2 模式二基于時間的遠期收益Time-Based Forward Returns——生產級質量def _compute_forward_returns_hourly( df: pl.DataFrame, *, price_col: str, horizons_hours: tuple[int, ...], group_col: str, ts_col: str, tolerance_hours: int 2, ) - pl.DataFrame:模式要點使用join_asof配合tolerance容差替代.shift()來計算遠期收益從而正確處理缺失數據/非對齊時間戳造成的缺口。.shift()假設數據行是均勻間隔的而真實市場數據尤其是小時級 crypto 或分鐘級微觀結構數據存在停牌、節假日、數據缺口join_asof加容差才能在最近可用的未來價格上精確計算收益。設計啟示函數簽名使用 keyword-only 參數*之后強制調用方顯式寫出每個參數名顯著降低參數錯位風險tolerance_hours的存在說明作者把數據缺口容忍度視為顯式的建模假設而非隱藏的默認行為。3.3 模式三帶冷卻期的事件研究Event Study with Proper Cooldowndef event_study_with_cooldown( df: pl.DataFrame, regime_col: str regime, cooldown_hours: int 24, ) - pl.DataFrame:模式要點有狀態的稀疏化stateful thinning——比較的對象是最近一個被保留的事件而不是上一個事件。這一細節至關重要如果簡單地按時間間隔過濾如事件之間至少間隔 24 小時在事件密集區會因為前一個事件被剔除、當前事件卻因與它相距夠遠而被保留而產生誤判正確做法是維護一個最后保留事件的時間戳每遇到新事件都與它比較。這保證了事件樣本的獨立性避免同一波行情被重復計數而放大顯著性。3.4 模式四策略條款表Strategy Term Sheet作為 Python 數據類dataclass class StrategyTermSheet: name: str version: str status: Literal[Draft, Review, Approved] classification: Literal[Price-Based, Fundamental, Structural, ML-Enhanced] hypothesis: FalsifiableHypothesis blueprint: ImplementationBlueprint feasibility: FeasibilityGate validation: ValidationPlan收益強制結構化支持 JSON/YAML 導出支持版本控制。逐字段解讀字段類型作用namestr策略名稱對應 term sheet 文件名主前綴versionstr版本號配合 git 實現版本化演進statusLiteral[Draft, Review, Approved]生命周期狀態機約束策略何時可進入下游回測classificationLiteral[Price-Based, Fundamental, Structural, ML-Enhanced]策略族分類是可行性過濾器的第一層hypothesisFalsifiableHypothesis可證偽假說——策略的為什么可能有效必須以可被數據拒絕的形式陳述blueprintImplementationBlueprint實現藍圖信號定義、決策時點、換倉規則、可交易標的feasibilityFeasibilityGate可行性門數據可得性、交易成本量級、容量約束validationValidationPlan驗證計劃評估協議、失敗條件、通過/拒絕閾值FalsifiableHypothesis可證偽假說字段是整章方法論的核心——它把策略想法從敘事性陳述動量有效改造成可拒絕的實證聲明過去 12 個月收益居前五分位的資產未來一個月條件收益單調高于末五分位從而為后續所有統計檢驗提供靶子。這一點在當前倉庫 01_where_ideas_come_from.py 的 SLOW/WRONG/RISK 分類中得到呼應notebook 預先命名機制SLOW宏觀信息跨市場緩慢擴散WRONG投資者反應不足并追逐表現同時預先聲明失敗模式動量在轉折點劇烈反轉且因人人可讀同一份價格歷史而衰減——這正是可證偽假說思維在探索階段的落地。3.5 內部依賴關系05_strategy_term_sheet_template.py ↓ exports StrategyTermSheet (dataclass) ↓ used by term_sheets/*.md (via to_markdown())即數據類模板通過to_markdown()方法導出為 markdown 形式的 term sheet實現代碼即真源、文檔即產物的單向依賴。四、組件清單Notebook、Term Sheet 與章節分節4.1 Notebook 清單報告記錄5 個約 4,500 行Notebook用途數據源行數質量01_etf_momentum相關性、狀態、輪動ETF Universe, FRED858★★★★★02_crypto_premium資金費率均值回歸Binance Premium/OHLCV792★★★★★03_algoseek_intraday微觀結構探索AlgoSeek NASDAQ100817★★★★☆04_aqr_factor_performance一個世紀的因子證據AQR, Fama-French1,395★★★★★05_strategy_term_sheet_template交互式 Term Sheet無694★★★★★4.2 Term Sheet 清單報告記錄8 份Term Sheet分類狀態etf_momentum__rotational_momentum.mdPrice-BasedCompletecrypto_premium__premium_funding_reversal.mdStructuralCompletenasdaq100_reversal__intraday_orderflow_reversal.mdStructuralCompleteus_factors__cross_sectional_factor_momentum.mdPrice-BasedCompletefutures_carry__term_structure_momentum.mdStructuralCompletefx_momentum__cross_sectional_momentum.mdPrice-BasedCompletealgoseek_sp500__options_volatility_alpha.mdStructuralCompleteetf_momentum.mdPrice-BasedLegacy舊版應使用帶__的版本命名約定{dataset}__{strategy_type}.md例如etf_momentum__rotational_momentum.md、crypto_premium__premium_funding_reversal.md。報告中指出etf_momentum.md與etf_momentum__rotational_momentum.md并存造成了哪個是規范版本的混淆屬于中等風險項。這些 term sheet 所描述的策略族與當前倉庫 case_studies 目錄下的案例一一對應——case_studies/etfs、case_studies/crypto_perps_funding、case_studies/nasdaq100_microstructure、case_studies/us_firm_characteristics 等均延續了ETF 輪動 / 資金費率反轉 / 微觀結構 / 因子動量的研究線且這些案例目錄中都包含 14_backtest 等下游回測 notebook印證了報告數據流圖中Term Sheet → 下游章節特征、回測的走向。4.3 章節分節清單報告記錄10 節00_preamble.md 01_the_strategy_specification_problem.md 02_a_map_of_strategies_and_edges.md 03_the_strategy_term_sheet.md 04_filling_the_term_sheet.md 05_minimum_specification_feasibility.md 06_validation_plan_and_failure_conditions.md 07_where_ideas_come_from.md 08_evidence_discipline_and_the_factor_zoo.md 09_key_takeaways.md當前倉庫 README.md 將這一脈絡濃縮為 7 個學習目標把想法映射到策略地圖、以決策時點術語定義版本化交易設定、在經濟意義上定義更好、設計保持時序的評估協議、建立窄基線檢查點、用試驗分類學保持搜索可審計——可以看到策略規格說明問題→策略地圖→Term Sheet→可行性→驗證計劃這一報告中的分節骨架被完整保留。五、數據流架構從數據層到下游章節┌─────────────────┐ │ Data Layer │ │ (utils, DATA_DIR)│ └────────┬────────┘ │ ┌────────────────────┼────────────────────┐ │ │ │ ▼ ▼ ▼ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ ETF Universe │ │ Crypto Premium│ │ AlgoSeek │ │ FRED │ │ OHLCV │ │ Minute Bars │ └───────┬───────┘ └───────┬───────┘ └───────┬───────┘ │ │ │ ▼ ▼ ▼ ┌───────────────────────────────────────────────────┐ │ Exploration Notebooks │ │ (correlation, regime, event study, statistics) │ └───────────────────────┬───────────────────────────┘ │ ▼ ┌───────────────────────────────────────────────────┐ │ Strategy Term Sheets │ │ (hypothesis, blueprint, feasibility, validation)│ └───────────────────────────────────────────────────┘ │ ▼ Downstream Chapters (Ch7 features, Ch17 backtest)這條數據流的三個關鍵設計決策值得展開數據層統一接入所有 notebook 通過utilsDATA_DIR路徑管理與ml4t.data.providersAQR、Fama-French 數據接入數據不在 notebook 內部硬編碼路徑。當前倉庫的 01_where_ideas_come_from.py 延續了該約定通過from data import load_etfs加載 ETF 面板并注明數據前提ML4T_DATA_PATH/etfs/market/下存在 parquet缺失時運行python data/etfs/market/download.py。探索先行、規格后置Notebook 只負責產出證據相關性、狀態、事件研究統計量不負責下結論結論沉淀為 Term Sheet。這實現了證據生產與決策記錄的解耦。單向依賴Term Sheet 只依賴探索 notebook 的輸出下游章節特征工程、回測只依賴 Term Sheet不存在反向依賴從而保證整個研究流水線可獨立重跑、獨立審計。六、統計方法詳解工具的正確分工6.1 因子分析04_aqr_factor_performance方法實現質量Newey-West HAC t 統計calculate_mean_return_tstat()★★★★★Lo2002Sharpe 標準誤calculate_sharpe_stats()★★★★★最大回撤calculate_max_drawdown()★★★★☆滾動相關性pl.rolling_corr()原生★★★★★報告特別強調的關鍵區分必須正確區分Harvey et al.2016均值收益 t 統計用于因子發現與Lo2002Sharpe 比率顯著性用于績效評估兩種推斷框架。前者回答這個因子是否真實存在后者回答這個策略績效是否顯著區別于運氣——用錯工具會直接導致多重檢驗下的虛假發現。當前倉庫的對應實現在 17_portfolio_construction/05_factor_allocation_evidence.py 中可以找到同名的calculate_mean_return_tstat()其實現細節正是文檔所述方法的可運行版本# Newey-West lag selection max_lag int(np.floor(4 * (n / 100) ** (2 / 9))) max_lag max(1, min(max_lag, n // 4)) # Compute Newey-West HAC variance resid returns - mean_ret gamma_0 np.sum(resid**2) / n gamma_sum 0 for j in range(1, max_lag 1): weight 1 - j / (max_lag 1) # Bartlett kernel gamma_j np.sum(resid[j:] * resid[:-j]) / n gamma_sum 2 * weight * gamma_j nw_var (gamma_0 gamma_sum) / n nw_se np.sqrt(max(nw_var, 1e-10)) mean_tstat mean_ret / nw_se if nw_se 0 else 0要點解讀滯后階數選擇遵循4 * (n / 100)^(2/9)的經驗法則并夾在[1, n//4]區間內Bartlett 核weight 1 - j / (max_lag 1)對高階自協方差線性遞減加權保證 HAC 方差估計半正定推斷使用月度尺度上的mean_tstat而非年化標準誤——年化只用于展示mean_return避免了年化 SE 帶來的誤導。同文件中的calculate_sharpe_stats()則采用 Lo 式診斷將月度估計與其標準誤一并重標度到年度單位并用compute_autocorrelation_adjustment()對收益自相關進行不確定性膨脹——這是一個透明的 Lo 風格近似該文件注釋明確說明不是 Lo (2002) 的完整協方差表達式報告對該實現的評價是★★★★★正確區分了兩種推斷目的。6.2 動量分析01_etf_momentum方法實現質量截面五分位排名.rank(ordinal).over(timestamp)★★★★★6-1 動量跳過最近月向量化.shift()★★★★★收益率曲線狀態過濾FRED 數據 2 交易日滯后★★★★★輪動模擬逐月循環教學目的★★★★☆截面五分位排名使用 Polars 的over(timestamp)窗口內排名天然是截面cross-sectional操作無數據泄漏6-1 動量的跳過最近一個月約定與 01_where_ideas_come_from.py 中SKIP 1參數一致該約定在倉庫測試中被顯式驗證——tests/test_etf_skip_recent_momentum.py 的測試test_skip_recent_momentum_uses_price_ratio_ending_one_month_ago斷言跳過的區間是一個月并規定skip_recent 21個交易日、動量窗口族[5, 10, 21, 42, 63, 126, 189, 252]。該測試用 AST 解析方式從 notebook 中抽取momentum_features函數而不執行整個 notebook確保被測試的就是 notebook 內真實使用的實現收益率曲線狀態過濾引入 2 交易日滯后是時點正確性point-in-time紀律的典型例子——宏觀數據發布滯后必須顯式建模否則狀態標簽會偷看未來逐月循環模擬被標記為教學目的可接受的教學性實現屬于低風險項。6.3 事件研究02_crypto_premium、03_algoseek_intraday方法實現質量滾動 z-score時點正確168 小時窗口★★★★★事件冷卻按組有狀態稀疏化★★★★★遠期收益基于時間 join 容差★★★★★Winsorization全局分位數僅探索用★★★★☆滾動 z-score 使用168 小時窗口7 天而不是固定行數窗口保證在數據缺失時窗口仍然代表最近 7 個自然日的完整信息。全局 winsorization使用全樣本分位數被文檔標注為僅探索階段使用——因為它理論上存在輕微的時點泄漏在正式信號構建階段應替換為滾動分位數。七、代碼質量標準符合度與依賴分析7.1 與書籍標準的符合度標準符合度說明Polars-first? 完全除可視化邊界外無 pandas凍結配置數據類? 完全所有 notebook 均采用該模式基于時間的 join? 完全遠期收益不使用.shift()數據契約文檔化? 完全每個 notebook 均有契約表輸出僅限figures/? 完全無臨時文件落盤章節正文不含代碼? 完全按名稱引用 notebookTEST 模式支持?? 部分并非所有 notebook 都有顯式 TEST 守衛7.2 外部依賴# Core polars # DataFrames主 numpy # 數值運算 pandas # 僅邊界轉換 plotly # 可視化 # Domain scipy.stats # 統計檢驗 IPython.display # Jupyter 渲染 # ML4T utils # DATA_DIR、路徑 ml4t.data.providers # AQR、Fama-FrenchPolars-first、pandas 僅限可視化邊界是這份審查報告反復強調的架構紀律pandas 僅在需要matplotlib/scipy互操作時出現轉換只發生在邊界處核心計算全部由 Polars 的惰性 API 承擔。運行方式方面README.md 給出當前倉庫的推薦執行方式# 倉庫根目錄執行 uv run python 06_strategy_definition/notebook.py # 測試模式通過 Papermill 縮減數據 uv run pytest tests/test_notebooks.py -v -k 06_strategy_definition這解釋了 3.1 節中tags[parameters]參數區的作用正常執行使用生產默認值CI 測試時由 Papermill 注入縮減數據集的覆蓋參數。八、改進建議、風險區域與總結8.1 改進建議按優先級優先級 1代碼細節改進為 notebook 增加__all__導出支持模塊級復用__all__ [EtfExplorationConfig, calculate_momentum_score]抽取公共工具到共享模塊_compute_forward_returns_*系列函數與_event_cooldown_filter在多個 notebook 中重復出現應上移到utils/exploration.py為舊版etf_momentum.md增加 catalog 條目或直接移除明確規范版本。優先級 2文檔增強在 README 增加 notebook 執行順序說明文檔化 term sheet 命名約定{dataset}__{strategy_type}.md。優先級 3測試覆蓋為calculate_mean_return_tstat()、calculate_sharpe_stats()Lo 2002 SE、_event_cooldown_filter()增加單元測試對照已知數值與邊界情況增加數據契約校驗測試驗證 parquet 模式與文檔化契約一致檢查預期列名與 dtype。值得注意第 3 條數據契約校驗的建議在當前倉庫中已經部分落地——tests/test_etf_skip_recent_momentum.py 正是以從 notebook 中抽取真實函數 斷言可復現行為的方式補上了動量定義的可測試性。8.2 風險區域低風險可接受區域觀察緩解pandas 邊界matplotlib/scipy 需要 pandas僅邊界轉換影響最小全局 winsorization使用全樣本分位數已文檔化為僅探索使用輪動模擬中的循環逐月循環為清晰起見教學目的可接受中等風險需監控區域觀察緩解重復 term sheetetf_momentum.md與etf_momentum__*.md并存澄清規范版本硬編碼魔法數字notebook 正文中的部分閾值移入配置數據類缺少類型標注部分輔助函數類型不全為生產復用補齊8.3 總結這份代碼庫為什么值得作為策略預定義的標準范本綜合報告結論策略定義章節代碼庫體現了四點示范價值清晰的關注點分離數據契約 → 配置 → 分析 → 總結每層職責單一、邊界明確正確的統計工具Newey-West HAC 用于因子發現、Lo Sharpe 標準誤用于績效評估、基于時間的遠期收益避免缺口誤判工具與問題嚴格匹配時點正確性紀律滾動 z-score、宏觀數據滯后處理、標簽緩沖與特征緩沖從源頭杜絕未來函數版本化產物Term Sheet 作為結構化文檔進入版本控制使策略規格本身成為可 diff、可審計、可回滾的一等公民。該章節的核心方法論在演進后的 README.md 中凝練為一句可執行的原則歷史上有效的測試要能說明未來的行為就必須把策略當作在決策時點定義、并像實盤一樣評估的可執行決策過程——假說驅動探索、凍結配置、事件研究冷卻與可證偽假說正是把這一原則落到代碼層面的完整工具箱。報告最終評價為出版就緒僅需小幅清理其改進建議抽取公共工具、澄清命名、補齊統計函數測試也是任何同類策略研究代碼庫可以直接復用的治理清單。本文以 06_strategy_definition/exploration.md 為骨架結合當前倉庫 06_strategy_definition/ 下的 notebook 源碼、tests/test_etf_skip_recent_momentum.py 與 17_portfolio_construction/05_factor_allocation_evidence.py 中的統計實現交叉印證報告中記錄的 Chapter 5 時期目錄結構如code/、term_sheets/屬于分析時的快照當前倉庫中該章節已演進為 Chapter 6 的 3-notebook 結構兩者以演進關系對應不構成矛盾。【免費下載鏈接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.項目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考