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は避けられないエラーではなく、
設計・設定・環境でコントロール可能な変数です。