こんにちは!こんばんは!

ないとめあです。
ご訪問ありがとうございます。
 

 今回は筆者が自作ツール(mvwap_timing.py)でも活用しているMVWAP(Modified Volume Weighted Average Price)について、理論的背景から具体的なトレード戦略までを解説します。単なる「使い方」ではなく、なぜこの指標が機能するのかという本質的な理解を目指します。

■ Fact
 VWAPは1988年にBerkowitz, Logue, Noserが"The Total Cost of Transactions on the NYSE"(Journal of Finance)で定式化して以来、機関投資家の約定品質評価の標準ベンチマークとして使われてきました。MVWAPはそのローリング拡張版であり、セッションをまたいだ継続的なトレンド分析を可能にします。

VWAPとMVWAPの本質的な違い

 まず混同しやすい点を整理します。通常のVWAPは当日のセッション開始から現在までの累積計算です。一方MVWAPは直近N本分のローソク足だけを対象とするローリング計算で、複数日・複数週にわたって機能します。

【典型価格(Typical Price)】
TP = (高値 + 安値 + 終値)÷ 3

【通常VWAP(当日セッション累積)】
VWAP = Σ(TP × 出来高) ÷ Σ(出来高) ※セッション開始からの累積

【MVWAP(ローリング、期間N)】
MVWAP(N) = Σi=t-N+1t(TPi × Voli) ÷ Σi=t-N+1t(Voli)
▲ 分析的推論(Analytical Inference)
 典型価格にHighとLowを含めることで、単純な終値ベースの移動平均よりローソク足全体の価格帯を反映します。さらに出来高で加重することで「多くのお金が動いた価格水準」に収束するため、機関投資家の平均取得コストに近似した水準を示すとされています。これがMVWAPをサポート・レジスタンスとして機能させる理由です。

具体的な計算例(N=5の場合)

期間 高値 安値 終値 典型価格(TP) 出来高(万株) TP × 出来高
t-4 1,020 998 1,010 1,009.3 120 121,120
t-3 1,035 1,008 1,028 1,023.7 95 97,247
t-2 1,042 1,015 1,038 1,031.7 140 144,430
t-1 1,055 1,030 1,048 1,044.3 210 219,310
t(現在) 1,062 1,040 1,058 1,053.3 185 194,861
合計 750万株 776,968
MVWAP(5) = 776,968 ÷ 750 = 1,035.9円
 
 現在価格 1,058円 > MVWAP 1,035.9円 ⇒ 乖離率 +2.1%(強気シグナル)

この例では出来高が最大のt-1期(210万株)の典型価格1,044円が最もMVWAPを引き上げる要因となっています。出来高の大きな足が価格決定に支配的な影響を持つ、というVWAPの本質が見て取れます。

期間Nの選択と特性

■ Fact
 Kissell(2013)"The Science of Algorithmic Trading and Portfolio Management"によれば、アルゴリズム取引における最適VWAP期間は対象資産の流動性と価格インパクトコストに依存し、一律の最適値は存在しません。実務では日経225先物5分足では20〜50本、日足では10〜25日が参照されることが多いとされています。
期間N 感応度 ノイズ 適した場面
5〜10本 高い 多い 短期スキャルピング、高ボラ相場
15〜25本 中程度 中程度 スイングトレード(主力推奨帯)
30〜50本 低い 少ない トレンド確認、中長期ポジション管理
▲ 分析的推論(Analytical Inference)
 Nが小さいほどMVWAPは現在価格に追従しやすく「使いやすく見える」ですが、ホイップソー(だまし)も増えます。筆者のmvwap_timing.pyではATR(真のレンジ平均)をNの動的調整に使うアプローチを採用しており、ボラティリティが高い局面では自動的にNを延ばしてシグナルの質を維持する設計にしています。

主要なトレーディング戦略

■ 順張り(トレンドフォロー)

価格がMVWAPを上抜け + 出来高増加 → 買い
価格がMVWAPを下抜け + 出来高増加 → 売り

MVWAPをエントリー後のトレーリングストップ基準としても使用可。

■ 逆張り(平均回帰)

価格がMVWAP±2σ超の乖離 → 平均回帰を期待
ボリンジャーバンドのMVWAP版として機能。

RSIの過買い・過売りとの同時確認が有効。

■ クロス戦略(短期・長期)

MVWAP(10)がMVWAP(30)を上抜け → ゴールデンクロス
MVWAP(10)がMVWAP(30)を下抜け → デッドクロス

SMAクロスより出来高を加味した分、だましが少ないとされる。

■ 機関投資家コスト分析

MVWAPが機関の平均取得コストに近似 → 大口が損益分岐点で攻防する「価格帯の壁」として機能。

IPO・増資銘柄での初動分析に特に有効。

▲ 分析的推論(Analytical Inference)
日経高配当株50のような高流動性ETFにおいては、機関投資家の大口リバランス(例:月次・四半期末)前後でMVWAPが強いサポートとして機能する傾向があります。月次の積み立て日程(12日・18日)の設計においても、これらの「出来高の重心」となる価格水準を意識したエントリーが、長期の取得コスト最適化につながります。

リスク管理:ATRとの組み合わせ

MVWAPを使う場合、ストップロスの設定にはATR(Average True Range:真のレンジ平均)との組み合わせが標準的です。

【ATRベースのストップロス】
買いエントリー時:ストップ = エントリー価格 − (ATR × 係数k)
推奨係数:k = 1.5〜2.5(ボラティリティにより調整)

【乖離率フィルター】
|(現在価格 − MVWAP) ÷ MVWAP| > 閾値θ のときシグナル有効
推奨θ:日足 0.5〜1.5%、5分足 0.1〜0.3%
⚠ リスク警告(Risk Warning)
MVWAPは後追い指標(ラギング指標)です。以下の点を必ず認識してください:

① 急激なニュース駆動型の価格変動(決算サプライズ・政策変更等)には対応が遅れます。BOJ会合前後のような政策不確実性が高い局面では信頼性が低下します。

② 低流動性銘柄では出来高の偏りによりMVWAPが歪み、誤シグナルが増加します。1日の出来高が1億円未満の銘柄への適用は非推奨です。

③ MVWAPのみでのシステマティック取引は危険であり、RSI・ボリンジャーバンド・出来高プロファイル等との多層確認が必須です。

日本株市場での実装上の留意点

■ Fact
 東京証券取引所のアローヘッドシステムは超高速処理に対応していますが、一般個人投資家がAPIで取得できる出来高データの最小粒度は証券会社により異なります。楽天証券・SBI証券の標準チャートツールではVWAPは標準搭載ですが、任意期間NのMVWAPはカスタム実装が必要です。TradingViewのPine Scriptではta.vwap()関数を期間指定で応用できます。

Pythonでの実装例(pandasを使用):

def mvwap(df, n=20):
    tp = (df['High'] + df['Low'] + df['Close']) / 3
    tpv = tp * df['Volume']
    mvwap = tpv.rolling(n).sum() / df['Volume'].rolling(n).sum()
    return mvwap

# ATRベースのシグナル生成
def generate_signal(df, n=20, atr_mult=2.0, dev_threshold=0.005):
    df['mvwap'] = mvwap(df, n)
    df['atr'] = df['Close'].diff().abs().rolling(14).mean()
    df['deviation'] = (df['Close'] - df['mvwap']) / df['mvwap']
    df['signal'] = 0
    df.loc[df['deviation'] > dev_threshold, 'signal'] = 1   # 買い
    df.loc[df['deviation'] < -dev_threshold, 'signal'] = -1  # 売り
    return df

まとめ

 MVWAPは「出来高という市場の民主的投票」を移動平均に組み込むことで、価格の重心を可視化する指標です。機関投資家のコスト基準に近い水準を示すことから、大口の攻防が集中する「磁石のような水準」として機能することが多いとされています。

 ただしMVWAPはあくまでも後追い指標であり、使用局面の選別と複数指標との組み合わせなくして安定した運用は困難です。筆者のmvwap_timing.pyにおいても、MVWAPはあくまでATRストップ計算の基準値として機能しており、単独のエントリー・イグジット根拠とは位置付けていません。

 このツールで試験的にトレードしてみようと考えていますが、運用方法は特殊です。原則として信用取引はしないので、上昇トレンドの時だけ賭けます。なので、上昇トレードを形成している銘柄を見つけてツールを使ってエントリー価格と損切り価格を計算します。エントリ価格付近で約定したら、損切り価格で売るための注文を長期でいれます。そして、毎日市場クローズ後に再度ツールで損切り値を計算して訂正注文をします。上昇トレードが終われば損切り価格で売却され利益が確定するというトレードです。

 BOJ政策会合以降に試しにこのトレードを実行しようと思っています。途中経過などはこのブログで発表していくつもりです。トレード銘柄は日経平均x2ETF(1579)です。

現状

上昇トレンド中ですが、下げていますので未エントリーです。
項目 6/3 6/4 6/5
終値 828.70円 806.40円 784.90円
TSL(損切りライン) 732.92円 763.89円 763.89円
短期MVWAP 750.45円 766.19円 776.30円
 
参考文献・出典
① Berkowitz, S. A., Logue, D. E., & Noser, E. A. (1988). "The Total Cost of Transactions on the NYSE." Journal of Finance, 43(1), 97–112.
② Kissell, R. (2013). The Science of Algorithmic Trading and Portfolio Management. Elsevier Academic Press.
③ 東京証券取引所「売買高等の推移」各年版(JPX公式統計)
④ TradingView Pine Script v5 Reference Manual — ta.vwap() 関数仕様
⑤ 日本証券業協会「証券市場の基礎知識」2025年版

※本記事は情報提供を目的としており、特定の金融商品の売買を推奨するものではありません。投資判断は自己責任において行ってください。

では、また!