「滑ってる気がする」を数字にする|自分の約定履歴からスリッページを実測する手順と、中央値を信じていい件数を計算した

本記事はプロモーションを含みます。掲載している海外FX業者のリンクから口座開設等が行われた場合、当サイトが提携先企業から成果報酬を受け取ることがあります。

以前、XS.comの約定まわりの公開情報がどこまで確認できるのか、法定書類を全部ダウンロードして読み込んだことがあるんですよね。結論としては「約定方針の建て付けは読めるけど、実際にどれだけ滑っているかは一切分からない」でした。これ、XSに限った話じゃなくて、どの業者でも同じなんですよ。スプレッドの平均値は出していても、スリッページの分布を公開している海外FX業者はまず無いので。

じゃあ永遠に分からないのかというと、そんなことはないんですよね。自分の口座の約定履歴には、注文を出したときの価格と実際に約定した価格が両方残っています。引き算すればいいだけなんですよ。

というわけで今回は、「なんか滑ってる気がする」を数字に変える手順です。ついでに「何件測れば、その数字を信じていいのか」まで二項分布で計算しました。ここを飛ばすと、だいたい10件くらい見て「やっぱり滑る」と結論しがちなんですけど、それは統計的にはほぼ何も言えていないので。

そもそもスリッページは「何と何の差」なのか

意外とここが曖昧なまま使われている言葉なんですよね。スリッページは「自分が注文として出した価格」と「実際に約定した価格」の差です。それ以上でも以下でもないです。

大事なのは符号の揃え方で、買いと売りで向きが逆になります。集計するときは必ず「不利side をプラス」に統一してください。

方向 計算式 プラスのとき
買い 約定価格 − 注文価格 高く買わされた(不利)
売り 注文価格 − 約定価格 安く売らされた(不利)

ここを揃えずに生の差分を平均すると、買いの不利と売りの不利が打ち消し合って「平均ほぼゼロ、滑ってません」みたいな間違った結論が出ます。実際これ、最初に私がやらかしたミスなんですけど、符号を直した瞬間に数字の見え方が全然変わりました。

注意

スプレッドの拡大とスリッページは別物です。スプレッドは「買値と売値の幅」、スリッページは「出した価格と約定した価格のズレ」。指標発表のときはだいたい両方同時に起きるので混同しやすいんですけど、原因も対処も違うので分けて測ってください。

取引レポートを眺めても、滑りは絶対に出てこない

ここでつまずく人が多いと思うんですよね。普通に取引履歴を眺めても、1件の取引に対して価格は1つしか表示されていません。約定価格だけなんですよ。これだと引き算する相手がいないので、どう頑張っても滑りは出ません。

ただ、MT5なら話が別で、「注文(Order)」と「約定(Deal)」が別々のレコードとして保存されています。注文側に自分が出した価格、約定側に実際に成立した価格が入っていて、両者は注文番号で紐づいている。つまり結合して引き算できるんですよ。

MQL5の公式リファレンスで確認した、実際に使うフィールドがこちらです。

フィールド どこにある 公式の説明 / 用途
ORDER_PRICE_OPEN 注文 “Price specified in the order”(注文で指定された価格)
DEAL_PRICE 約定 “Deal price”(実際に約定した価格)
DEAL_ORDER 約定 “Deal order number”。注文と約定を結合するキー
ORDER_TIME_SETUP_MSC 注文 発注時刻。ミリ秒単位
DEAL_TIME_MSC 約定 約定時刻。ミリ秒単位
ORDER_STATE 注文 FILLED / PARTIAL / REJECTED など
ORDER_VOLUME_INITIAL と ORDER_VOLUME_CURRENT 注文 差があれば部分約定

この表を見て気づいた人もいると思うんですけど、測れるのは滑りだけじゃないんですよ。時刻がミリ秒で残っているので「発注から約定まで何ミリ秒かかったか」も引き算で出ます。さらにORDER_STATEにREJECTEDが入っているので約定拒否の率も、ボリュームの差から部分約定の率も数えられる。約定力の話でよく出てくる3つの論点が、全部自分の履歴から出せるんですよね。

注文価格と約定価格の2列を突き合わせて差分を確認している様子

手順は4つだけ

やることを分解すると、こうなります。

  1. 履歴をCSVに吐く。MT5のスクリプトで、注文と約定を注文番号で結合して1行にして書き出します
  2. pipsに正規化する。価格の差のままだと通貨ペア間で比較できないので
  3. 符号を揃える。さっきの表のとおり、不利をプラスに
  4. 注文種別ごとに分けて集計する。ここが一番大事です

②のpips換算にはちょっとしたコツがあって、「1pip = 1point」ではありません。表示桁数が3桁か5桁の業者だと1pipは10pointなんですよ。なのでdigitsが3か5ならpoint × 10、2か4ならそのまま、という判定を入れておきます。ここを間違えると数字が丸ごと10倍ズレます。

④は見落としやすいんですけど、成行・指値・逆指値を混ぜて集計すると、数字の意味が完全に消えます。というのも、指値は原則として不利には滑らない(むしろ有利側に振れることがある)のに対し、逆指値は構造的に不利側に滑りやすいからです。性質が真逆のものを平均しても、出てくるのはただの中間値なんですよね。

POINT

平均ではなく中央値を主役にしてください。スリッページの分布は、指標発表時の数件が極端に外れ値になりやすいんですよ。平均だとその数件に全部引っ張られて、普段の体感とズレた数字が出ます。私も最初は平均で見ていたんですけど、中央値に変えたら「普段はこれくらい、たまにこれくらい」という二層構造がやっと見えるようになりました。

滑り0.1pipsは、金額にするといくらなのか

pipsのままだと「で、それって損なの?」が分からないので、金額に直しておきます。1ロット=10万通貨として計算しました。

滑り USD/JPY 1ロット EUR/USD 1ロット(1ドル155円換算)
0.1 pips 100円 約155円
0.3 pips 300円 約465円
0.5 pips 500円 約775円
1.0 pips 1,000円 約1,550円
2.0 pips 2,000円 約3,100円

1回あたりで見ると大したことない気がするんですよね。でも、エントリーと決済で2回滑るのを前提に積み上げるとこうなります(USD/JPY・0.1ロット換算)。

月の往復回数 片道0.2pips滑る場合 片道0.5pips滑る場合
20往復 800円 2,000円
50往復 2,000円 5,000円
100往復 4,000円 10,000円
200往復 8,000円 20,000円

スプレッドや手数料は口座タイプを選ぶ時点で比較するのに、滑りは誰も比較しないんですよね。でも回転数が上がるほど、効いてくる構造は手数料とまったく同じなんですよ。月100往復するなら、片道0.3pipsの差は手数料を1つ上のグレードに変えるのと同じインパクトがあります。

で、何件測れば中央値を信じていいのか

ここが今回いちばん書きたかったところなんですけど、10件や20件測って出した中央値は、ほとんど何も言っていません。感覚の話じゃなくて、計算で出ます。

中央値の信頼区間は、順位統計量と二項分布から厳密に求められます。n件を小さい順に並べたとき、本当の中央値が95%の確率で入っている順位の範囲がこれです。

測った件数 95%区間になる順位 それは分布のどのあたりか
20件 6番目 〜 15番目 下位29%点 〜 71%点(幅43ポイント)
30件 10番目 〜 21番目 下位32%点 〜 68%点(幅35ポイント)
50件 18番目 〜 33番目 下位35%点 〜 65%点(幅29ポイント)
100件 40番目 〜 61番目 下位40%点 〜 60%点(幅21ポイント)
200件 86番目 〜 115番目 下位43%点 〜 57%点(幅14ポイント)
500件 228番目 〜 273番目 下位46%点 〜 54%点(幅9ポイント)

20件だと「本当の中央値は、分布の下から3割の場所から7割の場所までのどこかにあります」としか言えないんですよ。これ、ほぼ情報ゼロですよね。実用的には最低50件、できれば100件というのが、この表から読み取れる線引きだと思います。

そしてここから、わりと残酷な結論が出てきます。「時間帯別に滑りを比較する」のは、想像よりずっと件数を食います。24時間を1時間刻みに割って各バケットに100件入れようとしたら、合計2,400件の約定が必要なんですよ。普通のトレーダーには現実的じゃないです。

なので私は、時間帯は東京・欧州・NY・深夜の4つに丸めることにしました。これなら合計400件くらいで各バケットが100件に届くので、まだ手が届く範囲なんですよね。

複数のタイムゾーンを示す時計とストップウォッチ

「偏っている」と言い切るのに必要な本数

もうひとつ計算しておきたいのが、滑りの向きです。純粋に回線や処理の遅れで滑っているだけなら、不利方向と有利方向がだいたい半々になるはずなんですよね。片側に偏っているなら、それは遅延ではなく実質的なコストです。

これは符号検定(片側5%)で判定できます。不利方向が何本出たら「偶然の50:50では説明できない」と言えるのか、計算したのがこちらです。

測った件数 必要な不利本数 割合
20件 15本 75%
30件 20本 66.7%
50件 32本 64.0%
100件 59本 59.0%
200件 113本 56.5%

20件しかないと、4回に3回が不利方向でようやく「偏っている」と言えるんですよ。裏を返すと、20件で「7割が不利だった」くらいでは偶然の範囲ということなんですよね。ここ、わりと直感と違うと思います。

ちなみに集計するときは、滑りがちょうど0の約定は符号検定から外してください。0には向きが無いので、入れると分母だけ増えて検出力が落ちます。

実際に集計スクリプトをダミーデータで動かしてみたら、この効果がきれいに出ました。全体120件では不利方向64%・p値0.0033で「偏りあり」と判定されるのに、同じデータを4セッションに割った途端、件数の多い東京時間以外は3つとも「偏りとは言えない」になるんですよ。元データは1つの同じ分布なのに、割った瞬間に判定できなくなる。件数が効くというのはこういうことなんですよね。

注意

この測定で分かるのは「自分の環境での、自分の注文の結果」だけです。回線品質・端末の場所・VPSの有無・取引している時間帯・注文サイズで値は変わるので、同じ業者でも人によって結果が違って当たり前なんですよ。自分の数字をそのまま業者全体の評価として一般化しないでください。あと、デモ口座の約定は実際の注文処理とは別物なので、測っても意味がありません。

MT4しか使えない場合はどうするか

MT4は注文と約定が分かれていないので、レポートからの引き算は基本的にできないんですよね。やるなら方法は3つくらいです。

  • 指値・逆指値を使う。自分が指定した価格は自分が知っているので、約定価格と比べられます。特に逆指値は滑りが出やすいので、ここだけでも測る価値はあります
  • ターミナルのログを自分で保存しておく。発注時のやり取りが残るので、後から突き合わせられます
  • MT5口座を併用する。いちばん手っ取り早いです。測定目的だけなら小さいロットで十分なので

正直、滑りをちゃんと測りたいならMT5に寄せるのが早いと思います。表示まわりはビルドによって変わることがあるので、列名は自分の環境で一度確認してみてくださいね。

測ったあとに、業者をどう見るか

数字が出たあと、どう使うかの話もしておきます。いちばん有効なのは「同じ戦略を、2社で同時に回して比べる」なんですよね。相場の荒れ方は両方に等しくかかるので、差分が業者側の違いとして出てきます。

比較用の2社目を選ぶときの条件は、わりとはっきりしていて、

  • ミリ秒単位の時刻が残るプラットフォーム(つまりMT5)が使えること
  • 約定方針や注文執行のルールが文書として公開されていること
  • 小さいロットで検証できる口座タイプがあること

このあたりです。XS.comは法定書類として約定方針書と顧客約款をPDFで公開していて、注文がどう扱われるかの建て付けを事前に読めるようになっているんですよね。前に全文を読んだときも、約定要素の優先順位や部分約定の扱いまで書いてありました。もちろん書いてある内容と実際の滑りが一致する保証はどこにもないので、だからこそ自分で測るわけなんですけど、最初に読める材料があるかどうかは選定の判断材料になると思います。

なお各社の口座条件は変わることがあるので、最新の情報は必ず公式サイトで確認してくださいね。

FX取引はレバレッジを用いた取引であり、預けた資金(元本)を上回る損失が生じる可能性があります。本記事は情報提供を目的としたものであり、投資を勧誘するものではありません。取引を行う際は自己責任・余裕資金の範囲で行い、各社公式サイトで最新のリスク説明書・規約を必ずご確認ください。

まとめ

長くなったので要点だけ並べておきます。

  • スリッページは「注文価格と約定価格の差」。符号は不利をプラスに揃える
  • 取引レポートには価格が1つしかないので引き算できない。MT5は注文と約定が別レコードなので引ける
  • ついでに約定までのミリ秒・拒否率・部分約定率も同じ履歴から出せる
  • 成行・指値・逆指値は絶対に分けて集計する。混ぜると意味が消える
  • 平均ではなく中央値。外れ値に引っ張られないため
  • 中央値を信じるなら最低50件、できれば100件。20件では分布の3割〜7割の幅しか特定できない
  • 時間帯別に見るなら4セッションに丸める。24分割は件数が足りない
  • 偏りの判定は符号検定で。20件なら15本、100件なら59本が不利方向に出て初めて「偏っている」

「滑ってる気がする」で止まっていると、業者を変えるべきなのか、自分の執行の仕方を変えるべきなのか、そもそも気のせいなのかが永久に分からないんですよね。1ヶ月ぶんの履歴を1回集計してみるだけでも、だいぶ景色が変わると思います。個人的には、やってみる価値はかなりあると感じています。