週末の午後、お気に入りのカフェでコーヒーを飲みながら、ふとチャートを眺める。多くの人は「次は上がるか、下がるか」という方向性に一喜一憂しているけれど、システムトレーダーとしての僕が惹かれるのは、もっと別の視点だ。

例えば、「2つの銘柄の『関係性』」なんていう、ちょっと知的でニッチな世界。

今日は、EA開発に興味を持ち始めたばかりの人に、僕が面白いと感じている「協積(Cointegration)ペアトレード」という戦略の話をしようと思う。数式や統計学という言葉が出ると身構えてしまうかもしれないけれど、本質はいたってシンプルで、どこか人間味のある戦略なんだ。☕

「離れても、いつかは戻ってくる」という信頼

まず、この戦略の根底にある考え方から話そう。

世の中には、運命的に連動して動くペアがある。例えば、似た業種の2社や、強い相関を持つ通貨ペアだ。彼らは時々、喧嘩した夫婦のように一時的に距離を置くことがあるけれど、結局は同じ方向へ歩き出す。

この「一時的に離れたけれど、必ず戻ってくる」という性質を統計学的に証明するのが「協積(コインテグレーション)」という考え方だ。

よくある「相関関係」とは少し違う。相関は単に「似た方向に動く」ことだけを見るけれど、協積は「2つの価格差(スプレッド)が、一定の範囲内に収まり続けているか」を見る。

例えるなら、散歩をしている飼い主と犬のようなものだ。🐕 犬はあちこちへ走り回るけれど、リードで繋がっているから、最終的には飼い主の元に戻ってくる。この「リード」こそが、僕たちが数式で導き出したい正体なんだ。

戦略のメカニズム:リードの長さを測る

じゃあ、具体的にどうやってトレードに落とし込むのか。ここからがシステム開発の面白いところだ。

まず、2つの銘柄(銘柄Aと銘柄B)を用意する。そして、「OLS回帰」という手法を使って、銘柄Aの価格が銘柄Bの価格の何倍で動いているか(これを $\beta$ と呼ぶ)を計算する。これが「リードの適正な長さ」を決める作業になる。

その上で、実際の価格差がその適正範囲からどれくらいズレているかを「Zスコア」という指標で数値化する。

ここがエントリーの決め手:

  • Zスコアが -2.0 以下: 「リードが伸びきって、銘柄Aが安くなりすぎた」 $\rightarrow$ 銘柄Aを買い、銘柄Bを売る。
  • Zスコアが +2.0 以上: 「リードが伸びきって、銘柄Aが高くなりすぎた」 $\rightarrow$ 銘柄Aを売り、銘柄Bを買う。

つまり、単なる方向性の予想ではなく、「今の乖離は異常だ。だから元の関係性に戻るはずだ」という統計的な歪みに賭けるわけだ。合理的だろう?

「絆」が切れた時のリスク管理

もちろん、相場に絶対はない。たまに、リードがブチっと切れることがある。

例えば、片方の会社に不祥事があったり、構造的な変化が起きたりすると、もう二度と元の関係に戻らなくなる。統計的に言うと「協積関係の崩壊」だ。

だからこそ、この戦略では冷静な損切りルールが必要になる。 僕なら、Zスコアが $\pm 3.5$ まで広がったところで、「あぁ、これはもう絆が切れたな」と判断して全決済する。執着せずに諦める。これも大人のトレードの嗜みというものだ。📊

また、リードの長さ($\beta$)は時間とともに変わる。だから、週に一度は計算し直して、今の相場にフィットさせるメンテナンスを欠かさないようにしている。

開発のヒント:PythonとMQL5の分業

これを実際にEAにするなら、僕は「いいとこ取り」の構成を勧める。

複雑な統計計算(ADF検定やOLS回帰)は、ライブラリが豊富な Python に任せる。statsmodels というライブラリを使えば、驚くほど簡単に「今、このペアは協積しているか」を判定できる。

そして、実際の注文執行(OrderSend)だけを MQL5 に担当させる。

「脳」はPythonで、「手足」はMQL5で。このハイブリッドな構成を組むこと自体が、開発者としての知的な快感に繋がるはずだ。

おわりに

「統計的裁定取引」なんて呼ばれると、なんだかウォール街の冷徹なトレーダーがやっていることのように聞こえるかもしれない。

でも、やってることは「心地よい関係性を見つけて、それが乱れた時にそっと戻してあげる」という、とてもシンプルな観察だ。

最初は p値だのZスコアだの、聞き慣れない言葉に戸惑うかもしれないけれど、一つずつパズルを解くように実装していけば、きっとその面白さに気づいてくれると思う。

プログラミングや数学を、単なるツールではなく「相場という生き物を理解するためのレンズ」として使う。そんな大人の遊びを、あなたも始めてみないか。💡\n