2つのリターン時系列からSABR風の確率ボラティリティモデルをフィットし、合成リターン系列と価格系列を生成します。
python -m venv venv
venv/bin/python -m pip install -r requirements.txtvenv/bin/python sabr_generator.py \
--input train_sp500_us10y.csv \
--asset-columns sp500,DGS10 \
--steps 252 \
--paths 100 \
--seed 7 \
--output generated_sabr_series.csv \
--params-output sabr_params.json学習期間を区切る場合は次のように指定できます。
venv/bin/python sabr_generator.py \
--input train_sp500_us10y.csv \
--asset-columns sp500,DGS10 \
--start-date 1966-01-01 \
--end-date 2026-12-31generated_sabr_series.csv は long format で、各パス・各ステップについて2資産のリターンを出力します。sabr_params.json にはフィットされた各資産の mu, alpha, beta, nu, rho と、2資産間を含む4次元ブラウン運動の相関行列を保存します。
学習データはリターン系列なので、オプション市場のSABRキャリブレーションではなく、リターンの平均、標準偏差、ローリング実現ボラティリティ、標準化リターンショックとボラティリティショックの相関からパラメータを推定します。
生成時の価格過程は次の形です。
dS_i = mu_i S_i dt + alpha_i S_i^beta_i dW_i
d alpha_i = nu_i alpha_i dZ_i
2資産間の相関は、各資産の価格ショックとボラティリティショックをまとめた4次元相関行列として反映します。
将来的に期間ごとにフィットする場合は、fit_two_asset_sabr_by_periods() に ("1966-01-01", "1975-12-31") のような期間ペアを渡すと、期間ごとの TwoAssetSabrParams を得られます。
codex_timeseries_generation_plan.md に基づく最小実装は src/ と scripts/ にあります。既存の data/train_sp500_us10y.csv から特徴量、診断表、bootstrap/DCC/ADCC 生成パス、比較表を作成します。
venv/bin/python scripts/00_prepare_data.py
venv/bin/python scripts/01_diagnostics_real_data.py
venv/bin/python scripts/02_fit_bootstrap.py
venv/bin/python scripts/03_fit_marginals.py
venv/bin/python scripts/04_fit_dcc.py
venv/bin/python scripts/05_fit_adcc.py
venv/bin/python scripts/06_fit_copula.py
venv/bin/python scripts/08_fit_regime.py
venv/bin/python scripts/07_evaluate_generated.py主要な出力は次の通りです。
data/processed/daily_features.csvdata/generated/bootstrap/generated_paths.csvdata/generated/dcc/generated_paths.csvdata/generated/adcc/generated_paths.csvdata/generated/copula/generated_paths.csvdata/generated/regime/generated_paths.csvreports/tables/model_comparison.csvreports/diagnostics/final_report.md