平均スプレッドを見ても、実際のコストはわからない
MT5で使うツールを選ぶとき、あるいは業者を選ぶとき、多くの人がスプレッドの数字を比べます。ただ、その数字が平均値だった場合、比較としてはほとんど機能していません。
理由は単純で、スプレッドの分布が正規分布から大きく外れているからです。
平常時と急変時が同じ袋に入っている
スプレッドは、静かな時間帯には狭く安定しています。ところが指標発表の瞬間や、流動性が薄くなる時間帯には、平常時の何倍にも開きます。この二つを同じ母集団として平均すると、どちらの実態も表さない数字が出てきます。
たとえば、ある通貨ペアで1万回の観測のうち9,500回が0.6ポイント、残り500回が急変時で平均8ポイントだったとします。単純平均は約1.0ポイント。この「1.0」は、9,500回のときの実態でもなければ、500回のときの実態でもありません。どちらでもない数字です。
そして実際に取引するとき、自分がどちらの側にいるかは、平均値からは判断できません。
時間帯によって分布そのものが変わる
もう一つの問題は、スプレッドの分布が一日を通して一定ではないことです。
東京時間の午前、ロンドン時間の序盤、NY時間との重複帯、そして日をまたぐロールオーバー前後。これらはそれぞれ流動性の状況が違うため、スプレッドの中心値も、広がり方も変わります。
一日を通した平均値は、この時間帯ごとの違いをすべて潰した数字です。日中しか取引しない人にとっても、早朝にポジションを持ち越す人にとっても、自分に関係のない時間帯の数値が混ざっています。
分布として見る
では何を見るのか。分位点で見るのが一つの方法です。
中央値(50%点) は、観測を小さい順に並べたときのちょうど真ん中の値です。平均値と違って、少数の極端な値に引きずられません。「普段はどれくらいか」を表します。
90%点 は、10回に1回はこれ以上になる、という水準です。日常的に遭遇する不利な側の目安になります。
99%点 は、100回に1回の水準です。指標発表時や薄商いの時間帯に何が起きるかを表します。この数字を見ておくと、想定外という言葉を使う場面が減ります。
この3つを時間帯ごとに出すと、平均値ひとつでは見えなかったものが見えます。中央値は一日を通してほとんど変わらないのに、99%点だけが特定の時間帯で跳ね上がる、といったことが起きます。
バックテストとの関係
システムトレードをする人にとっては、この違いは検証の精度に直結します。
多くのバックテストは、固定スプレッドか、ヒストリカルデータに含まれるスプレッドで計算されます。前者は言うまでもなく実態と違いますし、後者もブローカーによって記録の精度がまちまちです。
短期売買で、一回あたりの狙い値幅が数ポイントという設計であれば、スプレッドの見積もりが1ポイントずれるだけで、検証結果の意味が変わります。中央値でモデル化した場合と、90%点でモデル化した場合で、同じロジックの成績が逆転することも珍しくありません。
「どの前提で計算した結果なのか」を自分で把握しているかどうかが、検証結果を信じてよいかの分かれ目になります。
自分で測る場合
分位点を出すには、実際のスプレッドを記録する必要があります。
MT5であれば、ティックごとに SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) を取得し、時間帯ごとに度数分布として貯めていく形になります。全サンプルを保存すると容量が膨らむので、スプレッド値をビンに分けて度数を数える方式にすると、メモリを固定したまま分位点を正確に算出できます。
注意点として、サーバー時刻とローカル時刻のずれを扱う必要があります。時間帯別に集計する以上、どちらの時刻で区切っているかを取り違えると、結論がまるごとずれます。
また、データが溜まるまでは統計として意味を持ちません。数日分では、99%点は数十サンプルしかない計算になります。数週間から数ヶ月、継続して記録して初めて使える数字になります。
測ってから決める
ここまで書いてきたことは、要するに「公表されている数字ではなく、自分の口座で実際に出ている数字を見よう」という話です。
業者ごとにスプレッドの出し方も、記録の仕方も違います。ただ、同じ基準で測れば比較はできます。測る前に判断するより、測ってから判断するほうが、後戻りが少なくて済みます。
筆者はMT5向けの検証用ツールを開発しています。本稿で触れた時間帯別のスプレッド分布については、実測して分位点を表示するインジケーターを公開しています。