ダークプールと注文フローの実践入門:板・VWAP・スプレッドから掴む高勝率エントリー

デイトレード
本稿は、株式・CFD・FXに共通する注文フロー(Order Flow)の読み方を、初心者でも再現可能な形に抽象化し、板・VWAP・スプレッドという3つの観測指標で高勝率エントリーを組み立てる方法を体系化した実践ガイドです。ニュースや勘に頼らず、目の前の流動性と約定の推移から「いま、どちらに押されているか」を定量的に判断します。

具体的には次の順で解説します。①市場マイクロストラクチャの要点、②主要指標(板・VWAP・スプレッド・出来高)の意味、③3つの再現手法(VWAPリクレーム/スプレッド・スクイーズ/アイスバーグ検知)、④実務のリスク管理と運用ルーチン、⑤バックテストと取引日誌の作り方、⑥MQL4による簡易EA(自動売買)のサンプルです。

スポンサーリンク
【DMM FX】入金

1. なぜ「注文フロー」を読むと勝率が上がるのか

値動きは究極的に成行と指値の衝突で決まります。ファンダメンタルズや金利、ニュースは「どちらに突っ込む成行が増えるか」を通じて初めて価格に反映されます。したがって短期売買では、直近の成行圧力受け止める指値の厚みに着目するだけで、材料の解釈を介さずに優位性(エッジ)を得られます。

特に個人投資家が戦いやすいのは、①寄付き〜前場前半の方向付け、②重要節(VWAP・直近高安・日足の支点)での攻防、③スプレッドと出来高の同時収縮→拡張といった瞬間です。ここでは大口参加者もポジション調整や執行を行うため、テープ(約定連続)と板の崩れ方に癖が出ます。

2. まず押さえる4つの観測指標

2-1. 板情報(Depth)

板は「どの価格にどれだけの待機流動性があるか」を示す供給曲線のスナップショットです。厚い価格帯はスローダウンしやすく、薄い価格帯はスルーしやすい。板は見せ玉やキャンセルも混じるため、崩れ方(取り消しの連鎖)約定の通過速度を同時に追うのがコツです。

2-2. VWAP(出来高加重平均価格)

VWAPは機関投資家の執行ベンチマークです。価格がVWAPを上回って滞留すれば買い優位下回って滞留すれば売り優位と解釈しやすい。寄り後のトレンド転換点でもっとも効きやすい指標のひとつです。

2-3. スプレッド(気配差)

スプレッドは瞬間的な競争度合いを示します。スプレッド縮小+出来高増は「約定競争が激化し、どちらかに抜けやすい」サイン。反対にスプレッド拡大は「休憩・様子見」です。

2-4. 出来高・テープ速度

出来高は確証です。価格の抜けが本物なら、数本連続で平均出来高を上回るのが通例。テープ(約定連続の速度)が速く、同時に板の薄い側が食われるか取消されるなら、短時間のモメンタムと見なせます。

3. ダークプールの基礎(やさしく)

ダークプールは板を公開しない私設取引で、大口が市場インパクトを抑えて約定するために使います。市場外約定そのものは価格形成の参考になりにくいものの、取引所側の板が薄くなる時間帯や価格帯が生まれやすく、結果として上場市場のブレイクやフェイクの確率に影響します。

初心者はダークプールの詳細データを直接追わなくても、取引所側の「板の薄化」+「スプレッドの異常な広がり/急な縮小」といった周辺症状から十分に推測できます。以降のセットアップは、こうした症状を手掛かりに構築します。

4. 3つの再現性あるエントリー手法

4-1. VWAPリクレーム(回復)戦略

狙い:寄付き後の初動でVWAPを一度割り込んだ銘柄が、スプレッド縮小+出来高増を伴ってVWAPを再奪回する瞬間に順張りで乗る。短時間で1~2Rを抜き取り、負けは0.7R以内に抑えます。

条件:①直近5〜15分でVWAP下に滞留、②直近3本で出来高が移動平均(20本)を上回る、③気配スプレッドが直近30分の下位20%に縮小、④直近高値〜VWAP間に板の薄い帯がある。

エントリー:VWAPを明確に上抜け(ヒゲでなく実体)し、直後の押しがVWAP付近で止まったら成行買い。損切りはVWAPを実体で再度割れたら。利食いは直近高値手前で半分、残りはトレーリングで追う。

理由:VWAP近辺はアルゴ執行の集積点。回復+スプレッド縮小は、上方向への成行需要>下方向の指値供給を示すため、短い「推し目の買い」が機能しやすい。

4-2. スプレッド・スクイーズ戦略

狙い板の薄い側に向けて成行が連続し、気配差が一時的に最小化→直近レンジをブレイクする動きに同調。短期のインパルス(衝動)を取ります。

条件:①3〜5分の狭いレンジ、②スプレッドが銘柄平常の下位10〜20%に入り、③レンジ端の反対側板が明らかに薄い、④テープ速度上昇。

エントリー:レンジ上端+最小スプレッドが一致する瞬間に成行買い。損切りはレンジ中央割れ。利食いレンジ幅×1.0〜1.5倍を目安に。

理由:ブレイクの成功確率は「薄い板+速いテープ+狭いスプレッド」が重なるほど急上昇します。条件が揃うまで徹底的に待つのが肝です。

4-3. アイスバーグ(隠れ板)検知戦略

狙い:同一価格で小口約定が何十回も続くのに、板表示数量が減らない/すぐ回復する場合、アイスバーグ指値の可能性。これに成行がぶつかり続けて「吸収→転換」する瞬間を狙います。

条件:①同一価格での反復約定、②板数量が減っても即座に補充、③その直下(買い)または直上(売り)の板が薄い。

エントリー:買いならアイスバーグ上抜けの直後、売りなら下抜け直後。損切りは再度その価格帯に潜る実体足。利食いは直近の密集板帯で。

理由:大口の執行完了後は反対方向に軽くなるため、短期の伸びが狙えます。

5. 銘柄選定と時間帯のクセ

日中の全銘柄を追うのは非効率です。以下のフィルタで十分戦えます。

  • ギャップ(前日終値比±2〜5%以上)で寄り付く銘柄
  • 寄付き30分で出来高上位の銘柄
  • ニュース・決算・指数入替などイベント当日

時間帯は、寄付き〜前場前半がもっとも手掛かりが多く、後場寄り〜引けはVWAP意識のリバランスが効きやすいです。

6. リスク管理(これだけはルール化)

  1. 1トレードの許容損失=口座残高の0.3〜0.7%。勝率が読めないうちは0.5%固定。
  2. 最低リスクリワード=1:1.3〜1.5。1:1以下は原則スキップ。
  3. 滑り・手数料を前提に、エントリー価格+最小スプレッドの半分を上乗せして期待値計算。
  4. 連敗3回でサイズ半減+休憩。日次ドローダウンが-2%で取引停止

これらは資金を守るための回避義務です。ルールからの逸脱は、バックテストで優位性が証明されるまでは禁止します。

7. 実例シナリオ(数値で手順を確認)

仮想銘柄A、寄付き直後に-3.1%のギャップダウン。寄り後15分で一度VWAPを割り込み、その後、出来高が平均の1.8倍→2.2倍に増加。スプレッドは平常0.08%→0.03%まで縮小。板は上方向が薄く、直近高値とVWAPの間に空洞帯が存在。

ここでVWAPリクレーム戦略を発動。VWAP上抜けの実体確定で成行買い。初期損切りはVWAP-0.15%。利食い1は直近高値手前で1R、利食い2はトレーリング(直近安値-0.2%)。実行結果:平均滑り0.02%、手数料往復0.01%を考慮しても、期待値は+0.24R/トレード。

8. ログとバックテスト(手動でも十分)

最低限、次の7項目を日誌に残します:セットアップ種類、時間、VWAPとの位置、スプレッド水準、出来高倍率、板の薄い方向、結果(R)、学び。10〜20取引で傾向が見えます。

エクセルでは、R = (平均利食い幅 - 平均損切り幅) / 損切り幅期待値 = 勝率×平均勝ちR - 負率×平均負けR を列にして自動集計します。勝率が50%、平均勝ち1.5R、平均負け0.8Rなら、期待値は 0.5*1.5 - 0.5*0.8 = 0.35R です。

9. すぐ動かせるMQL4 EA(簡易版・学習用)

MT4のFX/CFD向けに、日中セッションVWAP(疑似:M1出来高=ティックボリューム)スプレッドを用いた簡易EAサンプルを提示します。学習用としてお使いください。


//+------------------------------------------------------------------+
//|  VWAPBreakoutEA.mq4 (学習用サンプル)                             |
//|  条件: VWAPリクレーム & スプレッド閾値 & 出来高(ティック)増    |
//+------------------------------------------------------------------+
#property strict
input double RiskPerTrade = 0.5;      // 口座残高に対する%
input int    AtrPeriod    = 14;
input double AtrMultSL    = 1.2;
input double AtrMultTP    = 1.6;
input int    VolLookback  = 20;       // 出来高MA
input double VolFactor    = 1.5;      // 出来高閾値
input double MaxSpreadPt  = 25;       // 最大許容スプレッド(ポイント)
datetime day_start = 0;
double   cum_pv = 0, cum_v = 0;

double SessionVWAP()
{
   // 今日のM1バーを走査してVWAP(疑似) = sum(TypicalPrice*Volume) / sum(Volume)
   int bars = iBars(_Symbol, PERIOD_M1);
   datetime today0 = iTime(_Symbol, PERIOD_D1, 0);
   double pv=0, v=0;
   for(int i=0; i<bars; i++)
   {
      datetime t = iTime(_Symbol, PERIOD_M1, i);
      if(t < today0) break;
      double high = iHigh(_Symbol, PERIOD_M1, i);
      double low  = iLow(_Symbol, PERIOD_M1, i);
      double close= iClose(_Symbol, PERIOD_M1, i);
      double tp   = (high+low+close)/3.0;
      double vol  = iVolume(_Symbol, PERIOD_M1, i);
      pv += tp*vol;
      v  += vol;
   }
   if(v==0) return iClose(_Symbol, PERIOD_M1, 0);
   return pv/v;
}

double LotsByRisk(double sl_points)
{
   double risk_money = AccountBalance() * (RiskPerTrade/100.0);
   double tickval = MarketInfo(_Symbol, MODE_TICKVALUE);
   double lotstep = MarketInfo(_Symbol, MODE_LOTSTEP);
   double minlot  = MarketInfo(_Symbol, MODE_MINLOT);
   if(sl_points<=0 || tickval<=0) return minlot;
   double pip_value_per_lot = tickval / MarketInfo(_Symbol, MODE_TICKSIZE);
   double lots = risk_money / (sl_points * pip_value_per_lot);
   // 丸め
   lots = MathFloor(lots/lotstep)*lotstep;
   if(lots < minlot) lots = minlot;
   return lots;
}

bool VolumeOK()
{
   double ma=0;
   for(int i=1;i<=VolLookback;i++) ma += iVolume(_Symbol, PERIOD_M1, i);
   ma /= VolLookback;
   double cur = iVolume(_Symbol, PERIOD_M1, 0);
   return (cur >= ma*VolFactor);
}

int OnInit(){ return(INIT_SUCCEEDED);}

void OnTick()
{
   // スプレッド条件
   double spread_pt = (Ask - Bid)/Point;
   if(spread_pt > MaxSpreadPt) return;

   // VWAP計算
   double vwap = SessionVWAP();
   double price = (Ask+Bid)/2.0;

   // ATRベースSL/TP
   double atr = iATR(_Symbol, PERIOD_M1, AtrPeriod, 0);
   if(atr<=0) return;
   double sl_points = (AtrMultSL*atr)/Point;
   double tp_points = (AtrMultTP*atr)/Point;

   // エントリー条件(買いの例): 直近バーがVWAP上で確定、かつ出来高閾値クリア
   static datetime last_time=0;
   datetime ct = iTime(_Symbol, PERIOD_M1, 0);
   bool newbar = (ct != last_time);
   if(newbar)
   {
      bool prev_below = iClose(_Symbol, PERIOD_M1, 1) < SessionVWAP();
      bool now_above  = iClose(_Symbol, PERIOD_M1, 0) > vwap;
      if(prev_below && now_above && VolumeOK())
      {
         // 既存ポジがなければ新規買い
         if(PositionsTotal()==0 && OrdersTotal()==0)
         {
            double lots = LotsByRisk(sl_points);
            double sl = Bid - sl_points*Point;
            double tp = Ask + tp_points*Point;
            int ticket = OrderSend(_Symbol, OP_BUY, lots, Ask,  sl_points/5, sl, tp, "VWAPBreakoutEA", 0, 0, clrNONE);
         }
      }
      last_time = ct;
   }
}
    

※ 実運用前にストラテジーテスターで検証し、パラメータ(VolFactor, MaxSpreadPt, AtrMultSL/TPなど)を銘柄特性に合わせて調整してください。

10. 失敗パターンと回避策

  • フェイク回復:VWAP越えがヒゲのみで出来高が伴わない → 見送り。
  • 広がるスプレッド:エントリー直後にスプレッド拡大 → 即時縮小しなければ撤退。
  • ニュースバースト:指標や要人発言の直撃帯 → 予定時刻の±3分は新規を避ける。

11. チェックリスト(印刷推奨)

  1. ギャッパー/出来高上位から3〜5銘柄を抽出。
  2. VWAPの位置関係と直近高安の距離を確認。
  3. スプレッドが平常の下位20%にあるか。
  4. 板の薄い方向はどちらか(抜けやすい側)。
  5. 出来高は移動平均の1.5倍以上か。
  6. 損切り幅と利食い候補でRR≥1:1.5を確保できるか。
  7. 連敗・日次DDルールに抵触していないか。

12. まとめ

短期売買での再現性は、条件が揃うまで待つ規律で決まります。本稿のエッセンスは次の3点に凝縮されます。

  • VWAPの回復/割れは「方向付け」の最短手掛かり。
  • スプレッド縮小+出来高増は「直近ブレイクの確率上昇」の合図。
  • 板の薄い帯を背に、RR≥1:1.5で手仕舞い設計。

この3点を機械的に満たす局面だけを繰り返せば、初心者でもゆっくり右肩上がりを現実的に狙えます。明日からは「待つ」ことが最大の武器です。

コメント

タイトルとURLをコピーしました