mql5 off-quotesの原因と解決方法|注文エラー対策

目次

1. mql5 off-quotesとは何か

【結論】
mql5のoff-quotesとは、注文時に価格(Bid/Ask)が取得できず、約定処理が失敗するエラーです。主に価格更新の遅延や流動性不足、通信問題が原因で発生します。

【定義】
off-quotesは、トレードサーバーが有効な価格を返せない状態で注文が拒否される現象を指します(executionエラーの一種)。


1.1 off-quotesの基本的な意味

off-quotesは、EAや手動注文において「注文は送信されたが、約定可能な価格が存在しない」場合に発生します。
つまり、注文条件(price・slippage許容)と市場価格が一致しない状態です。

重要ポイント:

  • 注文は正常に送信されている
  • しかし価格が合わず約定できない
  • 結果としてエラーが返る

特に以下の条件で起きやすくなります:

  • 急激な価格変動(高ボラティリティ)
  • スプレッド拡大(spread widening)
  • 通信遅延(latency)

1.2 発生するタイミング

off-quotesは主に「注文実行時」に発生します。
具体的には以下のようなケースです。

  • OrderSend実行時(成行注文)
  • 指値・逆指値の発動時
  • EAが高速で連続注文する場面
  • 指標発表などの急変動時

例(MQL5):

MqlTradeRequest request;
MqlTradeResult result;

request.action   = TRADE_ACTION_DEAL;
request.symbol   = _Symbol;
request.volume   = 0.1;
request.type     = ORDER_TYPE_BUY;
request.price    = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
request.deviation= 5; // スリッページ許容

OrderSend(request, result);

if(result.retcode == TRADE_RETCODE_OFF_QUOTES)
{
   Print("off-quotesエラー発生");
}

ポイント:

  • priceは取得できていても「古い価格」の可能性がある
  • deviationが小さいとエラーになりやすい

1.3 関連エラーとの違い

off-quotesは似たエラーと混同されやすいため、違いを明確にします。

off-quotes vs requote

  • off-quotes:価格そのものが取得できない
  • requote:価格はあるがズレている(再提示される)

off-quotes vs no prices

  • off-quotes:価格更新が間に合っていない
  • no prices:市場データ自体が存在しない(市場停止など)

off-quotes vs slippage

  • off-quotes:注文失敗
  • slippage:注文は成功するが価格がズレる

1.4 初心者が誤解しやすいポイント

よくある誤解:

  • 「EAのバグだ」と思う
    → 実際は市場環境やexecution条件が原因
  • 「ネットが普通なら問題ない」
    → VPSやサーバー距離(レイテンシ)が影響
  • 「スプレッドは関係ない」
    → 拡大すると約定可能価格が消える

1.5 実務上の重要性(なぜ理解が必要か)

off-quotesは単なるエラーではなく、収益性(期待値)に直結する問題です。

理由:

  • 約定できない=機会損失
  • 不安定なexecution=バックテストと乖離
  • PF(プロフィットファクター)低下

特にEA運用では:

  • 約定率(fill rate)
  • スリッページ管理
  • スプレッド制御

がパフォーマンスに大きく影響します。

2. mql5 off-quotesの原因(Why:仕組み理解)

【結論】
off-quotesは、「注文価格・市場価格・通信タイミング」のズレによって、約定可能な価格が存在しないときに発生します。特に「価格更新遅延」「スリッページ制限」「流動性不足」が主要因です。

【定義】
off-quotesの原因は、トレードサーバーが注文条件に一致する価格を見つけられない状態(execution不成立)にあります。


2.1 原因① 価格更新の遅延(Tick未取得)

EAは通常、直近のTick(価格更新)をもとに注文しますが、
価格取得と注文送信の間にタイムラグがあると問題が発生します。

典型パターン:

  • 古いAsk/Bidで注文
  • すでに市場価格が変動
  • 許容範囲外 → off-quotes

コード上の問題例:

double price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
// この後に時間が経過
OrderSend(request, result);

対策の考え方:

  • 注文直前に価格を再取得
  • RefreshRates相当の処理を意識

2.2 原因② スリッページ許容範囲の不足(deviation)

deviation(許容スリッページ)が小さいと、
価格が少しでもズレるだけで約定拒否されるようになります。

例:

  • deviation = 0〜5 → 非常に厳しい
  • 急変動時 → ほぼ約定しない

なぜ起きるか:

  • executionは「指定価格±許容範囲」で成立する
  • 範囲外になると注文が無効

実務ポイント:

  • ボラティリティに応じて調整
  • 固定値ではなく可変も検討

2.3 原因③ スプレッド拡大(spread widening)

スプレッドが広がると、
実質的に約定可能な価格が消える状態になります。

発生しやすいタイミング:

  • 経済指標発表
  • ロールオーバー(NYクローズ付近)
  • 流動性の低い時間帯

例:

  • 通常:spread 1.0 pips
  • 異常時:spread 5.0 pips以上

影響:

  • Ask/Bidの乖離拡大
  • 注文条件が一致しない
  • off-quotes発生

2.4 原因④ ブローカー・流動性構造

MQL5のexecutionは、ブローカーの約定モデルに依存します。

主な構造:

  • ECN/STP:市場直結(流動性依存)
  • DD(ディーリングデスク):内部処理

off-quotesが起きやすいケース:

  • LP(Liquidity Provider)が薄い
  • 約定キューが詰まっている
  • 注文処理が遅延

重要ポイント:

  • 同じEAでもブローカーで発生率が変わる
  • execution品質=収益性に直結

2.5 原因⑤ 通信遅延(VPS・ネットワーク)

通信遅延(latency)が大きいと、
注文時点の価格がすでに無効になっている可能性があります。

典型例:

  • 自宅回線 → サーバー遠い
  • ping 100ms以上
  • その間に価格変動

影響:

  • 古い価格で注文
  • deviation超過
  • off-quotes

改善策:

  • VPS利用(ブローカー近接)
  • 低遅延環境(<10ms推奨)

2.6 原因のまとめ(構造整理)

off-quotesは以下の3要素のズレで発生します:

  • 価格(price):最新でない
  • 条件(deviation / spread):厳しすぎる
  • 時間(latency):遅延がある

この3つが同時にズレると、ほぼ確実に発生します。


2.7 よくある誤解と注意点

誤解:

  • 「価格があるのに注文できない=バグ」
    → 実際はexecution条件の不一致

注意点:

  • バックテストでは再現されにくい
  • 実運用で初めて顕在化する
  • 高頻度EAほど影響が大きい

3. mql5 off-quotesの解決方法(How:手順)

【結論】
off-quotesは、「最新価格の取得・適切なdeviation設定・リトライ処理」の3点を実装することで大幅に回避可能です。

【定義】
解決方法とは、注文条件と市場価格のズレを最小化し、約定成功率(execution成功率)を高める実装・運用手法を指します。


3.1 基本チェック手順(最短でできる対処)

まずは環境・設定レベルで問題を切り分けます。

チェック項目:

  • Market Watchで価格が更新されているか確認
  • トレード時間内か(市場オープン中)
  • スプレッドが異常に広がっていないか
  • 回線・VPSの接続状態(ping)確認

即効性のある対応:

  • MT5再起動(接続リフレッシュ)
  • 別時間帯での再検証(指標回避)

なぜ重要か:
環境要因を除外しないと、EA側の改善効果が正しく評価できないため


3.2 EA側の対策①:最新価格の取得

注文前に必ず「最新Tick」を取得します。

実装例:

double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

改善ポイント:

  • 注文直前に取得する
  • 取得後すぐにOrderSendする

NG例:

  • 価格取得→長いロジック→注文(遅延発生)

理由:
価格はミリ秒単位で変化するため、古い価格は即無効になる


3.3 EA側の対策②:deviation(スリッページ許容)の最適化

deviationは約定成功率に直結します。

推奨設定目安:

  • 通常時:10〜20
  • 高ボラ時:20〜50

実装例:

request.deviation = 20;

注意点:

  • 小さすぎる → off-quotes増加
  • 大きすぎる → 不利な価格で約定(slippage増大)

実務的バランス:

  • 約定率 vs 価格精度のトレードオフ

3.4 EA側の対策③:リトライ処理(最重要)

off-quotesは一時的な問題が多いため、再試行で解決するケースが多いです。

実装例:

int retry = 3;

for(int i=0; i<retry; i++)
{
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

   request.price = ask;

   if(OrderSend(request, result))
   {
      if(result.retcode == TRADE_RETCODE_DONE)
         break;
   }

   if(result.retcode == TRADE_RETCODE_OFF_QUOTES)
   {
      Sleep(500); // 少し待つ
      continue;
   }
}

ポイント:

  • リトライ回数:2〜5回が現実的
  • Sleepで市場の安定を待つ
  • 無限ループは絶対に避ける

3.5 EA側の対策④:スプレッドフィルター

スプレッドが異常なときは、そもそも注文しない判断が重要です。

実装例:

double spread = (SymbolInfoDouble(_Symbol, SYMBOL_ASK) -
                 SymbolInfoDouble(_Symbol, SYMBOL_BID)) / _Point;

if(spread > 30) // 30ポイント以上は回避
{
   return;
}

理由:

  • 約定しても不利になる
  • off-quotes発生率も上がる

3.6 環境側の対策(VPS・ブローカー)

EAだけでなく環境改善も重要です。

推奨:

  • VPS利用(ブローカーサーバー近接)
  • ping 10ms以下を目安
  • execution品質の高いブローカー選定

比較視点:

  • 同じEAでも結果が変わる
  • 約定率=パフォーマンス

3.7 実務用チェックリスト(再利用用)

off-quotes対策チェック:

  • 最新価格を注文直前に取得している
  • deviationを適切に設定している
  • リトライ処理を実装している
  • スプレッドフィルターがある
  • VPSで低遅延環境を確保している

3.8 よくある失敗と注意点

失敗例:

  • deviation = 0(ほぼ確実に失敗)
  • リトライなし(単発注文)
  • スプレッド無視
  • ログ未確認(原因不明のまま運用)

注意点:

  • リトライしすぎると逆に不利な約定になる
  • 高頻度EAほど設計精度が重要

4. off-quotesと他エラーの比較(vs 他手法)

【結論】
off-quotesは「価格が成立しないエラー」であり、requote(価格再提示)やno prices(価格なし)とは原因も対策も異なります。エラー種別ごとに対処法を変えることが重要です。

【定義】
エラー比較とは、各executionエラーの発生条件・挙動・対策の違いを整理し、適切な対応を判断できる状態にすることです。


4.1 エラー比較一覧(全体像)

エラー主な原因発生タイミング挙動主な対策
off-quotes価格取得不可・条件不一致注文時約定失敗価格再取得・リトライ
requote価格ズレ(slippage超過)約定直前新価格提示deviation拡大
no prices価格データなし市場停止時注文不可接続・市場確認

4.2 off-quotesとrequoteの違い

両者は最も混同されやすいエラーです。

違いの本質:

  • off-quotes:価格が存在しない(execution不可)
  • requote:価格はあるが条件外(再提示)

具体的な挙動:

  • off-quotes → 注文拒否(終了)
  • requote → 新しい価格が提示される

実務上の判断:

  • off-quotes → リトライ or 条件緩和
  • requote → deviation調整で対応可能

4.3 off-quotesとno pricesの違い

no pricesは市場そのものが停止している状態です。

違い:

  • off-quotes:価格は動いているが一致しない
  • no prices:価格データがそもそも存在しない

発生シーン:

  • off-quotes → 指標時・高ボラ時
  • no prices → 週末・祝日・市場クローズ

重要ポイント:

  • no pricesでは何をしても約定しない
  • off-quotesは条件改善で解決可能

4.4 off-quotesとslippageの違い

slippageはエラーではなく「約定結果のズレ」です。

違い:

  • off-quotes → 約定失敗(取引なし)
  • slippage → 約定成功(価格がズレる)

関係性:

  • deviationを広げると
    • off-quotes ↓(減る)
    • slippage ↑(増える)

つまり:
約定率と価格精度はトレードオフ


4.5 実務での使い分け(判断基準)

エラー別の対応方針:

  • off-quotes
    • 最新価格取得
    • リトライ
    • スプレッド制御
  • requote
    • deviation拡大
    • execution許容範囲の調整
  • no prices
    • 取引停止
    • 市場時間チェック

4.6 よくある誤解と注意点

誤解:

  • 「全部同じエラーとして扱う」
    → 対応がズレると改善しない
  • 「requoteとoff-quotesは同じ」
    → 実際は原因も対策も別

注意点:

  • ログ(result.retcode)を必ず確認
  • エラーごとに分岐処理を実装する

例:

if(result.retcode == TRADE_RETCODE_OFF_QUOTES)
{
   // リトライ処理
}
else if(result.retcode == TRADE_RETCODE_REQUOTE)
{
   // deviation調整
}

4.7 比較まとめ(重要ポイント)

  • off-quotes:価格が成立しない → リトライ
  • requote:価格がズレる → 許容拡大
  • no prices:市場停止 → 待つしかない

5. よくある失敗と注意点

【結論】
off-quotesの多くは、「設定ミス・設計不足・環境軽視」の3つが原因です。特にdeviation未設定・リトライ未実装・スプレッド無視は典型的な失敗です。

【定義】
ここでいう失敗とは、本来回避できるoff-quotesを、設計や運用の不備で発生させてしまう状態を指します。


5.1 deviation設定ミス(最も多い)

最も多い原因が「スリッページ許容の不足」です。

典型例:

  • deviation = 0〜5
  • 高ボラ時に注文
    → ほぼ確実にoff-quotes

問題の本質:

  • execution条件が厳しすぎる
  • 現実の市場に合っていない

改善策:

  • 最低でも10〜20は設定
  • 通貨ペア・時間帯で調整

5.2 最新価格を取得していない

よくあるコードミス:

  • 価格取得後に長い処理
  • そのままOrderSend

NG例:

double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

// ロジック処理(数百ms)

OrderSend(request, result);

問題点:

  • 価格がすでに古い
  • deviation範囲外になる

改善:

  • 注文直前に再取得
  • 不要な処理を挟まない

5.3 リトライ処理を実装していない

初心者に多いのが「1回だけ注文する設計」です。

問題:

  • off-quotesは一時的なケースが多い
  • 1回失敗=機会損失

改善:

  • 2〜5回のリトライ実装
  • 適度な待機(Sleep)

注意:

  • 無限ループは禁止
  • 過剰リトライは逆効果

5.4 スプレッドを無視している

スプレッドは約定可否に直結します。

典型的な失敗:

  • spreadチェックなし
  • 指標時にそのまま注文

結果:

  • off-quotes増加
  • 不利な約定(slippage)

改善:

  • スプレッド上限を設定
  • 異常時は取引停止

5.5 市場時間を考慮していない

見落としがちなポイントです。

発生ケース:

  • 市場クローズ直前
  • ロールオーバー時間

問題:

  • 流動性低下
  • 価格が不安定

対策:

  • トレード時間フィルター導入
  • 時間帯による制御

5.6 通信・VPSを軽視している

環境要因も重要です。

失敗例:

  • 自宅回線で運用
  • 高ping(100ms以上)

影響:

  • 価格遅延
  • execution失敗

改善:

  • VPS導入(低レイテンシ)
  • ブローカー近接サーバー

5.7 ログを確認していない

意外と多い致命的ミスです。

問題:

  • エラー原因が不明
  • 改善できない

対策:

  • result.retcodeを必ず確認
  • ログ出力を実装

例:

Print("Error code: ", result.retcode);

5.8 実務での重要ポイント(再発防止)

off-quotes対策の本質は以下です:

  • 約定率(execution)を最適化する
  • 市場環境に合わせる
  • EAとインフラを一体で設計する

特に重要:

  • 「理想の価格」ではなく「現実の市場」に合わせる

5.9 よくある誤解まとめ

  • 「EAのロジックが正しければ問題ない」
    → executionが悪ければ利益は出ない
  • 「バックテストで問題ない」
    → 実運用では全く別問題
  • 「ブローカーはどこでも同じ」
    → 約定品質は大きく異なる

6. 実務での使いどころ(EA運用視点)

【結論】
off-quotes対策は単なるエラー回避ではなく、約定率(fill rate)を最適化し、EAの期待値・収益性を安定させるための中核設計要素です。

【定義】
実務での使いどころとは、execution(約定品質)を設計に組み込み、戦略パフォーマンス(PF・DD)に反映させる運用設計を指します。


6.1 EA設計における位置づけ

off-quotesは「例外処理」ではなく、前提条件として設計に組み込むべき要素です。

影響範囲:

  • 約定率(fill rate)
  • エントリー精度
  • バックテストとの乖離

構造的理解:

  • シグナル(entry logic)だけでは利益は出ない
  • execution(約定)が成立して初めて収益になる

重要ポイント:

  • ロジック精度 × 約定品質 = 実運用パフォーマンス

6.2 PF(プロフィットファクター)への影響

off-quotesは直接的にPFへ影響します。

影響メカニズム:

  • 利益トレード → 約定できない(機会損失)
  • 損失トレード → 約定される(偏り発生)

結果:

  • PF低下
  • 戦略の歪み

例:

  • 理論PF:1.5
  • 実運用PF:1.2以下

理由:

  • 良い条件のトレードほど約定しにくい傾向

6.3 DD(ドローダウン)との関係

off-quotesはDDにも影響します。

発生パターン:

  • 利益機会を逃す
  • 損失トレードは実行される
    → DD増加

特に危険:

  • 高頻度EA(スキャルピング)
  • 指標トレード

対策:

  • 約定率の安定化
  • execution前提の設計

6.4 スリッページとのトレードオフ

重要な実務判断:

  • deviationを広げる
    • 約定率↑
    • slippage↑
  • deviationを狭める
    • 約定率↓
    • slippage↓

結論:
最適解は「戦略ごとに異なる」

例:

  • スキャルピング → 厳しめ
  • スイング → 緩め

6.5 推奨EA設計パターン

実務で有効な構成:

基本構成

  • 最新価格取得
  • deviation設定
  • リトライ処理
  • スプレッドフィルター

拡張(中級者向け)

  • ボラティリティ連動deviation
  • 時間帯フィルター
  • executionログ分析

6.6 環境設計(インフラ戦略)

EAだけでなくインフラも重要です。

最適構成:

  • VPS(ブローカー近接)
  • 低レイテンシ(<10ms)
  • execution品質の高いブローカー

重要ポイント:

  • 同じEAでも結果が変わる
  • インフラ=戦略の一部

6.7 実務チェックリスト(運用前確認)

運用前に必ず確認:

  • 約定率(ログ分析済み)
  • off-quotes発生率
  • スプレッド条件設定
  • deviation最適化
  • VPS稼働確認

6.8 よくある失敗(実務編)

失敗例:

  • ロジックだけ最適化
  • executionを無視
  • ブローカー差を考慮しない

結果:

  • バックテストと乖離
  • 実運用で崩壊

6.9 実務まとめ(重要ポイント)

  • 約定品質は戦略の一部
  • off-quotesは「制御すべき変数」
  • execution設計で収益は変わる

7. FAQ(よくある質問)

【結論】
off-quotesは「市場・設定・環境」の組み合わせで発生するため、原因ごとに対処を切り分けることが最短解決です

【定義】
FAQでは、実務で頻出する疑問に対して、短く再利用可能な回答を提示する形式で整理します。


7.1 off-quotesはバグですか?

いいえ、バグではありません。
市場価格・スリッページ条件・通信遅延が一致しないことで発生する正常なexecutionエラーです。


7.2 deviationはどれくらいが適切ですか?

一般的な目安は以下です:

  • 通常時:10〜20
  • 高ボラ時:20〜50

ただし、通貨ペアや戦略(スキャル・スイング)によって最適値は変わります。


7.3 VPSを使えば必ず解決しますか?

多くの場合は改善しますが、完全には防げません。
通信遅延(latency)は減るが、流動性やスプレッドの問題は残るためです。


7.4 指標時にoff-quotesが増えるのはなぜですか?

主な理由は以下です:

  • 価格変動が急激(高ボラティリティ)
  • スプレッドが拡大
  • 流動性が一時的に低下

結果として、約定可能な価格が存在しなくなるためです。


7.5 リトライは何回までが適切ですか?

一般的には2〜5回程度が現実的です。

理由:

  • 少なすぎる → 約定機会損失
  • 多すぎる → 不利な約定や過剰トレード

7.6 スプレッドはどの程度影響しますか?

非常に大きく影響します。
スプレッド拡大=約定可能価格の消失につながるため、off-quotes発生率が上がります。


7.7 MT4とMT5で違いはありますか?

基本的な概念は同じですが、
MT5の方がexecution処理が厳密でエラーが明確に返る傾向があります。


7.8 バックテストでoff-quotesが出ないのはなぜですか?

バックテストは理想的な約定を前提としているためです。
実際の通信遅延・流動性・スプレッド変動が再現されないため、実運用と乖離が生じます。

8. まとめ

【結論】
mql5のoff-quotesは、価格・条件・時間のズレによる約定失敗エラーであり、
「最新価格取得・deviation最適化・リトライ実装」で実務的にコントロールできます。


8.1 本記事の要点

  • off-quotes=価格が成立せず注文失敗するエラー
  • 主因は「遅延・スプレッド・流動性」
  • 対策は「価格更新+許容範囲+再試行」

8.2 実務での最重要ポイント

  • 約定率(execution)は収益に直結する
  • ロジックだけでなくインフラも重要
  • スリッページと約定率はトレードオフ

8.3 再発防止のチェックリスト

  • 注文直前に最新価格を取得している
  • deviationを適切に設定している
  • リトライ処理を実装している
  • スプレッドフィルターがある
  • VPSで低遅延環境を確保している

8.4 検索意図の回収(解決・理解・比較)

  • 解決:具体的な対処手順を提示
  • 理解:発生構造(execution)を整理
  • 比較:requote・no pricesとの違いを明確化

8.5 最終結論(重要)

off-quotesは避けられないエラーではなく、
設計・設定・環境でコントロール可能な変数です。