チュートリアル

投資戦略の開発・
バックテスト・最適化

戦略 JSON の作成から、バックテスト実行・ベイズ最適化・ウォークフォワード検証まで一気通貫で学べる AlphaForge 入門ガイドです。 CL=F(WTI原油先物)を例題に、HMM + ボリンジャーバンド + RSI の複合戦略を実装します。

AlphaForge とは

AlphaForge は JSON で定義した戦略を vectorbt で高速シミュレーションし、 Optuna によるベイズ最適化と ウォークフォワード検証 で過学習を防ぐ 定量的投資戦略開発 CLI です。 設定はすべて JSON で管理するため、Claude などのコーディングエージェントとの連携にも最適化されています。

コンポーネント役割
forgeシミュレーション・最適化エンジン本体
strategies/戦略 JSON・最適化結果・実行ログの管理ワークスペース
strikeTradingView Webhook を受け取り外部 API に自動送信するサーバー

インストールと初期設定

  1. alpha-forge を取得してインストール

    インストーラーが最新バイナリをダウンロードします(macOS / Linux 例)。Windows / 手動配置は インストールガイド を参照してください。インストール直後から Trial プラン(Whop 登録不要)で実行できます。有料プラン(Lifetime / Annual / Monthly)を購入した場合のみ forge system auth login で Whop OAuth 認証してください。

    # 最新バイナリをインストール(macOS / Linux)
    curl -sSL https://alforge-labs.github.io/install.sh | bash
    
    # (任意)有料プラン購入後の認証
    forge system auth login
  2. 戦略ワークスペースを初期化

    作業ディレクトリに forge.yaml(設定ファイル)と strategies/ ディレクトリが生成されます。

    mkdir my-strategies && cd my-strategies
    forge system init
    # → forge.yaml, strategies/, data/ が作成されます
  3. ヒストリカルデータを取得

    Yahoo Finance からデータをダウンロードしてローカルキャッシュに保存します。

    # CL=F(WTI原油先物)の過去 5 年分を取得
    forge data fetch CL=F --period 5y
    
    # SPY, QQQ なども同様に取得可能
    forge data fetch SPY QQQ --period 5y

戦略 JSON の作成

AlphaForge の戦略はすべて JSON ファイルで定義します。 以下は CL=F 向けの HMM + ボリンジャーバンド + RSI 複合戦略の例です。 strategies/cl_hmm_bb_rsi_v1.json として保存してください。

{
  "strategy_id": "cl_hmm_bb_rsi_v1",
  "name": "CL HMM + BB + RSI v1",
  "version": "1.0.0",
  "description": "CL=F 向け HMM レジーム × ボリンジャーバンド × RSI 複合戦略",
  "target_symbols": ["CL=F"],
  "asset_type": "futures",
  "timeframe": "1d",
  "parameters": {
    "bb_length": 20,
    "bb_std": 2.0,
    "rsi_length": 14,
    "rsi_entry": 40,
    "rsi_exit": 60
  },
  "indicators": [
    { "id": "bb_lower", "type": "BB", "params": { "length": 20, "std": 2.0, "line": "lower" } },
    { "id": "bb_upper", "type": "BB", "params": { "length": 20, "std": 2.0, "line": "upper" } },
    { "id": "rsi",      "type": "RSI", "params": { "length": 14 } },
    { "id": "hmm_state","type": "HMM", "params": { "n_states": 2, "features": ["returns","volatility"] } }
  ],
  "entry_conditions": {
    "long": {
      "logic": "AND",
      "conditions": [
        { "left": "close",     "op": "crosses_above", "right": "bb_lower" },
        { "left": "rsi",       "op": "lt",            "right": "rsi_entry" },
        { "left": "hmm_state", "op": "eq",            "right": 1 }
      ]
    }
  },
  "exit_conditions": {
    "long": {
      "logic": "OR",
      "conditions": [
        { "left": "close", "op": "crosses_above", "right": "bb_upper" },
        { "left": "rsi",   "op": "gt",            "right": "rsi_exit" }
      ]
    }
  },
  "risk_management": {
    "leverage": 5.0,
    "position_sizing_method": "risk_based",
    "risk_per_trade_pct": 1.5,
    "max_positions": 1
  },
  "optimizer_config": {
    "param_ranges": {
      "bb_length":  { "min": 10, "max": 40, "step": 5 },
      "bb_std":     { "min": 1.5, "max": 3.0, "step": 0.5 },
      "rsi_length": { "min": 10, "max": 20, "step": 2 },
      "rsi_entry":  { "min": 30, "max": 50, "step": 5 },
      "rsi_exit":   { "min": 55, "max": 75, "step": 5 }
    },
    "constraints": { "min_trades": 10 },
    "metric": "sharpe_ratio"
  }
}
ポイント: hmm_state は HMM が検出した市場レジームです。 1 が「上昇トレンド」レジームに対応することが多いですが、 バックテスト後に状態の意味を確認して調整してください。

バックテスト実行

  1. 基本的なバックテストを実行
    FORGE_CONFIG=./forge.yaml uv run forge backtest run CL=F \
      --strategy cl_hmm_bb_rsi_v1 \
      --start 2019-01-01 \
      --end 2024-12-31
  2. JSON 形式で結果を取得(スクリプト連携向け)
    FORGE_CONFIG=./forge.yaml uv run forge backtest run CL=F \
      --strategy cl_hmm_bb_rsi_v1 \
      --json | jq '.summary'

    出力例:

    {
      "symbol": "CL=F",
      "strategy": "cl_hmm_bb_rsi_v1",
      "period": "2019-01-01 to 2024-12-31",
      "total_return": 0.892,
      "cagr": 0.136,
      "sharpe_ratio": 1.07,
      "max_drawdown": -0.183,
      "total_trades": 24,
      "win_rate": 0.583
    }

ベイズ最適化

Grid Search と異なり、Optuna によるベイズ最適化は過去の試行結果を参考にしながら 効率的に最適パラメータを探索します。 optimizer_config.param_ranges で定義した範囲を探索します。

  1. 最適化を実行(200 試行)
    FORGE_CONFIG=./forge.yaml uv run forge optimize run CL=F \
      --strategy cl_hmm_bb_rsi_v1 \
      --trials 200 \
      --metric sharpe_ratio \
      --save
  2. 最適化履歴を確認
    FORGE_CONFIG=./forge.yaml uv run forge optimize history \
      --strategy cl_hmm_bb_rsi_v1

    出力例(スコアボード形式):

    Timestamp           Sharpe  CAGR    MaxDD   bb_length  bb_std  rsi_length  rsi_entry  rsi_exit
    20260512_103200     1.24    15.3%  -16.1%  25         2.0     12          35         65
    20260511_180415     1.18    14.7%  -17.4%  20         2.0     14          40         60
    20260510_094822     1.15    14.2%  -18.2%  25         2.5     12          35         60
  3. 最適パラメータを戦略 JSON に反映

    結果ファイルは optimize run --save の出力に表示され、data/results/ 配下に保存されます。

    FORGE_CONFIG=./forge.yaml uv run forge optimize apply \
      data/results/optimize_cl_hmm_bb_rsi_v1_<timestamp>.json \
      --to-strategy cl_hmm_bb_rsi_v1
過学習に注意: 最適化は訓練期間内の成績を最大化するため、 その期間に過剰適合する可能性があります。 必ずウォークフォワード検証で汎化性能を確認してください。

ウォークフォワード検証

ウォークフォワード検証(Walk-Forward Test)は、時系列データを訓練期間と検証期間に分割し 「未知のデータでも機能するか」を評価する手法です。 AlphaForge は訓練・検証の分割を自動で繰り返し、汎化性能を統計的に評価します。

  1. ウォークフォワード検証を実行
    FORGE_CONFIG=./forge.yaml uv run forge optimize walk-forward CL=F \
      --strategy cl_hmm_bb_rsi_v1_optimized \
      --windows 5 \
      --metric sharpe_ratio
  2. ウィンドウ別の詳細を確認(JSON)
    FORGE_CONFIG=./forge.yaml uv run forge optimize walk-forward CL=F \
      --strategy cl_hmm_bb_rsi_v1_optimized \
      --windows 5 --json | jq '.windows'

    出力例:

    Walk-Forward Test Report — cl_hmm_bb_rsi_v1_optimized / CL=F
    Folds: 6  |  Train: 24M  |  Test: 6M  |  Step: 6M
    
    Fold  Train Period          Test Period           Sharpe  CAGR
    1     2019-01 – 2020-12    2021-01 – 2021-06    1.15    14.2%
    2     2019-07 – 2021-06    2021-07 – 2021-12    0.98    11.7%
    3     2020-01 – 2021-12    2022-01 – 2022-06    1.22    16.1%
    4     2020-07 – 2022-06    2022-07 – 2022-12    0.87     9.8%
    5     2021-01 – 2022-12    2023-01 – 2023-06    1.31    18.4%
    6     2021-07 – 2023-06    2023-07 – 2023-12    1.09    13.2%
    
    Avg Sharpe: 1.10  |  Avg CAGR: 13.9%  |  WF Efficiency: 89%
WF Efficiency とは: 各フォールドの検証期間 Sharpe 比の平均を、 最適化 Sharpe 比で割った値です。80% 以上あれば過学習が抑制されていると判断できます。

指標の読み方

指標説明目安
CAGR 年率複利成長率(Compound Annual Growth Rate)。年あたりの平均リターン。 10% 以上が目安
Sharpe Ratio リターンをリスク(標準偏差)で割ったリスク調整後リターン。高いほど効率的。 1.0 以上が良好
Max Drawdown 累積リターンの最大下落幅。小さいほどリスクが低い。 -20% 未満が目安
Win Rate 利益が出たトレードの割合。50% 以上が目安だが Sharpe と合わせて評価する。 50% 以上
WF Efficiency ウォークフォワード検証の効率。過学習の指標として使用。 80% 以上

よくある質問

  • HMM の状態番号の意味は?

    HMM の状態番号(0, 1, ...)は学習の都度変わります。 バックテスト後に forge backtest run <SYMBOL> --strategy <strategy_id> --regime で 各状態の平均リターン・ボラティリティを確認して、「上昇トレンド」状態を特定してください。

  • TradingView との連携方法は?

    最適化後に forge pine generate --strategy <strategy_id> を実行すると TradingView Pine Script v6 のコードが生成されます。 アラートを alpha-strike に送信することで自動実行が可能です。

  • 最適化の試行回数はいくつが適切?

    パラメータ数が 3〜5 個の場合は 100〜200 試行で十分な探索が可能です。 パラメータ数が多い場合や精度を高めたい場合は 500〜1000 試行を推奨します。

    forge optimize run CL=F --strategy cl_hmm_bb_rsi_v1 --trials 500 --metric sharpe_ratio --save