戦略が10:00に指値注文を出します。10:03にシグナルが変わり、バックテストは10:04に何事もなかったかのように注文を差し替え、10:05の約定を計上します。しかしペーパートレードでは、元の注文が取引所に残ったままかもしれません。差し替えた注文も有効な状態で元の注文が約定すれば、戦略には2つの注文があるのに、ポジションモデルは1つしかなかったことにしてしまいます。
未約定注文には、独自の状態と時間管理が必要です。バックテストでは、各注文の発注時刻、キャンセル可能になる時刻、キャンセルが取引所に届いたかどうか、そしてキャンセルと約定が競合した場合に何が起きるかを把握する必要があります。こうした事実を見落とす、よくある近道が3つあります。
誤り1:新しいシグナルが出たら即時にキャンセルできるとみなす
多くのバックテストは、バーごとに目標ポジションを再計算し、最新のシグナルが求める内容で未約定注文を上書きします。すると戦略が判断を変えた瞬間に、注文も消えてしまいます。実際の取引所ではそうはいきません。キャンセル要求の処理には時間がかかり、取引所が処理する前に注文が約定することもあります。
50.00ドルで100株を買う指値注文を考えてみましょう。10:03にシグナルが弱まったため、戦略はキャンセルを送信します。10:03:00.080に60株が約定し、10:03:00.110にキャンセルが受け付けられます。残りの40株はキャンセルされますが、ポジションにはすでに60株が含まれています。10:03に注文を削除するバー単位のバックテストでは、約定数がゼロと報告されるかもしれません。即時キャンセルを仮定しながら、その後の約定も記録するモデルでは、実際とは逆方向のエクスポージャーを捏造することになります。
注文のライフサイクルを明示的に追跡しましょう。発注済み、受付済み、一部約定、キャンセル保留、キャンセル済み、全量約定といった状態を管理します。キャンセル確定前に発生した約定は残します。粗いバー単位のシミュレーションでは、同じバー内で両方のイベントが起こりうる場合に、保守的な順序ルールを選び、その前提を明記してください。
誤り2:未約定注文の有効期間を無期限にする
10:00のシグナルに基づく指値注文は、明示的な手仕舞いルールがなくても、時間とともに古くなることがあります。板の状況は変わり、ボラティリティも変化し、銘柄の市場価値も動きます。それでも、約定するまで注文を有効にし続けるシミュレーターでは、数か月後の約定を、すでに消えた投資仮説の成果として計上しかねません。
戦略に合った注文の有効期間ポリシーを設定しましょう。1分足のシグナルなら有効期限を30秒にすることも、日次リバランスなら引けまで注文を有効にすることも考えられます。これは戦略ごとの選択であり、万能の初期設定はありません。戦略がバーごとに価格を更新するなら、注文が新しい価格へ瞬間移動したことにせず、キャンセルと差し替えの流れをモデル化してください。
| 注文ポリシー | よくある用途 | バックテストで確認すること |
|---|---|---|
| 即時約定またはキャンセル | 約定可能な流動性を使い切ったら終了 | 発注時点でどの程度約定できたか? |
| 短い有効期限 | 執行可能時間が短い高速シグナル | 価格が戻ったとき、注文はまだ有効だったか? |
| 取引セッション終了まで | 低速のリバランスや引けオークションを狙う場合 | その取引所は実際にその有効期間に対応しているか? |
誤り3:価格に触れたらすべて約定したとみなす
ローソク足の安値が買い指値に達しても、必ず約定したとは限りません。注文の前に並ぶ待ち行列があったかもしれず、その価格での取引量が少なかったかもしれません。あるいは、注文が届く前に一瞬だけその価格で約定した可能性もあります。古い注文モデルでは、こうした誤りが重なりがちです。注文を長く有効にしすぎ、待ち行列の先頭にいると仮定し、価格に触れただけで全量約定を認めてしまいます。
最低限、注文の到着前に約定しないようにし、指値での妥当な取引量をもとにシミュレーション上の数量を制限してください。待ち行列の位置が重要な戦略では、約定データと板情報を使うか、意図的に保守的な待ち行列モデルを使いましょう。価格に触れたら約定とする方法は、大まかなスクリーニングには有用ですが、楽観的な近似であることを明記し、より厳しい前提の結果とも比較してください。
実用的な監査方法として、各注文の作成時刻、有効期間、キャンセル要求と受付時刻、約定時刻、約定数量、残数量を記録します。次に、シグナルが反転した前後の取引をいくつか再生します。約定時に注文が有効だった理由を説明できないなら、バックテストの約定数には改善の余地があります。
ペーパートレードで使う注文をモデル化する
注文の状態管理によって、戦略の意図と実際のエクスポージャーがつながります。ポジションが変わるのは、シグナルの目標値やキャンセル要求が出たときではなく、約定したときです。差し替えの履歴を監査できるようにし、一部約定も次の判断に引き継ぎます。これでバックテストは扱いにくくなりますが、ペーパートレードとの比較に意味が生まれます。どちらのシステムで執行結果が食い違っても、その理由を特定できるからです。
注文モデルに不確実性があるなら、その不確実性を結果にも反映させましょう。有効期間の短い注文と長い注文を試し、キャンセル遅延を変え、楽観的な待ち行列の前提に成績がどれほど左右されるかを示します。戦略自体には問題がないかもしれません。一方で、実際のシステムなら何時間も前にキャンセルしていた注文から得た利益が、見かけ上の優位性を作っている可能性もあります。
← 記事一覧


