日経225先物(ラージ)の値動きとVWAP乖離に関する簡単な分析
先物トレードを可能な限りVWAPをベースに、なるべく機械的に、でも手動でトレードする際の目安となるデータを頭に入れるための、個人的な備忘録です。
1.はじめに
日経225先物(large)の値動きをVWAPをベースに考察します。分足ベースの超短期トレードで安定して勝つ戦略を見つけることが目的です。
2.データソース
JPXデータクラウドの1分足の225先物ラージのデータをソースにします。例えば、2025/09のデータは以下です。
参考までに入っているデータは以下です。大変ありがたいことに、vwapデータが入ってます。
trade_date,execution_date,index_type,security_code,session_id,interval_time,open_price,high_price,low_price,close_price,trade_volume,vwap,number_of_trade,record_no,contract_month3.分析対象の限月データ
この分析のゴールは、x月y日のVWAP乖離率がz%だった。逆張りでトレードINする場合のzを確率的に決定することです。
これを決めるのに過去データを利用するわけですが、このx月y日が過去日の場合、根拠となる先物の分足データは、未来の限月のデータは大量にあります。しかし、ほとんどの場合、出来高がしっかりあるのは期近の最新のものだけですから(2025/10/1の場合は2025/12限月のデータを使うという意味)、それを使います。デメリットは特になく、期先すぎるデータを使うと値が飛んでることがあり乖離幅を基準にするトレーニングデータとして使うべきではありません。
利用するデータは期近の限月データのみ
トレーニングデータは2024/8〜2025/8の13ヶ月分のデータ
4.構築想定の戦略と分析アプローチ
想定する戦略は、VWAPからの乖離幅をベースに以下を想定する。
原則として逆張りでポジションをINする。
明らかに順張りすべき場合は、逆張りではなく順張りする。ただしこれは例外である。機械的な判断が難しいので、ここでは扱わない。
分足ベースでトレードし、原則持ち越さない
統計的に勝率を上げて、トレード回数をこなし日々の薄利の積み上げで年間+100%を目指す(概ね日次平均で+0.28%程度の増加を目指す)
このため、まずはVWAP乖離幅を中心に分析を行い、勝率を上げるためにインジケーターを順次追加していく。
5.基礎統計値
5.1.日次最大VWAP乖離率の分布
VWAP乖離率の基礎統計値は以下の通り。Day=日中取引、Nightは夜間と取引です。
米国株、というかナスダックに依存する日経は夜間の方が遥かにボラが大きいですね、という当たり前のことを再確認。
なお、ごく当たり前のことを言いますが、例えばVWAP乖離率P75で逆張りトレードしたとして、仮に1日1回トレードするならば、トレードできる日数は直感的に全体の高々25%です。
これでは、薄利多売戦略が成立しません。また、手動でトレードしている場合、感覚的には、勝率80-90%程度で毎日3-4回はチャンスがあります。今回の分析の目的はそのようなチャンスを機会的に抽出してシステムトレードすることでもあるため、実際にはVWAP乖離率がP50とかP40ぐらいの値、つまり、0.4%-0,5%程度でINし、VWAPへの回帰をなるべく安全に狙う方法を模索しなければなりません。
そういう意味では、「今日のボラはこのぐらいかな」という状況把握をした上での条件付きVWAP乖離率分布を想像しながらトレードがしたいわけです。
5.2.月次VWAP乖離率の推移
日次の最大VWAP乖離率の統計を月次推移にすると以下のようになります。上記のおまけのようなものですが、年に1-3回ある超ハイボラな日を含む月を除けば、よほどのことがない限りどの月も概ね同レベルに落ち着きそうですね。
ついでにテーブルデータも入れておきます。
わかりにくいので、ヒストグラムも入れます。
夜間取引
5.3.寄り付き直後の出来高 vs VWAP乖離率分析
デイトレードをしていれば自明ですが、好材料や悪材料が日経にトレンドを発生させているケースでは、VWAP乖離幅が150円程度ではなく、ガンガン大きくなり続けて500円〜のレベルまで到達しますから、逆張りすると大損してしまいます。このため、このような「トレンドが強いかもしれない日」を識別し、INしない判断 or INするタイミングをもっと大きくする判断が必要です。
例えば、トレンドが強くない日に、VWAP乖離率P50の+-0.557%でINしたとして、この場合はほぼ勝ててしまいます。というより、日経225が45000円の世界で0.557%は250円ですから、ここまで乖離するのは結構実は大変で、感覚的には2日に1回来るか来ないか、ぐらいですからP50の値がこれなのは感覚とは整合します。一方、トレンドが超強い日にP50程度で逆張りしてはならず、P90とかでINできたら理想的でしょう。
これは一種の条件付き確率のようなもので、寄り付きの段階でハイボラではないと判断できれば、仮にVWAP乖離率P50の+-0.557%でINしたとしても、実態としては90%ぐらいの確率で勝てる状態まで持っていける、はずです。
ここではその分析をします。
まずは、9:00-9:05の出来高の大きさを使い、VWAP乖離率の幅を予測できるか、実験します。日経225は直近1年で3万円台から4万円台まで幅がありすぎるので、価格レベルの影響を受けないように標準化した上で分析します。以下の通りです:
標準化手法:
Z-score標準化: 平均からの標準偏差単位で評価
相対出来高: 20日移動平均との比率
価格水準別分析: 価格帯ごとの傾向を比較
分析結果は以下のとおり。
全体の傾向として、
出来高とVWAP乖離率には明確に傾向は見て取れるが
R2や相関係数の数値はよろしくない
ただこれは目的を"VWAP乖離率を予測する"という点推定を目標としてしまっているため。出来高が少ないなら明確にVWAP乖離率が小さいのは自明、一方で出来高が多い場合には分散が激しい、というのは明確なインサイトである
と言えるでしょう。ここでやりたいのは、「寄り付きめっちゃ買われるやん!今日はVWAP乖離率での逆張りポイントは下げた方が良さそうじゃん」という雰囲気議論ができれば良いのです。その意味では十分と言えるでしょう。
上記の考察から、点推定ではなくて、分類のアプローチが良さそうですから、次は、「初動の出来高をいくつかに分類した上で分析する」アプローチとします。
その結果が、以下のグラフです。Q1-Q4等の定義は後述してあります。
わかりにくいので分析の概要を記述しておきます。見ての通り、初動出来高でハイボラを除外する・ハイボラを特定するのは比較的容易にできそうです。低ボラの場合もできそうですが、その間は中途半端で、これが点推定の統計パフォーマンスを悪化させている原因と思われます。
目的: 初動出来高の大きさ別に、最大乖離率の分布を比較します。
グラフの読み方:
横軸: 最大VWAP乖離率(%)
縦軸: 頻度(日数)
色分け: 初動出来高の四分位(Q1=最小、Q4=最大)
初動出来高の分類:
Q1: 初動出来高が最も少ない25%の日
Q2: 初動出来高が少ない側の25~50%の日
Q3: 初動出来高が多い側の50~75%の日
Q4: 初動出来高が最も多い25%の日
活用方法:
Q4(出来高が大きい日)の分布が右に寄っているか確認
出来高別に逆張り閾値を変える戦略を検討
ついでにヒートマップ分析はこちら。Q1とQ4が顕著って感じですね。直感的には、Q1と見せかけてX-Largeのボラの日は場中で何か大きめの材料が出たケースや、夜間で織り込んだと見せかけて日中もジワジワ上げ続けるようなケースと推察します。
💡 ヒートマップの見方
数字: 該当する日数(例: 22 = 22日間)
行(Y軸): 初動出来高の四分位 (Q1=Low ~ Q4=High)
列(X軸): 最大乖離率の四分位 (Small ~ X-Large)
色: 濃いほど日数が多い
💡 インサイト
右上(Q4 x X-Large)が多い → 初動出来高が大きいと乖離も大きい
左下(Q1 x Small)が多い → 初動出来高が小さいと乖離も小さい
対角線上に値が集中 → 強い正の相関
📊 各組み合わせの出現率
Q1 (Low) x Small: 24日 (9.9%)
Q1 (Low) x Medium: 13日 (5.3%)
Q1 (Low) x Large: 15日 (6.2%)
Q1 (Low) x X-Large: 9日 (3.7%)
Q2 x Small: 17日 (7.0%)
Q2 x Medium: 19日 (7.8%)
Q2 x Large: 15日 (6.2%)
Q2 x X-Large: 10日 (4.1%)
Q3 x Small: 14日 (5.8%)
Q3 x Medium: 20日 (8.2%)
Q3 x Large: 13日 (5.3%)
Q3 x X-Large: 13日 (5.3%)
Q4 (High) x Small: 6日 (2.5%)
Q4 (High) x Medium: 9日 (3.7%)
Q4 (High) x Large: 17日 (7.0%)
上記のアプローチは統計的には有意だが、R2が小さすぎて文句を言いたくなるので、次に、もう少しまともな代替手段を検討します。
探索する代替指標:
時間幅の拡張: 9:00-9:15, 9:00-9:30
初動変動幅: 寄り付き直後の価格変動幅(ボラティリティそのもの)
価格ギャップ: 前日終値との乖離
トレンド指標: 直近のボラティリティ(ATR)
複合指標: 出来高×変動幅
これらを比較して、最も説明力が高い指標を特定します。以下が候補ですが、ほぼゴミを列挙しただけなので結果だけ見ればOKです。読み飛ばしましょう。
Volume (9:00-9:05): 寄り付き直後5分間の出来高
Volume (9:00-9:15): 寄り付き15分間の出来高
Volume (9:00-9:30): 寄り付き30分間の出来高
Range % (9:00-9:05): 寄り付き5分間の変動幅(%)
Range % (9:00-9:15): 寄り付き15分間の変動幅(%)
Range % (9:00-9:30): 寄り付き30分間の変動幅(%) ⭐
Price Gap %: 前日終値との乖離率
Vol x Range (9:00-9:05): 出来高×変動幅(複合指標)
Vol x Range (9:00-9:15): 出来高×変動幅(15分版)
Prev Day Volatility: 前日のボラティリティ
面倒なので割愛しますが、結果は以下の通り。9:00-9:30のRange%で判断するしかなさそうです。すでに動いてるので当たり前だろって感じもしますが、9:00-9:30の相場の暴れ方の呼吸を感じ取って雰囲気トレードするのは正しいということです。知ってました。
余談ですが、Kolmogorov-Smirnov検定(Q1 vs Q4)を行うとQ1とQ4の場合の条件付きの分布は統計的に明確に異なることが証明可能でした。なので使えますね。
日次のVWAP乖離率最大をつける時間帯
ところで、参考までに、VWAP乖離率が最大になりやすい時間帯をファクトとして確認しておきましょう。以下の通りです。夜間が意外なところですが、22:30と23:30(米国株が寄り付く時間帯)を足すと17:00より大きくなります。夜間は難易度が高いですが、日中取引のように単純化するため、16:30-17:00のRange%を見て17:00または22:30と23:30のボラを推察する感じにします。
5.4.初動指標レベル別の条件付き乖離率分布分析
さて、初動指標を観察したら概ねVWAP乖離率の居所が決まるわけですが、Range%の値からVWAP乖離率を点推定するのは愚行です。
考えてみれば当たり前ですが、初動が大きかったからVWAP乖離率が例えば0.567%である確率を推定するのは無理です。確率の世界ではこれは連続確率分布になるのでそもそも点推定はできません(確率は0になります)。
もっとざっくりした分析の方が良いので、ここれは9:00-9:30のRange%の幅を5つに分類し、その上で、VWAP乖離率のいどころを探ることにします。
以下の通りです。
📊 初動指標レベル別の条件付き乖離率分布(9:00-9:30版)
分析対象: 243営業日
Range % (9:00-9:30) 範囲: 0.230% - 3.315%
[レベル別のRange %範囲]
以下の5つに分類する。
Skip (0-40%ile) : Range% が 0.230% - 0.486% (97日)
Low (40-60%ile) : Range% が 0.487% - 0.578% (49日)
Normal (60-75%ile) : Range% が 0.579% - 0.722% (36日)
High (75-90%ile) : Range% が 0.726% - 0.992% (36日)
Extreme (90-100%ile) : Range% が 1.008% - 3.315% (25日)
既述の通り、例えば、range%がNormal (60-75%ile)の場合にVWAP乖離率は幾つになるか?という点推定は意味がないです。
そうではなくて、「range%がNormal (60-75%ile)の場合にVWAP乖離率の90%はどの程度の値に収まるか?」といったアプローチが有効です。これをConditional CDF(条件付き累積分布関数)といいます。そもそもVWAP乖離率は連続数ですから、ある1点の値を取る確率はゼロですしね。
余談ですが、EC等の小売業で需要予測をする場合、このようなP90需要予測のような指標を使うのは一般的です。そもそも、ある商品の仕入れにおいて、顧客の需要を満たす数量をピンポイントで100個とか当てるのは無理があるでしょう。そうではなくて、需要の90%を満たす数量が200個、とか累積のパーセンタイルで語るのが普通です。
ここでやってるのはそれと同じで、実務における予測の文脈においては、ごくごく一般的です。
さて、グラフと値は以下の通り。
各Range%における条件付きVWAP乖離率統計は以下の通り:
夜間セッション
ここまでで、概ねVWAP乖離率を使ったトレードの戦略の原型らしきものを作る材料が揃いました。
以降ではもう少し話を先に進めます。
5.5.そもそものVWAP乖離率の回帰トレードはワークするか
日中取引
まずは基礎統計です。Entry LevelカラムのVWAP乖離率でエントリーした場合、エントリー可能日数と、VWAP乖離率0.1%まで戻ることを回帰とみなした回帰率=Recersion Rateの統計が以下。
そうは言っても逆張りトレードするとメンタルをやられることがありますよね。含み損の統計を見る必要があり、それが以下です。
VWAP乖離率0.1%へ回帰するまで歯を食いしばって耐えないといけない場合もあります。どの程度の時間が必要でしょうか、それが以下です。
以上を見る限り、VWAP乖離率から回帰を狙って逆張りするのはいい戦略に見かけ上は見えます。
ただし、これはVWAP乖離率が戻る、という話であって、利益が出ているとは限りません。
例えば、VWAP乖離率が1%に到達した場合、現在では450円越えという意味ですが、400円を超えるときは押し目は経験上は結構小さめで、VWAPはジワジワあがり続ける場合があります。幸い、VWAPは単純移動平均のような欠陥品とは違うので、、乖離率が下がったのに株価は上がっているような状況は頻繁には発生しにくいですがが、発生することはまぁまぁあります。
そのようなケースは除外して評価をしないとトレードのパフォーマンスを評価することはできないでしょう。
なのでこれはあくまでも、ここで言えるのはVWAP乖離率がどう動くか?というだけの話です。PnLシミュレーションは後述します。
夜間取引
同様に夜間は以下の通りですが、Nightはかなり分が悪いように見えます。
これは直感的にも経験的にも明らかで、夜間は日本株起因で動く時もあるし、米国株起因で動く時もあります。半導体の材料が出れば異様にボラティリティが上がる時もあるし、経済指標による変動もありますから、結構難しそうだなというのが事前の予測です。
5.5.初動指標レベル別のVWAP乖離率逆張りトレード簡易バックテスト
既述の通り、VWAP乖離率が戻ったところで株価が戻らないと逆張り戦略上は敗北となります。実際のバックテストをしないと意味がないため、やってみます。これは非常に単純なバックテストで、以下の通りです:
エントリー
ショート: VWAP乖離率 >= エントリー閾値
ロング: VWAP乖離率 <= -エントリー閾値
エントリー価格を記録
決済(優先順位順)
損切り(実価格ベース)
ショート: 現在価格 > エントリー価格 + 損切り幅(乖離幅の1.5倍)
ロング: 現在価格 < エントリー価格 - 損切り幅(乖離幅の1.5倍)
利益確定(VWAP回帰)
VWAP乖離率の絶対値が 0.1% 以下
実際の価格で損益を計算
セッション終了
セッション終了時点で強制決済
Trades=トレードした営業日のカウント、かつ、1営業日で1ロット先物ラージをトレードした場合に正規化してます。
PnL := (entry_price - exit_price) # ショート戦略
PnL := (exit_price - entry_price) # ロング戦略
Total PnL = sum(全トレードのPnL)
日中取引
ショート戦略
ロング戦略
夜間取引
ショート戦略
ロング戦略
というわけで、実はこれだけでも多少はワークしそうで、低く見積もって年間+30-40%程度です。実際には1 Trade = 1営業日で1営業日につき1回トレードとしてます。
しかし、1日で何度もトレードインすることもできるし、複数戦略を組み合わせることや、インジケーターを追加する等も有益でしょう。
さすがにこのパフォーマンスだと話にならないので、さらに追加してシミュレーションする予定ですが、今回はここまで。
より複雑なバックテストはTrading Viewのストラテジー機能を使わないと実装が難しいのは厄介ですよね。
おしまい。



コメント