TwitteでFXのスプレッドについて調べるとエライことになっている。調べていくと常軌を逸したスプレッドのスナップショットがちらほら。以前記事でも紹介したが楽天の鬼スプレッドは有名ではないだろうか。自動売買を考えた場合に異常に開いたスプレッドでのエントリーは何としても避けたい。MQL4でスプレッド値を確認する処理を紹介する。
本記事はFXの自動売買に使用されるプログラムなどについて解説していますが内容を保証するものではありません。金銭にかかわる内容であるためご注意ください。参考にする場合は自己責任でお願いします。
本記事ではMT4を使用する。
スプレッドについて
スプレッドとは売値と買値の差で手数料みたいなもの。スプレッドが小さいほど有利でスプレッドが大きいと不利になる。このスプレッドは固定ではなく大きな経済指標前などに大きく変動することがある。なのでスプレッドが開いたタイミングでのエントリーを避ける必要がある。
FXTFのスプレッド
参考にFXTFのスプレッドを紹介する。
スプレッドの最小が0.1銭なので0.1pipsとかなり狭い。最大は4銭なので4pipsありスキャルピングだと厳しい。
スプレッド最大値は固定ではあるがそれが100%保証されるわけではない。
電話で鬼スプレッドが発生するかどうか問い合わせてみたところ。「基本的には最大スプレッドを超えることはないが100%は保証できない」との回答であった。雰囲気からすると最大スプレッドは滅多に超えることがないので大丈夫みたいな感じ。あとFXTFでは取引通貨でスプレッドが変わることはない。
鬼スプレッド
証券会社を選ぶときに見つけた鬼スプレッド。どの証券会社もあるようだが特に楽天証券はピカイチ。スプレッドが300や1,500pipsはもはや交通事故レベル。システムで3pips超えたらエントリーできないようにするオプションとか付けてほしい。自動取引であればシステムで抑止したいところである。
【EA開発ガイド】Part 2 EA開発実践 – Chapter 3 楽天証券の鬼スプレッドとは
デモ口座とリアル口座のスプレッド
当たり前かもしれないがデモとリアルでスプレッドは違う。ただしそこまで大きな違いはないと思うのでデモを参考程度に使うならいいだろう。あとリアルだとスリッページや約定率も異なるため検証はデモとリアル別だと考えたい。
Q デモ口座とライブ口座でスプレッド等、違いはありますか?
A はい。デモとライブは異なります。
システムの操作性は同じですが、配信レートやスプレッドにおいては、流動性が低い相場環境、指標発表時前後等でライブと異なる場合がございます。
なお、新機能のリリース等をデモ環境で先行して実装する場合などもございますので予めご了承下さい。
サンプルコードの概要
MQL4でスプレッドを取得し10秒おきにコンソールに出力する。簡易的ではあるが10秒ごとのスプレッドを記録に残せる。
コード解説
動作確認用の簡易プログラム。
1. スプレッドをコンソールに出力
追記したのはOnTick内の3行のみ。このEAを動かすとコンソールにスプレッドが出力される。
//+------------------------------------------------------------------+ //| spread-example.mq4 | //| Copyright 2021, zerokara-blog. | //| https://zerokara-blog.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, zerokara-blog." #property link "https://zerokara-blog.com/" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double spread = MarketInfo(Symbol(),MODE_SPREAD); Print("スプレッド = ", spread); Sleep(10000); } //+------------------------------------------------------------------+
実際のEAに実装する場合はエントリー前にスプレッドを取得し許容範囲を超えていればエントリーせずに処理を終える。スプレッドが許容範囲を超えたらあとで確認できるようにメッセージを残しておいた方がいいだろう。
2. 実行結果の確認
出力はターミナルウインドウのエキスパートタブ。以下はFXTFのデモ口座の履歴。取得値1は0.1銭なのでスプレッドは0.1銭(0.1pips)となる。ここまでスプレッドが狭いと適当なEAでも負けない気がする。
懸案事項
スプレッドチェックとエントリー処理の間でスプレッドが広がる可能性がある。
タイミングのズレ
EAでスプレッドをチェックして開いた場合はリジェクトできるがタイミング的に失敗する可能性もありそう。どういうことかと言うとEA内でスプレッドをチェックした後にスプレッドが開いてしまうケース。いくら良い通信環境であってもラグはかならずあるはず。スプレッドチェック処理を実装するのであればエントリー処理の直前にした方がいいだろう。ただしそれでも通信ラグ等があるため確実とは言えない。しばらく運用してスプレッドチェックがスルーしてしまうか検証したい。
まとめ
どの証券会社もスプレッドが広がることがあるようなのでスプレッドチェック処理を実装した。少しでもすり抜けを防ぐためチェック処理は出来るだけエントリー処理の直前に持ってきた方がいいだろう。国内の証券会社4社を準備したのでスプレッドについて今後検証していきたいと思う。
- 基本的にエントリー前にスプレッドをチェックする
- 通信ラグ等でスプレッドチェックをすり抜ける可能性あり
- スプレッドの許容範囲はトレード計画時に決めておく
スプレッドチェックなしでの自動売買は怖くてできません。