共和分株式による統計的裁定取引(第8回):ポートフォリオのリバランスのためのローリングウィンドウ固有ベクトル比較
はじめに
前回の記事では、統計裁定戦略において大幅な改善が見られたことを報告しました。平均回帰までのハーフタイム(半減時間)をスコアリングシステムに組み込んだことは、平均ポジション保有時間が極端に長いという重大な問題を解決するうえで決定的な役割を果たしました。この問題は、ハーフタイム計算をスコアリングに導入する前のモデルにおける最も重要な欠陥でした。この要素の追加は、バックテスト結果の改善に寄与した要因の一つであると考えられます。
もう一つの要因は、ポートフォリオウェイトの安定性をスコアリング基準として導入したことです。これにより、共和分ベクトルにおいて高い振動性を持つバスケットを除外することが可能になりました。この固有ベクトルは、
取引されるスプレッドの計算基盤となるため、その時間的安定性は戦略の収益性に直接的な影響を及ぼします。 ポートフォリオウェイトは、スプレッドに対するインサンプル/アウトオブサンプルADF (IS/OOS ADF)検証を用いて計算されました。
これは共和分ベクトルの安定性を評価する広く知られた手法であり、バックテストにおいて良好な結果に寄与したことは確かです。しかし、この手法は研究および初期検証としてのスコアリングシステムでは有効である一方で、いくつかの制限も存在します。
- まず、精度を確保するためには比較的長いアウトオブサンプル期間が必要となります。また、アウトオブサンプル期間が短い場合には検出力が低く、これは実運用取引の監視において実際に直面する状況です。
- さらに、インサンプルとアウトオブサンプルの分割点に強く依存しており、分割点を変更すると結果が変化する可能性があります。
- そして、共和分関係がいつ、あるいはなぜ崩壊したのかについての洞察を提供しません。
本記事では、IS/OOS ADF検証の強みを活かしつつ、その制約を克服する方法を示します。ここでRolling Windows Eigenvector Comparison (RWEC)を導入し、ポートフォリオウェイトの安定性を測定します。RWECは短いアウトオブサンプル期間でも有効に機能し、インサンプル/アウトオブサンプル分割点への依存度が低く、さらに共和分関係がいつ崩壊したかについての情報を提供することができます。共和分関係の崩壊タイミングを把握することは、実運用取引の監視において極めて重要です。RWECとIS/OOS ADFを組み合わせることで、ポートフォリオウェイトの安定性をより堅牢に評価することが可能になります。これはバックテストだけでなく、実運用取引におけるシステム監視およびポートフォリオリバランスにも有効です。
今後、これらの手法を組み合わせることで、主にポートフォリオウェイトの安定性評価に用いられていた仕組みを、売買シグナルの安定性推定へと応用する方法を示します。さらに、ウェイトの変化が想定範囲を超えた場合にはポートフォリオのリバランスをおこない、最終的には共整合が崩壊した場合には当該バスケットの取引を停止する方法についても解説します。これにより、スコアリングシステムから実運用取引のシグナル監視へと移行することになります。
重みの安定性とシグナルの安定性
理想的なトレーダーの世界では、一度共和分関係になるペアまたは株式グループとそのポートフォリオウェイトが見つかれば、それらは無期限に、あるいは永続的に同じままであることが期待されます。しかし統計裁定の戦略という観点では、次のように考える必要があります。
「市場は絶えず変化している。すなわち、強気市場や弱気市場、ローソク足パターン、あるいは、うまく機能する相関関係を持つ株式といったものは存在しない。すべては今この瞬間も、そして永遠に変化し続けている。」
絶対的な株価が変化しているだけでなく、株式間の相対価格も常に変化しています。ポートフォリオのウェイトを定義する共和分ベクトルを取得するということは、市場のスナップショットを取得していることに他なりません。このスナップショットは共和分関係の評価、方向性の定義、ポジションサイズの決定において有効であり信頼することもできますが、あくまでスナップショットに過ぎません。さらに言えば、それは常に「バックミラー越し」に取得されたスナップショットです。共和分ベクトルは、(他の指標と同様に)過去における株式間の相対価格関係を反映しています。
では、この共和分関係はどの程度の期間持続するのでしょうか。ポートフォリオウェイトがバックテスト上で良好に機能していることは既に分かっていますが、これらのウェイトは将来においてどの程度その相対関係を維持できるのでしょうか。バスケットの共和分ベクトルを計算することで、取引可能な平均回帰スプレッドを定量化することはできますが、そのシグナルは明日や来週も依然として有効なのでしょうか。
残念ながら、これらの問いに対して確実な答えを持つことはできません。なぜなら、私たちが持つデータソースは常に「バックミラー」に過ぎないという事実から逃れることができないためです。現時点において、次のティックにおける株価の動きを正確に予測することは誰にもできず、ましてや3銘柄、4銘柄、あるいは10銘柄の相対的な価格変動を数日〜数週間先まで同時に予測することは不可能です。できるのは確率に依存することだけです。
これこそが統計裁定の本質です。すなわち、確率を自分に有利な方向へと引き上げるための統計的手法の集合体です。この文脈では、共和分ベクトルが時間的に安定しやすい株式バスケットを構成する確率を高めることができます。適切にこれらの手法を組み合わせることで、本連載の初回から用いてきた共和分関係および定常性の検定手法は、より長期間ポートフォリオウェイトが安定する銘柄選択の確率を高めることに寄与します。これがうまく機能すれば、一定の信頼水準(90%、95%など)において、そのシグナルが明日あるいは来週も有効であると言うことができます。
共和分ベクトル、ポートフォリオウェイト、そしてスプレッドの安定性を理解することは、スコアリングシステムから実運用取引へ移行するために十分ではありません。シグナルそのものの安定性を推定する必要があります。これをおこなうために、まず共和分ベクトルの安定性評価に用いてきたIS/OOS ADF検証をより深く理解する必要があります。次に、それをRWECと組み合わせることで、シグナルの安定性をどのように推定できるかを見ていきます。
IS/OOS ADF検証
ポートフォリオウェイトの安定性を測定し、それをスコアリングシステムにおける銘柄選定基準として組み込むことで、前回のバックテストで使用した上位バスケットの品質を改善することができました。本連載第6回では、ポートフォリオウェイトの安定性テストを使用せずに上位ランクのバスケットを選定した結果を示しており、第7回(前回記事)でそれをスコアリングシステムに組み込んだ後の結果と比較することができます。簡単な比較として、以下に資本曲線(バランス/エクイティグラフ)の変化を示します。

図1:バスケット選定において固有ベクトル安定性テストを用いなかった場合のバックテストエクイティグラフ
図2:バスケット選定に固有ベクトル安定性テストを組み込んだ場合のバックテストエクイティグラフ(前回記事)
IS/OOS ADF検証は4段階の手法です。まず、価格データをインサンプル(IS)とアウトオブサンプル(OOS)の2つに分割します。その後、ISデータ上で共和分ベクトルを推定します。次に、この共和分ベクトルを用いてOOSデータ上のスプレッドを構築し、そのスプレッドに対してADF統計量を評価します。候補バスケットのポートフォリオウェイトが安定していると判断するためには、ISおよびOOSの両方においてADF統計量が定常性を示す必要があります。
分割 → IS上で推定 → OOS上でスプレッド構築 → OOSスプレッドに対してADF検定
トレーダーとしては、これらの数学的な詳細をすべて理解する必要はありません。なぜなら、これらの処理はプロフェッショナルグレードのPythonライブラリであるstatsmodelsによって抽象化されているためです。しかしながら、そのプロセス自体を理解しておくことは重要です。
n = len(prices) if n < 50: return np.nan split = int(n * split_ratio) if n - split < 30: return np.nan train = prices.iloc[:split] test = prices.iloc[split:] try: vec_is = self.get_coint_vector(train, method, det_order, k_ar_diff) spread_oos = pd.Series(np.dot(test.values, vec_is), index=test.index) if spread_oos.std() < 1e-10 or spread_oos.isnull().any(): self.logger.debug("Out-of-sample spread is effectively constant or contains NaNs") raise ValueError("Out-of-sample spread is effectively constant or contains NaNs") adf_stat = adfuller(spread_oos)[0] return float(adf_stat) except Exception as e: self.logger.warning(f"Stability computation error: {e}") return np.nan
完全なコードは、前回の記事に添付されているcoint_ranker_auto.pyスクリプトに記載されています。
アウトオブサンプル検証をおこなうことで、IS/OOS ADFテストは過学習およびインサンプルバイアスを回避します。我々が利用できるデータはすべて過去データ、すなわち前述の「バックミラー」に過ぎないため、この手法はテスト段階においてライブトレーディングを模擬するための広く知られた方法です。これは、MetaTrader 5のストラテジーテスターにおいてフォワードテストを実行しながらバックテストをおこなうことに相当します。
Forward
このオプションは、特定の時間区間へのフィッティングを回避するために、テスト結果を検証することを可能にします。フォワードテストでは、日付フィールドで設定された期間が、選択されたフォワード期間(半分、3分の1、4分の1、またはフォワードテスト開始日を指定するカスタム期間)に従って2つの部分に分割されます。第1の部分はバックテスト期間であり、エキスパートアドバイザー(EA)の動作を適応させる期間です。第2の部分はフォワードテストであり、選択されたパラメータが検証される期間です。

図3:フォワードオプションが強調表示されたMetaTrader 5ストラテジーテスター設定
このアウトオブサンプル検証は、「未知のデータ」におけるスプレッドの定常性を検証することで、共和分関係に対する高い予測力を与えます。この予測力は、良好なバックテスト結果として反映されました。これは、計算されたスプレッドがライブトレーディングでも取引可能であることを示しています。なぜなら、OOS検証がすでに「未知のデータ」においてその有効性を確認しているためです。しかし、バックテストを実施した経験のある者なら誰でも理解しているように、ここで本質的な問題となるのは「未知」という言葉の括弧部分にあります。ポートフォリオウェイトの安定性が、バックテストという安全な環境(いわば「未知」ではあるが制御されたデータ空間)を離れ、実運用というより本質的に未知で過酷な環境に移行した後もどの程度保証されるのかは不明です。この点において、IS/OOS ADFはいくつかの弱点を持ちます。
実運用取引では、ポートフォリオウェイトの安定関係が崩れた状態を長期間許容することはできません。共和分関係が失われた状態を長く耐えることもできず、できるだけ早くその変化を検知し、判断し、行動に移す必要があります。しかしIS/OOS ADFは、高い精度を得るために比較的長いアウトオブサンプル期間を必要とします。これはバックテストでは問題になりませんが、実運用では深刻な問題になり得ます。なぜなら、この「アウトオブサンプル期間」は、共和分関係が破綻している可能性のある期間でもあり、その間に資金が市場に晒され続け、結果として持続不可能なドローダウンを引き起こす可能性があるためです。
さらにIS/OOS ADFは、サンプルデータを既知と未知に分割するスプリットポイントに強く依存しています。このスプリットポイントは過学習を避けるための重要な要素ですが、実運用では時間とともに常に前方へ移動し続けるため、この条件下では信頼性が低下する可能性があります。
これらのIS/OOS ADFの制約を実運用で最小化するための一つの解決策として、「ローリングウィンドウ固有ベクトル比較」と組み合わせて使用する方法があります。
ローリングウィンドウ固有ベクトル比較
ローリングウィンドウ固有ベクトル比較(RWEC)は、連続する固有ベクトルの角度のコサイン距離を定義された閾値と比較することにより、ポートフォリオのウェイトの安定性を計算します。この手法はローリングウィンドウ上で共和分ベクトルを計算し、それらのウィンドウ間で固有ベクトルを比較します。固有ベクトルの計算そのものの数学的詳細には焦点を当てませんが、本手法の理解を深めるために、固有ベクトルとは何かを簡単に振り返ることは有用です。
「幾何学的には、ベクトルとは大きさと方向を持つ多次元量であり、しばしば矢印として表現されます。線形変換は、それが作用するベクトルを回転、拡大縮小、せん断します。線形変換における固有ベクトルとは、回転やせん断が一切生じず、単に伸縮のみがおこなわれるベクトルのことです。対応する固有値は、その伸縮の倍率を表します。固有値が負の場合、固有ベクトルの向きは反転します(固有値と固有ベクトルのウィキページ)」
この種のデータおよびプロットを分析するトレーダーにとって重要なのは、上記の点です。すなわち、線形変換後においても固有ベクトルは回転やせん断を受けないということです。言い換えれば、線形変換がどのように適用されても、固有ベクトル同士の相対角度は変化しません。これがRWEC手法の基盤となっています。
同じウィキページには次のようなアニメーションがあります。この性質を直感的に理解するうえで最も分かりやすい例です。

図4:線形変換後も固有ベクトルが回転、せん断しないことを示すアニメーション
マゼンタ色の矢印は固有ベクトルを表しています。青および赤で示される他のベクトルは線形変換によって方向や大きさが変化しますが、マゼンタの矢印(固有ベクトル)はその方向と形状を維持します。さらに、それら固有ベクトル同士の相対角度、すなわち相互の傾き関係は変化しません。
固有ベクトルの連続的なコサイン角度比較以外にも、ヘッジ比の相関など、共和分ベクトルの安定性を評価するためのRWEC指標はいくつか存在します。しかしそれらはいずれも、「線形変換後も固有ベクトルの相対的な傾きが変化しない」という同一の基本原理に基づいています(ちなみに、この分野は理解を深める上で非常に興味深い研究領域です)。
図5および図6では、同一期間における異なるETFペアにRWEC手法を適用したサンプルプロットを示しています。ここでは、これまで使用してきた株式バスケットではなくETFペアを用いています。その理由は、本連載が統計裁定の導入説明の最終段階にあるためです。連載の開始時にはFXペアのピアソン相関から始め、その後プロセス理解のために株式へと移行しました。そして今回、実運用取引への移行段階において、再びペアトレーディングへ戻り、株式市場で得た知見(検証手法、スコアリング構築、データベース進化)を活用する機会を得ています。また他市場の特性を探索する適切なタイミングでもあります。再現性を高めるため、本実験ではMetaTrader 5のMetaQuotesデモ口座に含まれる銘柄のみを使用しています。
これらのプロットの目的は、ポートフォリオウェイト(あるいは共和分関係自体)の安定性が失われた正確な時点を、この手法がどれほど明確に示すかを確認することにあります。この「高時間分解能(high temporal resolution)」は、実運用取引の監視において非常に有用である主要な理由の一つです。

図5:ローリングウィンドウ固有ベクトル比較のサンプルプロット
最初のプロットでは、青線はペアの第1資産のウェイトを示しており、この例ではGLDです。オレンジ線は対応する資産であるGDXの時間変化におけるウェイトを示しています。GLDはロング対象資産であり、その値はポートフォリオベクトル上で正、すなわちゼロラインより上に位置します。一方GDXはショート対象資産です。y軸の値は実際の価格ではなく、2資産間の相対的なウェイトを示すために1に正規化されています。2021年、2022年、2023年の初頭において、ショート対象資産のウェイトがゼロラインを超え、当初のペア関係が反転していることが確認できます。さらに2023年末から2024年初頭にかけては両資産の役割が完全に入れ替わり、本来買うべき資産が売り対象となり、その逆も成立しています。これらの構造的な市場変化は、次のプロットに示される共和分ベクトル角度にも反映されています。
赤い点は、連続する共和分ベクトル間の類似度を示しており、これはそれらの角度のコサイン距離、すなわちベクトルの傾きの差として定義されます。この差がゼロの場合、両ベクトルの傾きは完全に一致していることを意味します。連続するベクトルの傾きが一致している場合、類似度は完全一致となり、完全な安定状態を意味します。この例では完全な安定は短期間しか存在していません。一方で、極端な不均衡ピークが年初(特に2021年、2022年、2023年)に観測されており、2024年初頭には資産関係の反転に伴う最大ピークが発生しています。
RWEC手法の本質は、線形関係の構造的安定性を測定する点にあります。IS/OOS ADFが共和分関係喪失の発生時点を特定できないのに対し、RWECはその時点を正確に可視化します。この特性は、共和分関係の崩壊の原因推定にも利用できます。たとえば、企業合併の影響か、決算発表による異常な業績変動か、あるいは市場全体のシステミックショックかといった要因です。このRWECの特性は、構造的安定性の崩壊原因の特定に役立つ可能性があります。原因を把握することで、同様の性質を持つ将来の変化を予測することが可能になります。

図6:EEM/VWO ETFペアに対するRWECプロット
黄色の点線は、設定された安定性閾値を示しています。上記の両テストでは、この閾値は30度に設定されています。図5では、共和分関係の崩壊のピークはこの閾値から大きく乖離していますが、図6では2020年初頭に約80度に達するピークが確認できます。また、それに先行する2つの偏差が30度付近に存在していることも分かります。
RWECの安定性閾値は、リスク管理ツールとして使用することが可能であり、かつ使用すべきものです。たとえば、閾値を50度に設定していた場合、これら2つの先行する測定値はシステム上「安定範囲内」と判定され、このETFペアは引き続き運用対象として維持されていたことになります。一方で、15度に設定していた場合には、2回目の時点でシステムは停止を推奨していたはずです。この手法は実運用取引の監視に用いることを前提としているため、このパラメータ設定は、閾値を低くすれば戦略をより保守的にし、高くすればより攻撃的にするという性質を持ちます。
なお、これらの例においても、私たちは再び「バックミラー」を用いています。これらがピークであったと分かるのは、両ペアがその後、安定した共和分関係状態へ戻ったことを知っているためです。しかし実運用取引において私たちが把握できるのは、共和分ベクトルが変化したという事実のみであり、それが元の水準へ戻るかどうかを知る手段はありません。この時点で意思決定が必要になります。すなわち、取引を停止し、保有中のポジションをクローズして、そのペアをスコアリングシステムで再度承認されるまで除外するのか、それとも新しい値に基づいてポートフォリオウェイトを変更するのか、という判断です。
トレーダーであれば、この問いに対して100%確実な答えが存在しないことは理解しているはずです。完全自動の適応型戦略を運用するにあたっては、多くの要因が関与します。まず考慮すべきは自身のリスク許容度です。加えて、ペアまたはバスケットに含まれる各企業のファンダメンタルズ、市場全体のダイナミクス、さらに他により適したバスケットが存在するかどうかといった要素も、体系的に、あるいは少なくとも直感的に考慮されることになります。
IS/OOS ADFとRWECを実運用監視で併用すべきなのはなぜか
簡潔な答えは、RWECは、IS/OOS ADFが後になって初めて検知するような市場の「地殻変動」を、より早期に警告してくれるからだということです。共和分ベクトル(すなわちポートフォリオウェイト)が一見完全に安定しているように見える場合でも、市場の内部では急激な変化が進行している可能性があります。IS/OOS ADFはしばらくの間、それらのウェイトを変わらないものとして評価し続けますが、RWECはすでに何らかの変化が起きていることを検知することができます。以下のテストは、このRWECの特性をできるだけ明確に示すことを目的としています。
IS/OOS ADFを実運用監視に活用するためには、ウォークフォワード分析を用いる必要があります。これにより、スコアリングと監視を統合したハイブリッドなフレームワークを構築できます。単一のIS/OOS分割ではなく、ローリングウィンドウによるOOS検証をおこない、各テストごとにスプリットポイントを一定のステップで前方へ移動させていきます。この手法はRWECでも用いられているものと同じです。違いは、IS/OOS ADFはここで示すようにウォークフォワード付きで使用することもできれば、スコアリングシステムでおこなったようにウォークフォワードなしで使用することもできるという点です。
IS/OOS ADFの結果
以下は、同じETFペアであるXLK/AAAに対するRWECの結果です。検証期間はIS/OOS ADFと同じ2000バー(約8年)であり、日付ベースで両者の結果を整合させることができます。
def fetch_data(self, symbols, timeframe=mt5.TIMEFRAME_D1, n_bars=2000):
ウォークフォワード分析では、データの70%を訓練用の割合として設定し、各アウトオブサンプル(OOS)ウィンドウの長さを100日と設定しています。さらに、各テスト間には22営業日のウォークフォワードウィンドウを設定しています(これはrange() 関数におけるステップ幅に相当します)。
def walk_forward_test(self, data, train_frac=0.7, oos_length=100): """Walk-forward OOS validation""" results = [] n_train = int(len(data) * train_frac) for start in range(n_train, len(data) - oos_length, 22): # Step = 22 trading days end = start + oos_length # IS: estimate cointegration train_data = data.iloc[:start]
完全なスクリプトはisoos_adf_wf.pyとして添付されています。
このテストを実行すると、以下のような出力が表示されるはずです。
IS/OOS ADF Results:
OOS Success Rate:55.6%
Mean ADF p-value:0.203
Median ADF p-value:0.002
p値が0.05未満であることが、スプレッドを定常と見なすための最低限の基準であることを思い出してください。本結果におけるp値の平均はこの基準を大きく上回っており、スプレッドが非定常であることを示しています。一方で、p値の中央値はゼロに近い非常に低い値であり、スプレッドが強く定常であることを示しています。これは矛盾ではありません。むしろ、有用な情報です。この差は、平均値が外れ値の影響を大きく受けていることを示しています。私たちのケースでは、外れ値とは定常性が失われた局面に対応するピークです。一方で中央値は、スプレッドが大部分の時間において定常であったことを保証しています。
直近の5つのウィンドウ:
adf_pvalue stationary
4 3.111851e-01 False
5 1.517744e-01 False
6 1.718277e-03 True
7 4.409114e-07 True
8 3.135563e-05 True
直近5つのウィンドウの結果から、定常性は第4のOOSウィンドウ付近、もしくはその直前で失われたことが示されています。

図7:XLK/AAA ETFペアに対するインサンプル/アウトオブサンプルADF検証のプロット
上記の4つのプロットは、OOSウォークフォワードの結果を、より重要な情報を一目で把握できるような配置で示しています。これらのプロットの正しい読み方を理解することは重要です。というのも、これらは実運用取引の監視で使用することになり、重複ウィンドウの構造は、一般的な可視化に慣れていない場合やや分かりにくく感じられる可能性があるためです。以下、順を追って説明します。
右上のプロットでは、x軸上にOOSのp値として9つのデータポイントがプロットされています。これらは、右下のOOSコインテグレーションベクトル推移プロットのx軸と同一のデータポイントです。
検証期間は2000バーであったことを思い出してください。本テストでは、その70%にあたる1400バーが訓練(インサンプル)に使用されています。したがって、最初のインサンプル実行はDay 1からDay 1400までです。アウトオブサンプルウィンドウの長さは100であるため、最初のアウトオブサンプル区間はDay 1401からDay 1500までとなります。このとき得られるp値が、このプロットにおけるデータポイント0です。
ウォークフォワードのステップは22日であるため、第2回のインサンプルはDay 1からDay 1422までとなり、第2回のアウトオブサンプルはDay 1423からDay 1522までとなります。このときのp値がデータポイント1です。このように処理が続いていきます。最後のアウトオブサンプル実行は左上のプロットに表示されています。
ご覧の通り、テストウィンドウは互いに重複しています。したがって、これは重複ウィンドウを用いたウォークフォワード分析です。最初のいくつかのp値(0〜3)は、数年前(2023年から2025年初頭)に対応するアウトオブサンプル期間からのものです。一方、最後のアウトオブサンプルウィンドウは2025年10月31日に終了しています。重複のないウォークフォワードを選択することも可能です。しかし、どの方法を選ぶにしても、このウォークフォワードテストの仕組みを正確に理解することが極めて重要です。なぜなら、この理解が、戦略の精緻化のためのパラメータ調整や、損失回避のための取引停止判断に直結するためです。
理解を容易にするために、以下の表が役立ちます。
| ウォークフォワードテスト番号(ADFプロットのx軸) | ベータ算出に使用したインサンプル期間 | 検証されたOOS期間 | プロットされたp値 | 右下にプロットされたベータ |
|---|---|---|---|---|
| 0 | 1~1400日目 | 1401~1500日目 | ポイント0 | ポイント0 |
| 1 | 1~1422日目 | 1423~1522日目 | ポイント1 | ポイント1 |
| ... | ... | ... | ... | ... |
| 8 | 1~1576日目 | 1577~1677日目(最後の100日) | ポイント8 | ポイント8 |
表1:ウォークフォワード分析におけるインサンプル/アウトオブサンプルADF検証の重複ウィンドウ
左上のOOSスプレッドプロットは、最後のOOS実行のみ、すなわち最後の100日ウィンドウだけを表示しています。そのため、このプロットは100個のデータポイントを持つ一方で、ADFプロットは9個のデータポイントしか持ちません。x = 8におけるADFのp値と、ベクトル推移プロットにおける最後のBetaは、いずれもこのプロットで示されている同一の推定およびテストウィンドウから得られています。したがって、このプロットのp値は約0.02(0.05を十分に下回る値)として読み取ることができます。この最終期間において、スプレッドは定常です。これは円グラフにおける緑の領域の一部に相当します。
また、この成功率を示す自己説明的な円グラフは、OOSにおける定常性の簡易サマリーの一種です。この結果は、9回のウォークフォワードテストのうち55.6%で定常性が確認されたことを示しています。
RWECの結果
同じETFペアXLK/AAAに対するRWECの結果は以下の通りです。検証期間はIS/OOS ADFと同じ2000バーであり、そのため日付ベースで両者の結果を整合させることができます。ウォークフォワードの重複ウィンドウも同様に22営業日(step=22)ですが、ウィンドウ長は異なります。IS/OOS ADFではoos_length=100を使用していたのに対し、RWECでは window=252を使用しています。
def rolling_cointegration(self, data, window=252, step=22): """Compute rolling cointegration vectors"""
RWECにおいてIS/OOS ADFと同じ100ウィンドウを使用しない理由は2つあります。1つ目は技術的な理由であり、ある意味では必須です。ジョハンセン検定の提唱者自身がより大きなウィンドウを推奨しています。
「有限標本においては、推定の精度はサンプルサイズに強く依存する。シミュレーションによれば、共和分空間の妥当な精度を得るためには、100〜200観測値(金融時系列では約1〜2年分の日次データ)がしばしば必要となる。(中略)実務では、パラメータが時間とともに一定でない場合、共和分関係の安定性を確認するために、200〜400観測値程度のローリングサンプルを用いることが多い。」(ジョハンセン, 1995)
2つ目の理由は、任意の時点で本手法を他の学術論文やベンチマークと比較する場合、推奨されている学術的標準に従っている方が望ましいためです。RWECで252、IS/OOS ADFで100を使用することで、これらのテスト結果は既存研究と直接比較可能になります。
実務的には、このウィンドウ長の違いは各手法の目的の違いに直接起因します。RWECは共和分ベクトルの構造的安定性を測定するため、信頼性を確保するには十分な観測数が必要です。一方でIS/OOS ADFはアウトオブサンプルにおけるスプレッドの定常性を評価するものであり、実際の取引を模倣するために短期間である必要があります。技術的要件が満たされた上で、これらの実務的制約から学術的ベストプラクティスが導かれます。
前述の通り、ここではベクトル類似性の指標としてコサイン距離を用い、安定性の閾値を30度に設定しています。
def vector_similarity(self, vectors_df): """Compute cosine similarity between consecutive vectors""" similarities = [] for i in range(1, len(vectors_df)): vec1 = vectors_df.iloc[i-1].values vec2 = vectors_df.iloc[i].values cos_sim = np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2)) angle_deg = np.degrees(np.arccos(np.clip(cos_sim, -1, 1))) similarities.append({ 'date': vectors_df.index[i], 'cosine_similarity': cos_sim, 'angle_degrees': angle_deg, 'stable': angle_deg < 30 # Threshold }) return pd.DataFrame(similarities).set_index('date')
完全なスクリプトは、rwec.pyというファイルとして添付されています。
このテストを実行すると、以下のような出力が表示されるはずです。
RWEC Results:
stable
True 29
False 4
Name: count, dtype: int64
Mean angle:22.3°
Median angle:0.1°
IS/OOS ADFの結果で前述した、平均値と中央値の角度の差に関する観察は、ここでも同様に当てはまります。平均角度は設定した閾値に比較的近い一方で、中央値はゼロ近傍にあり、これは完全な安定性を示す値です。この差の原因は、以下のプロットを見ることで容易に理解できます。ポートフォリオのショート側(オレンジ線:AAA)における極端な外れ値がその要因です。

図8:XLK/AAA ETFペアに対するRWECのプロット
このプロットが示していることは、警戒すべきだということです。このペアは大部分の時間では安定していますが、時折、完全な不均衡状態に陥ります。各プロットには33個のデータポイントがあり、そのうち29がTrue(安定)、4がFalse(不安定)です(これは第2プロットに見られる4つのピークに対応します)。これらの不安定ピークは、それぞれ閾値を上回ってから再び下回るまでに2ヶ月以上を要しています。これは、状況によってはそれまでの利益を消失させたり、あるいは口座サイズによってはマージンコールを引き起こすのに十分な期間であるように見えます。一言で言えば、RWECはIS/OOS ADFが最後のOOSウィンドウでは捉えきれなかった構造的不安定性を明らかにしています(ただし、55.6%のOOS成功率自体は警告シグナルとして解釈することも可能です)。
前述の通り、このETFペアは議論をより分かりやすくするために意図的に選択したものです。これまでの観察からは、本シリーズで例として用いてきた高流動性のナスダック銘柄において、このような孤立した大きな不均衡ピークはそれほど一般的ではありません。しかし、それでも発生し得るものであり、加えて我々の統計裁定フレームワークは、少なくともあらゆる市場・資産クラスにおいて安定したペアやバスケット構築を支援できるものであるべきです。高流動性ナスダック銘柄に限定したくはありません。
リバランス間隔
上記で説明した各テストの仕組みを理解し、それらを組み合わせて不安定なポートフォリオを特定できるようになったとき、次に生じる疑問は、実運用取引の監視においてこれらの分析をどの頻度で実行すべきなのかということです。週1回でしょうか。月2回でしょうか。あるいは運用している時間足に依存するので、単純に1日1回プロットを確認すればよいのでしょうか。
この問いに対して、エドワード・ソープが2000年前後におこなっていた統計的裁定取引の運用ルーチンを再現する形で答えることをお許しください。エドワード・オークリー・ソープは数学者でありギャンブラーであり、1980年代後半にクオンツ革命の先駆者の一人となったヘッジファンドマネージャーです。彼は自伝『A Man for All Markets』(Random House, NY, 2017)で、その取引ルーチンについて述べています。
「Steveと私が1992年に再開した統計的裁定運用は、その後8年間にわたって成功裏に稼働している。我々のコンピュータは最初の1時間で100万株以上を取引し、40万ドルの利益を上げた。現在では3億4,000万ドルを運用しており、5億4,000万ドル分の株式をロングし、同額をショートしている。我々のコンピュータシミュレーションと経験によれば、このポートフォリオは市場中立に近く、ポートフォリオ価値の変動は市場全体の平均価格変動とほとんど相関しないことを意味している。我々の市場中立性(金融理論でベータと呼ばれる指標)は平均0.06で推移している。
(...)
我々のモデルを用いて、コンピュータはニューヨーク証券取引所および米国の証券取引所に上場する約1000銘柄について、毎日それぞれの“公正価格”を算出している。市場関係者は出来高の大きい銘柄を「リクイッド(流動性が高い)」と呼び、価格に大きな影響を与えずに取引しやすいという利点を持つ。取引所からの最新価格は即座にコンピュータに取り込まれ、モデルによる現在の理論価格と比較される。実際の価格が十分に乖離した場合、割安なものを買い、割高なものを空売りする。
(...)
コンピュータ画面をスキャンすると、その日のポジションのうち、最大の利益銘柄や最大の損失銘柄が表示される。勝ち組や負け組の中で異常に大きいものがないかを素早く確認できる。すべては正常に見える。私は廊下を歩いてSteve Mizusawaのオフィスへ向かい、彼がBloomberg端末でニュースを監視しているのを見る。彼は、合併、買収、スピンオフ、再編といった予期せぬ発表を見つけると、その銘柄を制限リストに入れるようコンピュータに指示する。新規ポジションは建てず、既存ポジションも解消する。
(...)
我々のポートフォリオはアービトラージ的なリスク低減特性を持つが、ロングとショートの両方に多数の銘柄を持つことで、統計的な性質として多数の有利なベットが利益をもたらすことを期待している。これはブラックジャックにおけるカードカウンティングのようなものだが、はるかに大規模である。我々の平均取引サイズは5万4,000ドルであり、年間100万回のベット、すなわち市場が開いている間は約6秒に1回の取引をおこなっている。」
おそらく、私たちの多くがこの規模の取引事業を持つことはないでしょう。しかし本質的な教訓は同じで、瞬きをしてはいけないということです。上記は、ソープの日々のルーチンを示しており、それは毎日繰り返されていました。モデルは数千銘柄の「正しいフェアプライス」を日次でチェックされていたのです。多くの人は統計的裁定を「放置すれば儲かる簡単な手法」と考えますが、史上最も成功したヘッジファンドマネージャーの一人は、常時監視こそが正しい方法であると述べています。
このため、実運用取引の監視に関しては、スケールの大きな実運用経験を持つヘッジファンドマネージャーの権威ある答えを引用しました。彼のメッセージは明確かつ実践的であり、実務経験に基づいています。統計的裁定の運用には継続的な監視が必要です。リバランス間隔は市場条件によってケースバイケースで決定されます。
要約すると、これらのテストをスコアリングシステムに組み込む必要があります。また、完全自動運用におけるリスクを最小化するために、アクティブポートフォリオについては少なくとも1日1回チェックする必要があります。理想的には、選択した時間軸の頻度でチェックをおこない、IS/OOS ADFにおいて可能な限り短いOOSウィンドウを設定し、さらにRWECコサイン距離が中央値から乖離し始める期間については適切なアラートを設定することが望ましいです。
結論
前回の記事で報告した良好なバックテスト結果を踏まえ、本記事では統計的裁定取引フレームワークの開発をスクリーニングやスコアリング段階から実運用取引へと移行しました。実運用取引における基本的な監視要件を満たすために、インサンプル/アウトオブサンプルADF(IS/OOS ADF)検証にウォークフォワード分析を組み込むこと、さらにローリングウィンドウ固有ベクトル比較手法(RWEC)の導入を提案します。これらはスコアリングシステムおよびライブ取引におけるポートフォリオウェイトの安定性監視の両方に活用されます。
ETFペアの簡単な例を用いて、ADF検証がスプレッドの連続的な定常性の評価に焦点を当てているのに対し、RWECはポートフォリオウェイトの早期的不安定性を検出することが可能であり、ライブ監視および適応的リバランスのための主要なリスク管理ツールとなることを示します。
また、ウォークフォワード手法におけるオーバーラップウィンドウの仕組みを説明し、IS/OOS ADFとRWECを併用した場合のサンプルプロットの読み取り方と解釈例についても詳しく説明しました。RWECとIS/OOS ADFをウォークフォワード分析と組み合わせることで、堅牢なバックテストが可能となり、ライブ取引における動的なリスク管理を実現できることを示しました。
最後に、同一ETFペアまたは他の資産クラスでテストパラメータを試すことを希望する読者向けに、本記事で使用したPythonスクリプトのサンプルコードを提供しました。
| ファイル名 | 説明 |
|---|---|
| rwec.py | 資産ペアにおけるローリングウィンドウ固有ベクトル比較(RWEC)テストを実行し、プロットを生成するPythonスクリプト |
| isoos_adf_wf.py | 資産ペアにおけるインサンプル/アウトオブサンプルADF (IS/OOS ADF)検証およびウォークフォワード分析を実行し、プロットを生成するPythonスクリプト |
| bench_runner.py | 複数の資産ペアに対して両方のテストを同時に実行し、その結果をベンチマークするためのPythonスクリプト。 |
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/20485
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。
利益強化アーキテクチャ:多層型口座保護
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
MQL5で他の言語の実用的なモジュールを実装する(第5回):PythonのLoggingモジュールによるプロ仕様のログ
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
これをライブの取引条件で試したことがありますか?
悪気はないのですが、これはあまりにも素晴らしすぎます!
これをライブの取引条件で試したことがあるだろうか?
悪気はないのですが、これはあまりにも素晴らしいことです。
はい、悪気は全くありません。もしそれが公表されれば、疑問視され、議論されることになる。そしてまた、あなたの言う通り、「これは本当にしては素晴らしすぎる」のです。
しかし、私は本文中で、IS/OOS ADFの主な特徴である過去の不均衡を示すことを強調するために、XLK/AAAペアを慎重に選んだと述べたことに注意してください。
「このETFペアは、問題のポイントをよりよく説明するために選んだものです。
通常、 この例ほど明確ではありませんが、この期間、この特定のペアにはテストによって捕捉された明らかな不均衡がありました。
はい、私たちはこれらのテストをバスケットのスクリーニングやスコアリング、ライブ取引のモニタリングに使用しています。しかし、これらの実験は小さな口座で行っている。何百万ドルも稼いでいるわけではありません。限られた資源で何が可能かを学んでいるのです。
そう、世の中にはチャンスがあり、クオンツ戦略を使ってさまざまなレベルの成功を収めているマネジャーがいることも知っている。簡単なお金ではない。決して簡単なお金ではない。しかし、アセットクラス、タイムフレーム、平均回帰やスプレッド計算のためのルックバック期間など、ほぼ無限にある組み合わせの中には、狩るべきチャンスがある。
私がここで発表するのは、このような機会を見つけるために使っている方法であって、機会そのものではない。この記事は良い例です。バスケット選択で平均回帰のハーフタイムを使い始めたとき、記事の冒頭にある2つのグラフに見られるような改善を検証しました。これは手法としては本物ですが、これらの具体的なグラフは、いくつかの選択とMT5 Testerの最適化の最終的な結果です(これについても記事で触れています)。
、ここに添付するスクリプトで実験してくれることを期待しています。唯一の投資はあなたの時間でしょう。私はMeta Quotesのデモ口座に含まれるシンボルだけを使用しています。つまり無料だ。
6,000以上のシンボルがあり、様々なタイムフレームで組み合わせてテストすることができます。また、非金融データと組み合わせることも可能です。
ただひとつだけ、悪魔のように避けていることがある。それは短期売買だ。ましてや高頻度取引(HFT)である。これは「イワシ」にとっては非常識である。 :))
参考になれば幸いである。