Hawk Backtester › Simulation Model

Simulation Model

本ドキュメントは研究用シミュレーションエンジンの技術仕様です。

本サービスは実際の金融取引・売買の執行を行うものではなく、時系列データに対するアルゴリズムの研究・検証のみを目的としています。

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

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

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

Column IndexFieldUsage
0Timeタイムスタンプ(ms)
1Open次足始値での約定・窓開け時のTP/SL/指値の約定
2Close成行(シグナル足終値)・戦略決済の約定、未実現PnL評価
3HighBuy側TP到達判定・Sell側SL到達判定・Trailing Stop更新
4LowBuy側SL到達判定・Sell側TP到達判定・Trailing Stop更新

注文約定モデル»

ステップ k の時点で戦略が見るのは candles[:k] で、その最後の足が「現在の足」です。成行注文は現在の足の終値、または設定により次の足の始値で約定します。TP/SL・指値・逆指値は、その価格水準で約定します(足の始値がすでに水準を越えていた場合は始値)。すべての約定にスプレッドの半分とスリッページが不利な側にかかり、手数料が差し引かれます。

操作約定価格備考
成行(新規) Close ± cost / NextOpen ± cost 約定タイミングの設定で選択。cost = spread/2 + slippage(買いは+、売りは−)
指値・逆指値(発動) OrderPrice ± cost High/Lowで発動を判定。始値で越えていた場合は始値(指値は有利、逆指値は不利)
TP/SL(決済) Level ∓ cost 水準で約定。窓開けで越えていれば始値。同じ足で両方に届いた場合は不利なSLを優先
戦略決済・強制決済 Close ∓ cost 現在の足の終値で決済

バー内処理順序»

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

  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 成行注文。現在の足の終値、または設定により次の足の始値で約定
Limit Order 指値注文。指定価格に届いたらその価格で約定。窓を開けて越えた場合は始値で約定(Buy: 現在値以下で買い、Sell: 現在値以上で売り)
Stop Order 逆指値注文。指定価格を越えたらその価格で約定。窓を開けて越えた場合は始値で約定(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

コストモデル»

項目仕様
スプレッド価格差で指定。約定ごとに半分ずつ不利な側にかかり、往復でスプレッド1つ分のコストになります。
手数料率約定代金(価格×数量)に対する比率。エントリーと決済の両方で差し引かれます。
固定手数料約定1回ごとの固定額。エントリーと決済の両方で差し引かれます。
スリッページ約定ごとに不利な側へずらす価格幅。成行・TP/SL・指値・逆指値・決済のすべてに適用されます。

制約・前提»

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