Hawk-Backtester Simulation Model

Simulation Model

シミュレーションエンジンの前提条件・制約・仕様を以下に定義します。バックテスト結果の解釈に必要な情報です。

ヒストリカルデータ形式»

エンジンはOHLCバー単位で動作します。ティックデータには対応しません。

Column IndexFieldUsage
0Timeタイムスタンプ(ms)
1Open(現バージョンでは未使用)
2Closeエントリー約定価格・エグジット約定価格・未実現PnL評価
3HighBuy側TP到達判定・Sell側SL到達判定・Trailing Stop更新
4LowBuy側SL到達判定・Sell側TP到達判定・Trailing Stop更新

注文約定モデル»

すべての約定は当該バーの Close価格 で行われます。TP/SLの到達判定にはHigh/Lowを使用しますが、約定価格はTP/SLの指値水準ではなくClose価格です。

操作約定価格備考
Market Order (新規) Close ± commission_spread Buy: Close − spread
Sell: Close + spread
Limit / Stop Order (トリガー) Close ± commission_spread High/Lowで発動条件を判定、約定はClose
TP/SL Hit (決済) Close TP/SL水準ではなくClose価格で決済
Strategy Close / Force Close Close 戦略による決済・強制ロスカット

バー内処理順序»

各バーにおいて、以下の順序で処理が実行されます。すべての操作はバー単位でアトミックです。

  1. 新しいバーのOHLCデータをロード
  2. Trailing Stopの更新(High/Lowに基づくSL水準の引上げ)
  3. 未実現PnLの再計算(Closeベース)
  4. Pending Orders(Limit/Stop)の発動判定と約定
  5. TP/SL到達チェックとポジション決済
  6. 証拠金比率チェックとTicket受付可否の更新
  7. 証拠金比率が閾値を超過した場合、全ポジションを強制決済

ポジション管理»

本システムでは、各注文を独立した Ticket(取引チケット)として管理します。Ticketは証券・FX取引における約定伝票(Deal Ticket)に相当し、1回の注文に対して1つのTicketが発行されます。同一方向に複数回注文した場合でもネッティングは行われず、それぞれ別のTicketとしてPnL・保有期間等が個別に追跡されます。

注文タイプ»

注文タイプ内容
Market Order 成行注文。現在のバーのClose価格で即時約定
Limit Order 指値注文。指定価格に到達した時点でClose価格で約定(Buy: 現在値以下で買い、Sell: 現在値以上で売り)
Stop Order 逆指値注文。指定価格を超えた時点でClose価格で約定(Buy: 現在値以上で買い、Sell: 現在値以下で売り)
Trailing Stop トレーリングストップ。価格が有利方向に動くとSL水準を自動的に引き上げる(Buy: Highに追従、Sell: Lowに追従)。SL水準は有利方向にのみ更新され、逆行時は維持される

すべての注文タイプに対して、Take Profit(利確指値)・Stop Loss(損切逆指値)・Trailing Stopを任意に付与できます。

Ticket管理»

仕様内容
Ticket単位管理 各注文は独立したTicketとして生成・管理。同一方向の複数注文はネッティングされず、個別にPnL・TP/SL・保有期間を追跡
決済方法 Ticket IDを指定して個別に決済。TP/SL自動決済・戦略による手動決済・強制決済に対応
部分決済 対応。Ticketの一部をreduce_ratio(0.0〜1.0)で指定して決済可能
両建て(ヘッジ) ロングとショートのTicketを同時に保有可能。ただし証拠金計算はネッティングを行わず、全Ticketの証拠金を単純合算する(後述)

証拠金・レバレッジ»

項目計算式 / 仕様
Required Margin Σ (units × entryPrice / leverage) for all open tickets
Equity Assets + Σ unrealizedPnL
Buy: (Close − entryPrice) × units
Sell: (entryPrice − Close) × units
Margin Ratio RequiredMargin / Equity

コストモデル»

項目仕様
Commission / Spread エントリー時に絶対価格差として1回適用。
Buy: entryPrice = Close − spread、Sell: entryPrice = Close + spread
エグジット時コスト なし(Close価格で決済、追加コストなし)
スリッページモデル 明示的なスリッページモデルは未実装。
TP/SL判定にHigh/Lowを使用しClose価格で約定する構造により、暗黙的にスリッページ相当の乖離が発生します

制約・前提»

項目内容
決定論的実行 エンジン内部に乱数生成はなく、同一入力に対して完全に再現可能な結果を返します
数値精度 WASMエンジン(C++)はfloat32で演算。フロントエンドのExit Analysis判定は Math.fround() で精度を合わせています
ティックデータ 非対応。すべての処理はOHLCバー単位で完結します
マルチアセット 非対応。1回のシミュレーションは単一資産に対して実行されます