火曜日の朝、原油先物のトレンド戦略は、満期が近い限月を買い持ちしていました。シグナルは、トレンドがプラスのあいだポジションを維持するという、私たちの指示どおりに動いていました。バックテストでは小幅な利益が出ていました。一方、ペーパー口座には売り、次の限月の買い、2回分の手数料、そしてチャートが示すより不利なエントリーが記録されていました。
シグナルに何か不可解なことが起きたわけではありません。バックテストでは「先物価格」を1つの連続したものとして扱っていました。実際の口座では、2つの異なる注文板で、それぞれ異なる価格で、1つの限月を決済して別の限月を建てる必要がありました。
ロール期間にまたがるポジションを見直していたとき、この食い違いに気づきました。戦略は流動性の高い期近限月を使い、カレンダールールに従って次の限月へ移るまで保有していました。そのルール自体は妥当でした。問題は、それに伴う会計処理でした。
連続価格系列は、限月間のギャップを取り除くためにバック調整されていました。これによりトレンド計算には使いやすいチャートになっていました。しかし同時に、その系列には旧限月の決済や新限月の建玉に実際に使える価格が存在しなくなっていました。バックテストは調整後の水準でロール中の取引を評価し、その後はポジションがそのまま継続したかのように売買を再開していました。
シグナルの計算には、連続価格系列が役立つことがあります。約定価格として使うなら、それは現実ではありません。ロールは2つの取引であり、限月間のスプレッドは消して滑らかにすればよい見かけ上の値動きではなく、市場構造の一部です。
上場されている2つの限月を使って、この事象を再現しました。旧限月の買い気配は79.98、売り気配は80.00でした。次の限月の買い気配は80.42、売り気配は80.45でした。買い持ちのポジションを乗り換えるには、旧限月を買い気配で売り、その後、新限月を売り気配で買う必要がありました。約定可能な気配どうしのカレンダースプレッドは44セントでした。
この数字が、そのまま44セントの損失を意味するわけではありません。限月ごとに受渡月が異なり、スプレッドにはキャリー、保管、資金調達、供給見通しが反映されています。ロール後もポジションを保有すれば、新限月の価格推移へのエクスポージャーは維持されます。気配されたスプレッド全額を手数料として支払うわけではありません。ただし、戦略では旧限月の決済を実現し、新限月のエントリーを確立する必要があります。リターン計算で、まるで同じ商品であるかのようにこの2つの価格を比較すると、損益を実際より大きく見せたり、消したりすることがあります。
再現処理では、それぞれの役割を分けました。連続価格系列は引き続きトレンドシグナルの生成に使います。評価価格と注文には限月ごとの価格を使います。ロール時には、シミュレーターが満期を迎える限月の決済注文と次の限月の新規注文を出し、それぞれの限月の手数料を適用して、各注文板のスプレッドと利用可能な板の厚みを反映します。
最初の再現でも、ペーパー口座の結果とはまだ一致しませんでした。注文は順番に出されていたのに、両方の約定を同じ時刻にそろえていたのです。旧限月の決済は約定しましたが、買い注文が注文板に届く前に、新限月の売り気配が動いていました。取引所が対応していれば、ロールをカレンダースプレッドとして執行できます。あるいは、2つのレッグを別々に執行し、その間はエクスポージャーを抱えることもできます。これは異なる執行前提です。比較にはペーパー口座で実際に使われた注文順序を採用しました。
その後、カレンダールール自体にも曖昧さがあるとわかりました。「満期の5日前にロールする」は明確に聞こえますが、祝日で取引日程がずれたり、流動性が早めに移ったり、限月ごとに満期の取り決めが異なったりします。ある箇所では暦日を数え、別の箇所では営業日を数えるコードになっていました。ペーパー戦略は最終取引日の前の5回目の取引日にロールし、バックテストはその5暦日前にロールしていました。
ロール日は取引ルールです。取引所のカレンダーと、ロールを発動するイベントを明記してください。そうしないと、どの限月を保有しているかについて、バックテストと口座の結果はいずれ食い違います。
ロール指示を変更し、限月の最終取引日を指定し、取引所のカレンダーに沿って取引日数を数え、乗り換え前に最低流動性の確認を必須としました。この閾値は実用的な安全策であり、約定が改善する保証ではありません。出来高や建玉は、私たちの注文が実際にどれだけ執行できるかを測る指標として不完全だからです。選択した限月と両方のレッグの価格を記録し、再現結果から引き継ぎの経緯を確認できるようにしました。
こうした変更を加えると、戦略の過去リターンは低下しました。その差は、たった1度の大きなロール損失によるものではありませんでした。正しい限月、正しい取引日、両方のレッグにかかる実際の手数料、それぞれの注文板で価格付けされた決済と新規注文。こうした小さな修正が積み重なった結果です。流動性の薄いロールは特に高くついたため、平均化して見えなくせず、個別に記録しました。
先物のバックテストで連続チャートを使っているなら、そのチャートに何を任せているのかを確認してください。シグナルへの入力を一貫させるためには使えます。しかし、実際に売買できた限月の代わりにはなりません。満期をまたぐポジションごとに、調査記録には旧限月、新限月、ロールの発動条件、執行モデル、そしてその結果生じる2つのキャッシュフローを記載する必要があります。
あの火曜日の取引は、複雑な失敗ではありませんでした。口座が保有する商品を切り替えなければならない瞬間を省いたために、チャート上では利益が出ているように見えたのです。その瞬間を再現処理に戻すと、結果は見栄えこそ悪くなりましたが、はるかに役立つものになりました。
← 記事一覧


