第2章
バックテストエンジン
当社のバックテストエンジンは、イベント駆動型アーキテクチャで自社開発しています。取引判断を現実とまったく同じ形でシミュレートし、1本のバーずつ処理して、未来の情報は決して使用しません。
1. イベント駆動型アーキテクチャ
エンジンの中核となる設計原則は、ストラテジーが現在のバーとそれ以前のデータしか参照できず、未来のバーは決して参照できないという点です。これは運用ルールではなく、アーキテクチャによって強制されています。ストラテジーのコードが先のデータにアクセスすることは物理的に不可能です。
処理ループ(バーごと)
データフィード
OHLCVバーが到着
インジケーターエンジン
インジケーターを再計算
ストラテジーロジック
エントリー/エグジットルールを評価
注文生成
待機中の注文を作成
注文執行
次のバーの始値で約定
ポートフォリオ更新
損益、資産曲線
逐次処理
各バーは時系列順に1本ずつ処理されます。エンジンは厳密なカーソルを保持しており、バーTとそれ以前のすべてのバーは読み取れますが、バーT+1はまだ存在しません。
再現可能な出力
同じデータファイルと同じストラテジーパラメーターであれば、エンジンは毎回まったく同じ結果を出力します。ランダム性はなく、実行ごとの浮動小数点の差異もありません。
マルチアセット対応
エンジンは複数の銘柄に対して同時にストラテジーを実行でき、ポートフォリオレベルの資金制約や資産間の相関を考慮します。
2. シグナル生成
売買シグナルは、価格系列にインジケーター関数を適用して生成されます。バーTにおけるすべてのインジケーター値は、バーTの時点で利用可能なデータ、つまりバー0からバーTまで(バーTを含む)の価格のみを用いて計算されます。シグナルはその後、バーT+1の始値で実行されます。
対応インジケーターの種類
- ▸ 移動平均(SMA、EMA、WMA、DEMA、TEMA、KAMA)
- ▸ モメンタム(RSI、MACD、Stochastic、CCI、ROC)
- ▸ ボラティリティ(ATR、Bollinger Bands、Keltner Channels、HV)
- ▸ 出来高(OBV、CMF、VWAP、Volume Profile)
- ▸ トレンド(ADX、Parabolic SAR、Ichimoku Cloud)
- ▸ オシレーター(Williams %R、Ultimate Oscillator、MFI)
- ▸ 統計(Zスコア、線形回帰の傾き、相関)
- ▸ カスタム複合インジケーター(ストラテジー固有)
シグナルの種類
- ▸ 買いエントリー/売りエントリー
- ▸ 買いエグジット/売りエグジット(明示指定)
- ▸ ストップロスのトリガー(価格ベースまたはATR倍数)
- ▸ 利益確定のトリガー(固定目標またはトレーリング)
- ▸ 積み増し/一部決済(ピラミッド型エントリー)
- ▸ 時間ベースのエグジット(固定保有期間)
- ▸ レジームフィルター(市場環境のゲート)
- ▸ リスクベースのエグジット(ポートフォリオのドローダウン閾値)
3. 約定モデル
約定モデルは、注文がどのように約定するかを決定します。当社は、実際のパフォーマンスをやや低めに見積もる保守的な前提を意図的に採用しています。落胆するよりも、嬉しい誤算のほうが望ましいからです。
約定パラメーター
なぜ次のバーの始値なのか?
多くの個人向けバックテストツールは、シグナルを生成した同じバーでの約定を認めていますが、現実にはそれは不可能です。バーTの終値でクロスが発生した場合、シグナルはバーが確定するまで分からないため、バーTの終値で取引することはできません。
4. ポジションサイジングモデル
ポジションサイジングは、各取引にどれだけの資金を割り当てるかを決定します。レポートで使用したサイジングモデルは、常にレポートのヘッダーに開示されます。ストラテジーごとに、リスク特性に応じて異なるモデルが用いられます。
固定比率(資産に対する%)
最も一般的最も広く使われているモデルです。各取引で、現在の口座資産の一定割合をリスクにさらします。口座が増えればポジションサイズも比例して大きくなり、減れば小さくなります。
ポジションサイズ = 口座資産 × リスク% ÷ (エントリー価格 – ストップ価格)
口座:HK$100,000 | リスク:2% | エントリー:HK$10 | ストップ:HK$9 → サイズ = HK$2,000 ÷ HK$1 = 2,000株
固定金額
シンプルなストラテジー口座の大きさにかかわらず、各取引に一定の金額を割り当てます。理解しやすい反面、口座の成長に応じた調整はできません。
ポジションサイズ = 固定金額 ÷ エントリー価格
固定:HK$10,000 | エントリー:HK$10 → サイズ = 1,000株
ボラティリティ調整(ATRベース)
トレンド系ストラテジーポジションサイズは、アベレージ・トゥルー・レンジ(ATR)で測定した銘柄の直近ボラティリティに反比例して調整されます。ボラティリティの高い銘柄は小さく、低い銘柄は大きくなります。
ポジションサイズ = (口座資産 × リスク%) ÷ (ATR(14) × ATR倍率)
口座:HK$100,000 | リスク:2% | ATR:HK$0.50 | 倍率:2 → サイズ = HK$2,000 ÷ HK$1 = 2,000株
ケリー基準(ハーフケリー)
上級者向けケリーの公式は、ストラテジーの過去の勝率とリスクリワード比に基づいて長期的な成長を最適化します。分散を抑えるため、公式の出力の50%であるハーフケリーを使用します。
f* = (W × R – (1–W)) ÷ R → ハーフケリー = f* ÷ 2
勝率:55% | リスクリワード比:2:1 → f* = (0.55×2 – 0.45)/2 = 32.5% → ハーフケリー = 資産の16.25%
5. ポートフォリオレベルのシミュレーション
ストラテジーが複数の銘柄を同時に取引する場合、エンジンはポートフォリオレベルの制約を適用します。これにより、無制限の数の取引を同時に保有できるという非現実的な状況を防ぎます。
資金配分
保有中のポジションはそれぞれ資金を消費します。エンジンは投下済みの総資金を管理し、残りの現金が最小ポジションサイズを下回る場合は新規エントリーを拒否します。ストラテジーで明示されない限り、レバレッジは使用しません。
最大保有ポジション数
各ストラテジーは、同時に保有できるポジション数の上限を定めています。上限に達すると、新規エントリーシグナルは待機となり、既存のポジションが決済されるにつれて約定します。これにより過度な分散を防ぎます。
ポートフォリオのドローダウンストップ
ポートフォリオ全体のドローダウンが設定可能な閾値(デフォルト:25%)を超えた場合、すべてのポジションが決済され、クールダウン期間中は新規エントリーが停止されます。これはリスク管理の規律をシミュレートしたものです。
リバランスとドリフト
マルチアセットのストラテジーでは、エンジンが定期的にポジションのウェイトを目標配分に戻すリバランスを行います。リバランスの頻度と許容範囲は、ストラテジーごとに設定できます。
6. 対応する時間軸
エンジンは複数のデータ解像度に対応しています。ストラテジーに適した時間軸は、保有期間とシグナルの頻度によって異なります。
| 時間軸 | 一般的な保有期間 | ストラテジーの種類 | 対応状況 |
|---|---|---|---|
| 日足(終値) | 5日~12か月 | スイングトレード、ポジショントレード | すべての市場 |
| 週足 | 1~6か月 | トレンドフォロー、長期 | すべての市場 |
| 月足 | 3~24か月 | マクロ戦略、ファクターモデル | すべての市場 |
| 4時間足 | 1~5日 | 短期スイング | 香港、米国(集約により対応) |
| 1時間足 | 4~48時間 | 日中スイング | 香港、米国のみ |
| 15分足 | 1~8時間 | デイトレード | 香港、米国のみ |
| 5分足 | 30分~4時間 | スキャルピング戦略 | 米国のみ(履歴は限定的) |