海外FX業者の比較記事を眺めていると、かなりの確率で「ストップレベル0」という表記に出会うんですよね。損切りや利確を建値のすぐ近くに置けますよ、という意味で、スキャルピング派にはたしかに嬉しい話に見えます。
ただ、私はこの「0」をしばらく誤解していたんですよ。0なら発表の瞬間でも好きな場所にSLを置けて、しかもその価格で切ってもらえる——くらいに思っていました。ぶっちゃけ、そこが一番あやしいところだったんですけど。
というわけで今回は、MT5の開発元であるMetaQuotesの公式リファレンスに当たって、「ストップレベル0は何を保証していて、何を保証していないのか」を定義の側から整理してみました。業者の宣伝文句ではなく、プラットフォームの仕様書のほうから見る、という話です。
まず公式の定義を3つ並べてみる
MT5には銘柄ごとのプロパティがずらっと定義されていて、今回関係するのはこの3つなんですよね。公式リファレンスの原文(英語)と、その訳を並べるとこうなります。
| プロパティ | 公式の定義(原文) | 要するに |
|---|---|---|
| SYMBOL_TRADE_STOPS_LEVEL (ストップレベル) |
Minimal indention in points from the current close price to place Stop orders | 現在の終値から最低これだけ離せ、というポイント数 |
| SYMBOL_TRADE_FREEZE_LEVEL (フリーズレベル) |
Distance to freeze trade operations in points | 取引操作が凍結される距離(ポイント数) |
| SYMBOL_SPREAD / SYMBOL_SPREAD_FLOAT | Spread value in points / Indication of a floating spread | スプレッドも同じ「ポイント」単位。しかも変動する前提で定義されている |
ここでもう1個ポイントがあって、ストップレベルの基準は「あなたの建値」ではなく「現在の終値」です。つまり0かどうかは、注文を出したその瞬間の価格に対して毎回判定されるんですよ。一度通った置き方が、次の瞬間も通る保証はないわけです。
POINT
ストップレベルとスプレッドは、公式リファレンス上どちらも「ポイント」という同じ単位で定義されています。つまり直接比べられるんですよね。そしてストップレベルが固定値として申告されるのに対し、スプレッドのほうは最初から「変動しうるもの」として定義されています。
発見1: 公式サンプルは「0」を「100ポイント」と同じ扱いにしている
一番おもしろかったのがこれなんですよ。MQL5の公式リファレンスには、SL/TPを変更する処理のサンプルコードが載っているんですけど、そこにこういう分岐が書いてあります。
if(stop_level <= 0) stop_level = 150; / else stop_level += 50;
訳すと「ストップレベルが0以下だったら150ポイントということにする。0でなければ申告値に50ポイント足す(念のため)」です。つまりプラットフォームを作っている当人のサンプルコードが、0という申告を0として使っていないんですよね。
これを申告値ごとに表にしてみたら、ちょっと笑ってしまいました。
| 業者の申告値 | 公式サンプルが実際に空ける距離 | pips換算 | ドル円1ロットなら |
|---|---|---|---|
| 0ポイント | 150ポイント | 15.0pips | 15,000円 |
| 10ポイント | 60ポイント | 6.0pips | 6,000円 |
| 30ポイント | 80ポイント | 8.0pips | 8,000円 |
| 50ポイント | 100ポイント | 10.0pips | 10,000円 |
| 100ポイント | 150ポイント | 15.0pips | 15,000円 |
| 200ポイント | 250ポイント | 25.0pips | 25,000円 |
見ての通りで、申告0と申告100ポイントが、まったく同じ150ポイントに着地します。公式サンプルの世界では「0」は「制限なし」ではなく「10pips分くらいの制限があるかもしれない未知の値」として扱われている、ということなんですよね。
これ、業者を疑えという話ではまったくなくて、0という値が「制限なし」なのか「未設定」なのかをAPIの返り値だけでは区別できない、という仕様の話なんですよ。だから作った側は安全側に倒している、というだけです。
発見2: 0でも消えない床がある。それがスプレッド
ここが実務的には一番効いてくる話だと思います。公式サンプルをよく読むと、買いポジションのSLはbidから引いて計算されているんですよ(売りならaskに足す)。要するに決済する側の価格が基準なんですよね。
で、買いポジションはaskで建ってbidで決済されるわけです。ということは、「建値から10pips下」のつもりでSLを置いても、建値から見た実際の距離は10pips + スプレッドになるんですよ。ストップレベルが0でも、ここは1ミリも変わりません。
どれくらい変わるのか、ドル円1ロット(10万通貨)で計算してみました。
| そのときのスプレッド | 建値からの実距離 | 損切り時の金額 | 想定との差 |
|---|---|---|---|
| 0.2pips | 10.2pips | 10,200円 | +200円(1.02倍) |
| 1.0pips | 11.0pips | 11,000円 | +1,000円(1.10倍) |
| 2.0pips | 12.0pips | 12,000円 | +2,000円(1.20倍) |
| 5.0pips | 15.0pips | 15,000円 | +5,000円(1.50倍) |
| 10.0pips | 20.0pips | 20,000円 | +10,000円(2.00倍) |
平常時の0.2pipsなら誤差みたいなものなんですけど、指標発表でスプレッドが広がった瞬間だけ話が変わります。スプレッドが5pipsまで広がれば、同じ10pipsのSLが実質15pips分の損失になります。
しかもSLが短いほど比率で効いてきます。私の手元の計算だと、指定3pipsのSLにスプレッド2pipsが乗ると実距離は5pips、つまり+67%。指定50pipsなら同じ2pipsでも+4%にしかなりません。スキャルピングで損切りを詰めている人ほど、この「床」の影響を強く受けるという構図なんですよね。
注意
この記事の金額はすべて「1ロット=10万通貨・3桁/5桁表示(10ポイント=1pips)」という前提の机上計算です。円換算にはFRBのH.10統計(2026年10月23日分、1ドル=156.87円)を使っています。実際の数値は口座タイプ・銘柄・業者によって変わるので、必ずご自身の環境でご確認ください。
発見3: 「フリーズレベル」はストップレベルとは別のプロパティ
ここも誤解しやすいところなんですけど、ストップレベルが0でも、フリーズレベルが0とは限らないんですよ。公式リファレンス上、この2つは完全に別のプロパティとして定義されています。
正直に書いておくと、フリーズレベルの公式定義は「Distance to freeze trade operations in points」のたった一行だけで、「何がどう凍結されるのか」は書かれていません。読み取れるのは、サーバーの戻り値にTRADE_RETCODE_FROZEN(10029)「Order or position frozen」という専用コードが用意されている、というところまでです。
なので以下は「仮にSLの手前Fポイントが操作できなくなるとしたら」という条件付きの試算として読んでください。SL距離のうち何割が触れなくなるか、を出してみました。
| SL距離\フリーズレベル | 20ポイント | 50ポイント | 100ポイント | 200ポイント |
|---|---|---|---|---|
| 3pips | 67% | 100% | 100% | 100% |
| 5pips | 40% | 100% | 100% | 100% |
| 10pips | 20% | 50% | 100% | 100% |
| 20pips | 10% | 25% | 50% | 100% |
| 50pips | 4% | 10% | 20% | 40% |
100%というのは、置いた瞬間からそのSLは一度も動かせない計算になる、という意味です。試した30通りのうち9通りがこれに当たりました。SLを詰めれば詰めるほど、フリーズ幅に丸ごと飲み込まれやすくなるんですよね。
考えてみると、ストップを動かしたくなるのって「価格がSLに近づいてきたとき」じゃないですか。ところがフリーズレベルが効くのも、まさにその距離なんですよ。一番操作したい局面と、一番操作できない局面が重なっている。ここはストップレベル0では一切カバーされません。
発見4: 「置けること」と「その価格で約定すること」は別の話
最後にもう一段あります。ストップレベルは注文を受け付けるかどうかの判定であって、いくらで約定するかの話ではないんですよね。
公式リファレンスの約定方式の定義を読むと、Market Execution(成行約定)についてこう書いてあります。「A broker makes a decision about the order execution price without any additional discussion with the trader. Sending the order in such a mode means advance consent to its execution at this price.」
訳すと「業者がトレーダーと相談することなく約定価格を決める。この方式で注文を出すということは、その価格での約定にあらかじめ同意しているということ」です。けっこうはっきり書いてあるんですよ。
あと、ストップレベルが0の口座でも、こういうエラーコードは普通に残ります。公式の一覧から関係しそうなものを抜くとこうなります。
10016 TRADE_RETCODE_INVALID_STOPS— Invalid stops in the request(判定は常に「現在の価格」に対して行われるので、0でも起きえます)10020 TRADE_RETCODE_PRICE_CHANGED— Prices changed10021 TRADE_RETCODE_PRICE_OFF— There are no quotes to process the request(処理するための気配値が無い)10004 TRADE_RETCODE_REQUOTE— Requote10029 TRADE_RETCODE_FROZEN— Order or position frozen
「ストップレベル0」が消してくれるのは、このうち10016の一部だけなんですよね。残りは全部そのまま残ります。
じゃあ自分の口座ではどう確認すればいいのか
ここまで公式仕様の話をしてきましたけど、実際の数値は業者と銘柄ごとに違います。そして今回の調べ物でひとつ分かったのは、業者ごとのストップレベル一覧みたいなものを外から確認する手段は基本的に無い、ということなんですよ。銘柄仕様はMT4/MT5の中にしか無いので。
なので確認手順はシンプルで、こうなります。
- MT5の気配値表示で対象銘柄を右クリックし、「仕様」を開く
- 「ストップレベル」と「フリーズレベル」の両方を見る(ここを見落としがちなんですよね)
- 単位がポイントなので10で割ってpipsに直す
- デモ口座でもいいので、指標発表の時間帯にスプレッドが実際どこまで広がるかを数回メモしておく
私は一度、主要な銘柄の仕様画面をスプレッドシートに書き出してみたことがあるんですけど、同じ業者でも銘柄によって値がバラバラで、なかなか発見がありました。3分くらいで終わるので、口座を開けたタイミングで一度やっておくと後がラクだと思います。
約定方式やスプレッドの出方を重視するならExnessあたりは選択肢に入りやすいと思いますが、最新の条件は必ず公式サイトとご自身の口座の「仕様」画面で確認してください。この手の数値は予告なく変わるので、記事の数字を鵜呑みにしないのが一番安全なんですよね。
FX取引はレバレッジを用いた取引であり、預けた資金(元本)を上回る損失が生じる可能性があります。本記事は情報提供を目的としたものであり、投資を勧誘するものではありません。取引を行う際は自己責任・余裕資金の範囲で行い、各社公式サイトで最新のリスク説明書・規約を必ずご確認ください。
まとめ
「ストップレベル0」が保証しているのは「現在の価格のすぐ近くにSL/TPを置く注文が受け付けられる」ことだけで、それ以上でも以下でもないんですよね。整理するとこうなります。
- 0でも建値からの実距離はスプレッド分広がる。SLが短いほど比率で効く(指定3pipsにスプレッド2pipsで+67%)
- フリーズレベルは別プロパティ。SLを詰めるほど「動かせない区間」に丸ごと入りやすくなる
- 約定価格は別の話。Market Executionは公式定義からして「事前同意」と書かれている
- MT5の開発元の公式サンプルですら、申告0を100ポイント相当として扱っている
初心者の方へ: ストップレベル0の業者を選ぶこと自体は悪くないんですけど、「0だから発表時も安心」ではないです。発表をまたぐなら、SLの距離はそのときのスプレッドを足した上で決めるクセをつけるのがいいと思います。
中上級者の方へ: 損切りを数pipsまで詰める設計をしているなら、ストップレベルよりフリーズレベルのほうが先に効いてくる可能性があります。上の表で自分の設計が何%の区間に入るか、一度当ててみる価値はあると思いますよ。
