本記事では、初心者でも再現しやすく勝率と再現性の両立を図れる「VWAP(出来高加重平均価格)」を中核としたトレード戦略を、株・FX・仮想通貨の各市場に共通する形で体系化して解説します。単なる用語解説ではなく、具体的な執行ルール、数値基準、検証方法、資金管理、さらにMQL4での自動化雛形まで含めて、明日から実装できるレベルで提供します。
VWAPとは何か——なぜ効くのか
VWAP(Volume Weighted Average Price)は、一定の集計期間における「価格×出来高」の合計を出来高合計で割った指標です。大口の売買は出来高に反映されるため、VWAPは「市場の平均的な約定コスト」を近似します。機関投資家はVWAPをベンチマークに執行品質を評価するため、VWAP付近には流動性が厚く、価格が吸着・反発しやすい特性が生まれます。
VWAP_t = (∑_{i=1..t} Price_i × Volume_i) / (∑_{i=1..t} Volume_i)
実務では次の2つの使い方が中心です。
- ミーンリバージョン(平均回帰):行き過ぎた価格がVWAPへ戻る性質を狙う。
- トレンドフォロー:価格がVWAPを明確に上抜け/下抜けした後の継続を取る。
FXの「出来高」という落とし穴
FXの多くのプラットフォームでは「出来高」はティックボリューム(価格更新回数)で代替されています。株や仮想通貨の真の出来高とは性質が異なりますが、それでも相対的な活発さや「時間帯ごとの流動性差」を反映し、VWAP系のロジックが実務水準で機能するケースは多々あります。検証時は市場ごとにパラメータを分けるのが基本です。
3つの基本VWAP戦略(株・FX・仮想通貨に共通)
戦略A:VWAPブレイクアウト順張り
狙い:VWAPを出来高同伴で明確に上抜け/下抜けした「本物の方向」を初動で捉える。
エントリー:ローソク終値がVWAPを上抜け(買い)/下抜け(売り)かつ、直近20本平均以上の出来高(またはティックボリューム)を同伴。
イグジット:リスクリワード比2:1を基準に、固定ストップ+トレーリングを組み合わせる(後述)。
フィルター:平均ドル建て出来高(株/仮想通貨)またはロンドン/NY時間帯(FX)でのシグナルに限定。
戦略B:VWAP回帰(逆張り)
狙い:短期の過熱がVWAPへ回帰する性質を取る。
エントリー:価格がVWAPから±1.5〜2.5σ(標準偏差バンド)だけ乖離し、乖離方向の勢いが鈍化(例:RSIが70→60割れで売り、30→40超で買い)。
イグジット:VWAP到達で半分利確、残りはVWAP±0.5σ到達またはトレーリングで手仕舞い。
注意:トレンド局面では逆張りは危険。上位足の方向と同調(例:日足が上昇なら、買いの逆張りのみ)を原則化。
戦略C:アンカードVWAP(AVWAP)スイング
狙い:重要イベント(決算、FOMC、直近のスイング高安)を起点にAVWAPを引き、機関の平均コストを推定。
エントリー:価格がAVWAPを上抜け(買い)/下抜け(売り)+出来高急増。
イグジット:AVWAPの反対側割れで撤退、もしくはATR×nの固定ストップからトレーリング。
VWAPバンドの作り方(実装基準)
VWAPに対し、同期間の価格の標準偏差σを用いてVWAP±kσのバンドを描画します。kは1.0〜2.5でチューニング。日中足では1.5〜2.0が実務上のバランスが良いことが多いです。σはローリングで更新し、過去N本(例:過去50〜100本)で推定します。
執行ルール:株・FX・仮想通貨の具体例
株式(日本株/米株)日中デイトレ
- 時間帯:寄りから前場終盤まではブレイク、後場は回帰優位の銘柄が多い。
- 銘柄選定:出来高上位、ニュース/決算でギャップ発生銘柄。
- エントリー(順張り):前場VWAP上抜け+5分足出来高が20本平均の1.5倍。
- 手仕舞い:初期ストップ=エントリー足安値−ATR(14)×0.8、利確目標=初期リスクの2倍、以降はトレーリング。
FX(USD/JPY)ロンドン〜NY
- 時間帯:16:00–1:00(日本時間)で流動性厚い。
- 順張り:15分足でVWAP上抜け&ティックボリューム増加。直近高値+1〜2pipsでストップを置かない。代わりに最初から固定ストップ=ATR(14)×1.2。
- 逆張り:VWAP+2σ到達後、RSIダイバージェンス確認でショート、VWAP回帰で半分利確。
仮想通貨(BTC/USDT)24h
- 順張り:1時間足でVWAP上抜け+出来高スパイク。清算密集帯(清算価格クラスター)に注意し、過剰レバは避ける。
- 逆張り:深夜帯の薄商いでの±2σ乖離は戻りやすいが、イベント前後は回避。
リスク管理:リスクリワード、ポジションサイズ、トレーリング
1トレードあたり口座の1%(最大でも2%)をリスク許容とし、初期ストップからロットを逆算します。
ロット = (口座残高 × 許容リスク率) / 初期ストップ幅(金額)
期待値E = 勝率 × 平均利益 − (1 − 勝率) × 平均損失
トレーリングの具体式(順張り向け):
- 価格がエントリーから初期リスクの+1R進んだら建値へ引き上げ。
- その後はVWAP−0.5σ(ロング)/ VWAP+0.5σ(ショート)を終値で割り込んだら手仕舞い。
- 強トレンドでは前回スイング安値/高値−ATR×0.5で段階追随。
数値シミュレーション(初心者が把握すべき現実的ライン)
以下は仮の検証例です(手数料・スリッページ控除後)。
- 期間:6か月、対象:出来高上位銘柄20、足種:5分。
- 条件:VWAPブレイク+出来高1.5倍、1R=初期ストップ、利確=+2R、建値ストップ、VWAP−0.5σでトレーリング。
- 結果:勝率47%、平均損失1R、平均利益1.85R、期待値E ≈ 0.47×1.85 − 0.53×1.0 ≈ 0.32R。
勝率50%未満でも損小利大(R倍)を徹底すればプラスにできます。敗因の多くは「損切りの後ずれ」「利確の早すぎ」「時間帯選別の甘さ」に集約します。
検証〜運用フロー(手順書)
- データ取得:対象銘柄/通貨のOHLCVを確保。FXはティックボリューム。
- 指標生成:VWAP、σ、AVWAP、ATR、RSI。
- ルール化:A(順張り)、B(回帰)、C(AVWAP)を別々に。
- 手数料・スリッページ:現実的に見積もる(例:米株0.004$/株、仮想通貨0.05%/片道)。
- 分割最適化:期間を3分割してウォークフォワードで過剰最適化を防ぐ。
- マネジメント:1トレード1%リスク、デイリー最大損失=口座残の3%。
- 実運用:ロットは検証の70%から開始し、DD(ドローダウン)が最大DDの1.2倍に達したらロット半減。
ディーリングの細部——スリッページと板の読み
VWAPは流動性の中心線でもあるため、板の厚みが偏るとフェイクブレイクが出やすいです。板の偏り(例:VWAP直上に厚い売り板)があるときはブレイクの質が低下します。直近出来高3本の移動平均が増加しているか、約定回数(FXならティック)が増えているかを必ず確認します。
ケーススタディ
ケース1:日本株デイトレ(順張り)
前場、材料株がギャップアップ。5分足でVWAP下から上へブレイク、出来高1.8倍。エントリー後+1Rで建値ストップへ。VWAP−0.5σ割れで半分手仕舞い、その後伸びて+3R到達で残りを決済。結果+2.0Rの実現。
ケース2:USD/JPY(回帰)
NY午後、薄商いで+2σまで拡散。RSIダイバージェンスを確認してショート。VWAP到達で半分利確、残りは前回安値更新でクローズ。結果+1.2R。
ケース3:BTC(AVWAP)
前回スイング安値からAVWAPを起点に上抜け。出来高スパイクを伴い、押し目でAVWAP近辺に指値。初期ストップ=ATR×1.3、利確は+2Rで半分、残りはトレーリング。結果+2.6R。
MQL4での自動化雛形(VWAP+σバンド)
以下は、当日セッションVWAPと標準偏差バンドを計算し、簡易の順張り・回帰シグナルを出すEA雛形です。実口座投入前に必ずデモ検証してください。
//+------------------------------------------------------------------+
//| VWAP_Bands_EA.mq4 (簡易雛形) |
//+------------------------------------------------------------------+
#property strict
input int PeriodCalc = 1440; // セッション長の目安(分)
input int BarsBack = 500; // 計算に使う最大バー
input double K = 2.0; // σバンド倍率
input double RiskPct = 1.0; // 1トレードの口座リスク(%)
input double RR_Take = 2.0; // 利確目標(R倍)
input double ATRmultSL = 1.2; // 初期ストップ = ATR×係数
double vwap[], stdv[];
int OnInit(){
ArraySetAsSeries(vwap,true);
ArraySetAsSeries(stdv,true);
return(INIT_SUCCEEDED);
}
void calcVWAP(int limit){
double sumPV=0, sumV=0;
for(int i=limit; i>=0; i--){
double price = (High[i]+Low[i]+Close[i])/3.0;
double vol = (double)Volume[i]; // ティックボリューム
sumPV += price*vol;
sumV += vol;
if(sumV>0) vwap[i]=sumPV/sumV;
}
// σ(単純に価格の標準偏差をRollingで近似)
for(int i=limit; i>=0; i--){
int win = MathMin(100, i+1);
double mean=0, var=0;
for(int j=0;j<win;j++){ mean += Close[j]; }
mean /= win;
for(int j=0;j<win;j++){ double d=Close[j]-mean; var+=d*d; }
stdv[i]=MathSqrt(var/MathMax(1,win-1));
}
}
double accountRiskMoney(){ return(AccountBalance()*RiskPct/100.0); }
double calcLots(double stopPips){
double tickVal = MarketInfo(Symbol(),MODE_TICKVALUE);
double lot = accountRiskMoney()/(stopPips*Point*tickVal);
return(NormalizeDouble(MathMax(MarketInfo(Symbol(),MODE_MINLOT), lot),2));
}
int OnTick(){
int limit = MathMin(BarsBack, Bars-1);
calcVWAP(limit);
int i=0; // 最新足
double atr = iATR(Symbol(), PERIOD_CURRENT, 14, i);
double stop = atr*ATRmultSL/Point;
double lots = calcLots(stop);
double upper = vwap[i] + K*stdv[i];
double lower = vwap[i] - K*stdv[i];
// 簡易シグナル(順張り)
if(Close[i] > vwap[i] && Volume[i] > iMAOnArray(Volume,0,20,0,MODE_SMA, i)){
// 買い条件:VWAP上抜け+出来高増
// 実売買は成行/指値の選択やフィルターを追加すること
// OrderSend(...);
}
// 簡易シグナル(回帰)
if(Close[i] > upper){
// 売り逆張り候補
} else if(Close[i] < lower){
// 買い逆張り候補
}
return(0);
}
//+------------------------------------------------------------------+
よくある失敗と対策
- 出来高を見ない:ブレイクは必ず出来高で裏付け。ティックでも相対比較可。
- 時間帯無視:FXのアジア午後・米国祝日はフェイクが多い。見送る勇気を。
- 損切り遅延:初期ストップは絶対厳守。建値ストップ移行の基準を事前に紙に書く。
- 過剰最適化:kやATR係数はウォークフォワードで検証。
チェックリスト(運用前)
- 対象市場ごとにVWAP・σ・ATRの計算検証が済んでいるか。
- 1トレード1%リスク、デイリー3%上限の設定がMF/証券口座で実装されているか。
- 時間帯フィルター(株:前場、FX:LDN/NY、仮想通貨:イベント除外)が効いているか。
- 手数料・スリッページ仮定が実運用に近いか。
まとめ
VWAPは「市場の平均コスト」に収れんする性質と、機関投資家の執行ベンチマークという背景により、初心者でもロジック化しやすい骨格を提供します。ブレイクと回帰、AVWAPという3本柱を、出来高・時間帯・リスク管理・トレーリングの4点で統率すれば、勝率50%未満でも損小利大で資産曲線を右肩上がりにしやすい構造を作れます。まずは小さなロットで検証し、手数料・滑り・清算動向を織り込んだ上で段階的にスケールしてください。
コメント