9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【入門〜実務】クオンツトレーダーにとって「自己相関」とは何か — 順張り・逆張り仮説を分ける基本検査

9
Posted at

はじめに

クオンツトレード戦略を作るとき、いきなり機械学習やAIに飛びつく前に、必ず確認しておきたい基礎検査があると考えている。それが 自己相関(autocorrelation) である。

自己相関を一言でいえば、

過去の値動きと将来の値動きの間に、どれくらい統計的な関係があるかを定量化すること

である。もう少し実務寄りに言い換えると、

価格やリターンに「記憶」があるのか、それともほぼランダムなのかを調べる作業

ということになる。なお、自己相関は因果関係を示すものではなく、あくまで時間方向の統計的関連を測るものである点には注意が必要である。

本記事では、入門者向けに自己相関の意味から始めて、クオンツ実務でどう使うか、ATRブレイクアウト後のリターンを題材にしたイベントスタディの実装例までをまとめる。本記事は教育目的であり、特定の戦略の収益性を保証するものではない。


1. 自己相関とは何か

USDJPYのリターン系列を考えるとき、次のような問いを立てられる。

  • 直近1本前のリターンがプラスだったら、次もプラスになりやすいのか
  • 直近1本前のリターンがプラスだったら、次はマイナスになりやすいのか
  • 過去のリターンと将来のリターンに、ほぼ関係はないのか

これを統計的に測るのが自己相関である。

$$
\rho_k = \mathrm{Corr}(r_t,, r_{t-k})
$$

ここで $r_t$ は現在のリターン、$r_{t-k}$ は$k$本前のリターン、$\rho_k$ はラグ$k$の自己相関係数である。$-1$から$+1$の値をとる。

入門者向けの直感

「サイコロを振って出た目」には自己相関はほぼゼロである。前の目が次の目を予測する材料にならない。一方、「気温」には自己相関がある。今日が暑ければ明日も暑い可能性が高い。

金融市場のリターンはこの中間に位置する。多くの市場では平均リターンの自己相関は小さい一方で、時間足・銘柄・レジームによっては短期的なモメンタムやリバーサル、そしてボラティリティの持続性が観測されることがある。だからこそ、どこに弱い癖があるのかを地道に調べていく作業が必要になる。


2. 自己相関がプラスの場合の意味

自己相関がプラスのとき、

過去の方向が続きやすい

ことを意味する。具体的には、

  • 上がった後にさらに上がりやすい
  • 下がった後にさらに下がりやすい

という傾向である。これは モメンタム戦略・順張り戦略 の仮説の出発点になる。


3. 自己相関がマイナスの場合の意味

自己相関がマイナスのときは、

上がった後に下がりやすい、下がった後に上がりやすい

ことを意味する。これは 平均回帰戦略・逆張り戦略 の仮説の出発点となる。

まとめ表(あくまで仮説生成のための整理)

自己相関 意味 戦略の方向性(仮説)
プラス 値動きが継続しやすい 順張り仮説
マイナス 値動きが反転しやすい 逆張り仮説
ほぼゼロ 過去の値動きから予測困難 見送り、別の特徴量が必要

ただし、この対応は単純化されている。実際に売買優位性になるかは、時間足・ラグ・市場・レジーム・取引コスト・OOS再現性によって決まる。**「自己相関の符号で戦略を決める」のではなく、「自己相関の符号で仮説を立て、それを検証する」**というのが実務的な使い方である。


4. 統計的有意性 ≠ 収益性

ここはクオンツ初心者が最も誤解しやすいポイントなので、独立した節として強調しておきたい。

自己相関が統計的に有意であっても、それだけで売買優位性があるとは限らない。

理由は単純で、サンプル数が大きい場合、$\rho = 0.01$ のような極めて小さな自己相関でも統計的には有意になりうるからである。しかし、その程度のエッジはスプレッド、スリッページ、手数料、マーケットインパクトで簡単に消える。

実務上重要なのは、

  • 効果量:その自己相関は、取引コストを上回る期待値を生むほどの大きさか
  • コスト控除後の評価:bid-ask、手数料、スリッページを差し引いて残るか
  • 再現性:期間・銘柄・レジームを変えても残るか
  • OOS検証:インサンプルで見つけた癖がアウトオブサンプルでも残るか

の4点である。「有意 = 儲かる」と短絡しないことが、地味だが極めて重要な姿勢である。


5. なぜ価格ではなくリターンを見るのか

自己相関を計算するときは、価格そのものではなくリターンで見るのが原則である。

価格そのものはトレンドや水準を持ちやすいため、自己相関が高く見えても、それは単に「昨日100円だった通貨が今日も100円付近にいる」という自明な事実を反映しているだけのことが多い。これは、価格系列の非定常性によって見かけ上の自己相関が高く見える問題であり、戦略の根拠としては使えない。

実務で見るべき4種類の系列を整理する。

見る対象 分かること 使い道
リターン 方向の継続性・反転性 順張り・逆張り判定
符号リターン 上下方向の癖 エントリー方向
絶対リターン $|r_t|$ ボラティリティ・クラスタリング ポジションサイズ調整
二乗リターン $r_t^2$ リスクのクラスタリング GARCH、ボラティリティ予測、VaR推定

金融市場の経験則として、

リターン自体の自己相関は小さいが、絶対リターンや二乗リターンの自己相関は残りやすい

ことが知られている。これは、方向予測よりもボラティリティ予測の方がやりやすいという、クオンツ実務でかなり重要な事実につながる。GARCHモデルや、ボラティリティに応じたポジションサイジングはこの性質を利用している。

短期データ特有の注意:bid-ask bounce

特に短期足(数秒〜数分)では、約定価格がbidとaskを交互に行き来することにより、見かけ上のマイナス自己相関が発生することがある。これは「市場が平均回帰している」のではなく、単なる約定価格のノイズである。

そのため、超短期の自己相関をそのまま平均回帰シグナルと解釈するのは危険である。可能であれば、mid price、スプレッド、約定コストを考慮したうえで検証する必要がある。


6. 自己相関の検定:単一ラグから多ラグへ

個々のラグ$k$について$\rho_k$を見るだけでなく、複数のラグをまとめて検定する Ljung-Box検定 を併用するのが実務的である。

$$
Q = n(n+2) \sum_{k=1}^{m} \frac{\hat{\rho}_k^2}{n-k}
$$

帰無仮説は「ラグ1から$m$までの自己相関がすべてゼロ」である。

ただし、ここでも統計的有意性 ≠ 収益性の原則は変わらない。大標本では微小な自己相関でも$Q$統計量は有意になりやすい。Ljung-Boxは「癖がありそうかの一次スクリーニング」として使い、最終判断は必ず効果量とコスト控除後の期待値で行うのが望ましい。

なお、金融時系列ではボラティリティ・クラスタリングや裾の重さにより、通常のt検定が過信されやすい。Newey-West標準誤差やブートストラップによる頑健な検定の併用を推奨する。


7. 利用例:ATRブレイクアウト後のリターンに癖はあるか

ここでは具体例として、ATR(Average True Range)ベースのブレイクアウト後のリターン を取り上げる。

戦略の素朴な発想

ATRはボラティリティを表す代表的な指標である。「直近のクローズから $1.5 \times \mathrm{ATR}$ 以上動いたらブレイクアウトとみなす」というシグナルを考える。

このとき、素朴に「ブレイク発生 → 順張りで追随」と決めるのは危険である。その局面が、

  • 本物のトレンド発生局面なのか
  • 一時的なオーバーシュート局面なのか

によって、正しい判断が真逆になる。データで確認する必要がある。

ステップ1:ブレイク方向を保持する

ここで重要なのは、上方向ブレイクと下方向ブレイクを混ぜないことである。両者を絶対値でひとまとめにしてしまうと、順張り・逆張りの判定ができなくなる。

import numpy as np
import pandas as pd

def true_range(df):
    prev_close = df['close'].shift(1)
    tr = pd.concat([
        df['high'] - df['low'],
        (df['high'] - prev_close).abs(),
        (df['low']  - prev_close).abs()
    ], axis=1).max(axis=1)
    return tr

# ATRとclose-to-close変化
df['atr']    = true_range(df).rolling(14).mean()
df['change'] = df['close'].diff()

# ブレイク方向を +1 / -1 / 0 で保持
threshold = 1.5 * df['atr'].shift(1)
df['breakout_dir'] = np.where(
    df['change'].abs() > threshold,
    np.sign(df['change']),
    0
)

ステップ2:方向調整済みリターンでイベントスタディ

ブレイク方向に将来リターンをそろえて評価するのが、実務的な見方である。

  • 上方向ブレイクなら、将来リターンをそのまま見る
  • 下方向ブレイクなら、将来リターンに $-1$ を掛ける

こうして得られる 方向調整済みリターン(aligned forward return) を、複数のホライズンで集計する。

horizons = [1, 2, 3, 5, 10]
results = []

for h in horizons:
    df[f'fwd_ret_{h}']         = df['close'].shift(-h) / df['close'] - 1
    df[f'aligned_fwd_ret_{h}'] = df['breakout_dir'] * df[f'fwd_ret_{h}']

    sample = df.loc[df['breakout_dir'] != 0, f'aligned_fwd_ret_{h}'].dropna()
    results.append({
        'horizon':               h,
        'n':                     len(sample),
        'mean_aligned_return':   sample.mean(),
        'median_aligned_return': sample.median(),
        'hit_rate':              (sample > 0).mean()
    })

result_df = pd.DataFrame(results)
print(result_df)

解釈は直感的である。

  • mean_aligned_return > 0:ブレイク方向に伸びやすい → 順張り仮説
  • mean_aligned_return < 0:ブレイク方向と逆に戻りやすい → 逆張り仮説
  • hit_rate > 0.5:順張りの勝率が高い
  • hit_rate < 0.5:逆張りの勝率が高い

ステップ3:補助的にACFも見る

イベントスタディとは別に、リターン系列そのもののACFを補助的に確認すると、市場全体の癖と、ATRブレイクという特定イベント後の癖を比較できる。

from statsmodels.tsa.stattools import acf

ret = df['close'].pct_change().dropna()
acf_values = acf(ret, nlags=10, fft=False)
print(acf_values[1:])

ここで、「市場全体ではほぼゼロだが、ATRブレイク後だけプラス(あるいはマイナス)」という結果が出れば、ATRブレイクが意味のある条件付けになっている可能性がある。

ステップ4:必須の追加検証

イベントスタディで方向性が見えても、それで終わりではない。最低限、以下を確認する必要がある。

  • コスト控除後の期待値:スプレッド、手数料、想定スリッページを引いてもプラスか
  • 損益分布:平均だけでなく、中央値、歪度、最大損失も見る(少数の外れ値で平均がブレることが多い)
  • 時間帯別:東京・欧州・NY時間で挙動が違うことが多い
  • レジーム別:トレンド相場・レンジ相場で分けて集計
  • WFO / OOS検証:インサンプルの結果が将来も残るかを確認
  • multiple testing補正:ホライズン、しきい値、ATR期間を多数試すと、偶然有意なものが出る。Bonferroni補正やFDR制御を検討する

8. 自己相関の位置づけ:完成品ではなく診断ツール

自己相関はクオンツにとって 基礎中の基礎 である。ただし、自己相関だけで勝てるわけではない。位置づけとしては、

自己相関 = 市場に時間方向の癖があるかを調べる初期診断であり、戦略仮説の生成ツールである

くらいのものだ。実戦投入できる戦略にするには、

  • 自己相関 / イベントスタディ
  • × レジーム判定
  • × ボラティリティ管理
  • × 時間帯フィルター
  • × 取引コスト控除後の評価
  • × multiple testing補正
  • × WFO / OOS検証
  • × リスク管理(ポジションサイズ、最大ドローダウン制約)

まで組み合わせて、ようやく実戦に耐える形になる。


9. 注意点まとめ

  • 全期間平均だけで見ない:レジームによって自己相関は変わる
  • 時間足ごとに違う:5分足、30分足、4時間足では構造が異なる
  • 通貨ペア・銘柄ごとに違う:USDJPY、EURUSD、株価指数、商品でそれぞれ癖が違う
  • コスト控除後で評価する:小さな自己相関はスプレッドや手数料で消える
  • 統計的有意性 ≠ 収益性:サンプルが大きければ微小な相関でも有意になりうる
  • bid-ask bounceに注意:超短期では見かけ上のマイナス自己相関が出やすい
  • multiple testingに注意:多数のラグ・銘柄・時間足を試すと偶然のヒットが出る
  • 再現性を確認:データを変え、期間を変えて同じ結果が出るかを必ず確認する

結論

クオンツトレーダーにとって自己相関を調べるとは、

価格やリターンに「継続しやすい癖」または「反転しやすい癖」があるかを統計的に調べること

であり、その重要性はかなり高い。ただし、それは戦略の完成品を提供するものではなく、あくまで 仮説生成のための診断ツール である。

自己相関の符号で「順張り仮説か、逆張り仮説か、見送りか」を立て、それをイベントスタディ、コスト控除後の期待値、レジーム別検証、OOS検証まで進めて、ようやく戦略候補になる。この一連のフローを意識すると、検証の精度が一段上がる。

入門者の方は、まずは自分が興味ある通貨ペアや銘柄について、リターン・絶対リターン・二乗リターンの自己相関を計算してみるところから始めるのがよい。それだけで、その市場が「方向に癖があるのか」「ボラティリティに癖があるのか」「ほぼランダムなのか」が見えてくる。次のステップとして、本記事のATRブレイクアウト例のように、特定イベント後の方向調整済みリターンを集計してみると、戦略仮説の作り方が体感できるはずである。


本記事は教育・情報提供を目的としたものであり、特定の投資戦略の収益性を保証するものではありません。実際の取引判断は自己責任でお願いします。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?