LightGBM + Walk-Forward検証によるマルチスタイル・マルチペアFX自動売買システム。
3段階パイプライン(ベースモデル → バックテスト → メタモデル)でシグナル品質を段階的にフィルタリング。
┌─────────────────────────────────────────────────────┐
│ Pipeline │
│ │
│ Stage 1: Walk-Forward学習 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Scalp │ │Daytrading│ │ Swing │ × 4 pairs │
│ │ (M1-M5) │ │(M5-H1) │ │(H1-D1) │ │
│ └────┬─────┘ └────┬─────┘ └────┬────┘ │
│ └──────────────┼────────────┘ │
│ ▼ │
│ Stage 2: バックテスト + トレードコンテキスト収集 │
│ ▼ │
│ Stage 3: メタモデル(トレード品質フィルター) │
└──────────────────────┬──────────────────────────────┘
▼
┌──────────────────┐
│ MetaStrategy │
│ ATRベース動的 │
│ スタイル選択 │
└────────┬─────────┘
▼
┌────────────────────────┐
│ MT5 EA (Socket通信) │
│ or Rust Backtest │
└────────────────────────┘
Baseline (CM適用前) — 2026-03-09
初期残高 $1,000 / データ: Dukascopy M1 直近2年間 / 4ペア × 3スタイル
Walk-Forward Validation (IS vs OOS)
区間
Trades
Win Rate
Sharpe
Profit Factor
Max DD
Return
IS (In-Sample)
2,418
50.83%
4.59
1.60
7.95%
+386.6%
OOS (Out-of-Sample)
1,091
40.05%
0.49
1.05
39.35%
+14.9%
IS Sharpe 4.59 は過学習の兆候。IS/OOS Sharpe比 = 9.4x。
Pair
Trades
Win Rate
P&L
PF
Sharpe
Max DD
EURUSD
282
39.0%
+$101.27
1.14
1.00
16.4%
GBPUSD
360
34.7%
-$161.92
0.87
-1.18
28.6%
USDJPY
216
48.1%
+$266.09
1.51
2.91
10.3%
AUDUSD
233
42.1%
-$56.56
0.86
-1.17
12.4%
Full Backtest (全期間, $10,000ベース)
Pair
Trades
Win Rate
P&L
PF
Sharpe
Max DD
EURUSD
887
47.2%
+$849
1.38
2.44
2.4%
GBPUSD
1,221
48.2%
+$1,056
1.30
2.28
2.9%
USDJPY
1,198
52.8%
+$2,353
1.74
4.06
2.7%
AUDUSD
914
65.2%
+$1,441
2.34
5.66
0.9%
Portfolio
4,220
52.99%
+$5,700
1.57
4.53
3.17%
過学習対策(CM1-CM5)適用後のバリデーションを実行中。目標値:
指標
Baseline
目標
IS Sharpe
4.59
2-3
OOS Sharpe
0.49
1.0-2.0
IS/OOS Sharpe比
9.4x
< 2x
OOS Win Rate
40.05%
48-52%
OOS Profit Factor
1.05
> 1.1
LightGBMが方向予測(buy / sell / no signal)
信頼度 >= min_confidence 閾値(scalp: 0.40, day: 0.42, swing: 0.45)
スプレッド <= max_spread_pips(ペア別設定)
ポジション数 < max_positions
日次損失 < max_daily_loss_pct (2%)
日次取引数 < max_daily_trades (50)
SL : ATR(14)ベースの動的ストップロス(スタイル別倍率)
TP : ATR(14)ベースのテイクプロフィット(スタイル別倍率)
時間切れ : max_hold_minutes 超過で強制決済
Parameter
Value
Initial Balance
$1,000
Max Positions
5 (scalp: 8)
Max Same Direction
3
Max Daily Loss
2.0%
Max Daily Trades
50
Max Spread
2.0-2.5 pips (ペア別)
Max Drawdown
10.0%
Lot Size
0.01 (micro lot)
Leverage
100:1
Pair
pip_size
Max Spread
Notes
EURUSD
0.0001
2.0 pips
最も流動性が高い
GBPUSD
0.0001
2.5 pips
EURUSD相関 ~0.85
USDJPY
0.01
2.0 pips
東京セッションで活発
AUDUSD
0.0001
2.5 pips
コモディティ連動
Style
Timeframes
Hold Time
SL (ATR倍)
TP (ATR倍)
Horizon
min_confidence
Scalp
M1, M5
~30min
1.0x
1.5x
5min
0.40
Daytrading
M5-H1
~4hr
1.5x
2.0x
15min
0.42
Swing
H1-D1
~4days
2.5x
4.0x
120min
0.45
Overfitting Countermeasures (2026-03-09 implemented)
IS/OOS gap縮小のために以下の対策を実装済み:
#
対策
内容
CM1
WFエンバーゴ
train/val間にlabel_horizon分のギャップ挿入(ラベル漏洩防止)
CM2
フォールド増加
365/90/90日 → 180/60/60日(2→5-6フォールド)
CM3
正則化強化
max_depth 4→3, reg_alpha 5x, reg_lambda 5x, subsample 0.8→0.7
CM4
フォールド別特徴量選択
各フォールドのtrain期間のみで選択(60→30特徴量)
CM5
スプレッド反映
エントリー価格にbid/askスプレッド適用
# 依存関係インストール
pip install -r requirements.txt
# Rustエンジンビルド (optional, 高速バックテスト用)
cd rust_engine && maturin develop --release && cd ..
# フルパイプライン実行
python -m python.run_pipeline --step pipeline \
--pairs EURUSD GBPUSD USDJPY AUDUSD \
--balance 1000
# データ取得 (Dukascopy)
python -m python.run_pipeline --step fetch --pairs EURUSD GBPUSD
# 特徴量エンジニアリング
python -m python.run_pipeline --step features --pairs EURUSD GBPUSD
# モデル学習 (Walk-Forward)
python -m python.run_pipeline --step train --pairs EURUSD GBPUSD
# バックテスト + HTMLレポート
python -m python.run_pipeline --step backtest --pairs EURUSD GBPUSD --balance 1000
# Walk-Forward検証 (IS vs OOS比較)
python -m python.run_pipeline --step validate --pairs EURUSD GBPUSD --balance 1000
config/
├── base.yaml # デフォルト設定
├── portfolio.yaml # ポートフォリオリスク設定
├── styles/ # スタイル別設定 (scalp/daytrading/swing)
└── pairs/ # ペア別設定 (eurusd/gbpusd/usdjpy/audusd)
python/
├── run_pipeline.py # CLI エントリーポイント
├── pipeline/ # 3段階パイプライン
│ ├── stage1_trainer.py # WF学習 + OOS予測収集
│ ├── stage2_collector.py # バックテスト + コンテキスト収集
│ └── stage3_trainer.py # メタモデル学習
├── models/ # LightGBM モデル
│ ├── entry_model.py # エントリー方向予測 (multiclass / binary_pair)
│ ├── sl_model.py # SL距離予測
│ ├── meta_model.py # トレード品質フィルター
│ ├── regime_classifier.py # レジーム分類 (trending/ranging)
│ └── trainer.py # Walk-Forward学習パイプライン
├── features/ # 特徴量エンジニアリング
│ ├── base_features.py # テクニカル指標 (RSI, MACD, BB, ATR...)
│ ├── market_structure.py # SMC構造 (BOS, CHoCH)
│ ├── order_blocks.py # オーダーブロック検出
│ ├── fvg.py # Fair Value Gap
│ ├── liquidity.py # 流動性レベル
│ └── feature_selector.py # importance-based選択 + 相関除去
├── backtest/ # バックテストエンジン
│ ├── pair_engine.py # シングルペア Python エンジン
│ └── multi_pair_engine.py # マルチペア統合
├── strategy/ # シグナル生成
│ └── meta_strategy.py # ATRベース動的スタイル選択
├── risk/ # リスク管理
│ ├── position_sizer.py # ポジションサイジング
│ └── portfolio_risk.py # ポートフォリオレベル制約
├── server/ # MT5ライブ接続
│ └── multi_pair_server.py # Socket サーバー
└── analysis/ # 分析・診断
├── validation.py # IS/OOS検証 + VERDICT判定
└── diagnostics.py # モデル診断レポート
mql5/Experts/
└── FxMultiStyle.mq5 # MT5 Expert Advisor (Socket通信)
rust_engine/ # 高速バックテストエンジン (PyO3)
└── src/lib.rs # MultiPairEngine (k-way merge)
設定は以下の優先順位でマージ:
base.yaml ← styles/{style}.yaml ← pairs/{pair}.yaml
(defaults) (style overrides) (pair overrides)
# Walk-Forward
walk_forward :
train_days : 180 # 学習期間
val_days : 60 # 検証期間
step_days : 60 # ステップ幅
embargo_minutes : null # null=auto, 0=無効
# Entry Model (LightGBM)
entry_model :
max_depth : 3
n_estimators : 100
min_child_samples : 100
reg_alpha : 0.5
reg_lambda : 5.0
subsample : 0.7
# Risk
risk :
initial_balance : 1000.0
max_positions : 5
max_daily_loss_pct : 2.0
ML : LightGBM (multiclass / binary pair)
Data : Pandas, Polars, PyArrow
Backtest : Python (prototyping) + Rust/PyO3 (production)
Live : MQL5 EA ↔ Python Socket Server
Viz : Plotly (HTML reports)
MIT