MT4/MT5でリアルタイムにVIXを判定できるようにしてみたけど・・・

閃き

MT4/MT5でリアルタイムにVIXの判定をできるようにしました。

試作という位置づけにはなってしまいますが、VIXに限らず同じように外部の値を取得してMQL側で利用するようなことをやりたい方々の参考になればと思い、公開することにしました。

以下の記事の検証の続きなのでまだご確認いただいていない方は先にご覧ください。

MT5のカスタム銘柄にVIXを取り込んで有用性を検証する

市販EAのフォワード結果をバックテスト上でほぼ完ぺきに再現する

朝スキャEAにVIX(恐怖指数)フィルターを付けたら衝撃の結果に・・・


やってみて思ったことも最後にまとめていて、こちらの話が最も重要だと思いますので時間の無い方は「やってみて思ったこと」だけでもご確認ください。

MT4/MT5でデータを利用する方法

MT4/MT5でリアルタイムにデータを取得する方法は大きく分けると以下の3つになり、基本的には1番上のみが利用されます。下に行くほどイレギュラーな方法で、データの安定性が失われます。

  • 最初からMT4/MT5に組み込まれているデータ
  • 外部からAPIでデータを取得
  • 外部からスクレイピングでデータを取得


最初からMT4/MT5に組み込まれているデータ

USDJPYやEURUSDのように標準でMTに組み込まれているものなので、最も信頼性が高いと思います。海外なら日経225やダウなども標準で入っています。



外部からAPIでデータを取得

APIでなくてもいいのですが、例えば「VIXのデータちょうだい!」とリクエストしたらピンポイントでもらえる方式です。



外部からスクレイピングでデータを取得

外部WebサイトからHTMLのページを丸っと取得して、プログラム内で対象データを探索します。

今回はこの方式を採用したのですが、参照先のWebサイトの構成などが変更されると値を取得できなくなってしまうので、この中では最も安定性の無い方式だと思います。

※現時点では他に方法が思いついていないので、よりよい取得方法をご存知の方はご連絡いただけると幸いです。



準備

通信するURLの追加

MQLで外部のWebサイトにアクセスする場合はURLを登録する必要があります。

「ツール > オプション」と進み、「エキスパートアドバイザ」タブを選択します。

「WebRequestを許可するURLリスト」にチェックを入れて、その下に対象のURLを入力します。(今回はhttp://www.cboe.com/vix)です。

MTのWebRequest設定


ライブラリ配置フォルダ作成

MetaEditorを開いてライブラリ配置用のフォルダを作成します。今回はInclude下にOrgというフォルダを作成しました。

MetaEditorのフォルダ構成


プログラム

構成としてはVIXを取得したり閾値を超えたかを確認するプログラムを1つ作成して、それをEAから利用するイメージです。


ライブラリ準備

Include > Org下にプログラムを作成して、以下のプログラムをコピーしてください。

説明は後述しますが、ファイルの配置などの時点で「何を言っているかわからねー。」ということになっている場合は、以下にも並行して目を通していただくと良いかもしれません。



各機能の説明

各機能を簡単に説明します。

機能説明
GetVIXVIXの値を取得
最新のVIXを取得するためには先にUpdateVIXを実行します
UpdateVIXVIXの値を外部Webサイトから取得
より良いものがあれば修正していくのが良いです
CheckOverThresholdVIXの値が閾値を超えているか確認
CheckCrossBottomToTopVIXが閾値を下から上に抜けたかを確認
CheckCrossTopToBottomVIXが閾値を上から下に抜けたかを確認

完全にUpdateVIXが肝で他はおまけです。UpdateVIXは外部からデータを取得してきて、内部(MT4/MT5)のVIX値を更新するのでUpdateVIXという名称にしました。かなり無理をしている部分でもあるのでまだまだ改善の余地はありそうです。



EA(実行ファイル)作成

OnInitでミニマムなプログラムを示します。できるだけ細かくコメントを入れたのでご理解いただけるかと思います。



これでGetVIXをすれば値を取れる状態になったので、自動売買の条件判定にも使えますし、グローバル変数などに設定すれば他のプログラムでも参照することができます。

例えばチャート上に表示すると以下のようになります。

VIXをMT4/MT5に表示

MT4では上手く表示できなかったので配布などはしませんが、グローバル変数に入れておけば「GlobalVariableGet(“変数名”);」というようなイメージで他のプログラムでも値を取れるので楽です。(データを保持しておきたい場合はファイルに書いておくしかありません。)

※小話ですが、チャートからは外部Webサイトに接続できない仕様らしく少しハマりました。。。



念のためOnTickで実行する場合のプログラムも載せておきます。外部のWebサイトにアクセスするので、必ず以下のプログラムのようにbarの初回のみアクセスするようにしてください。(過剰なアクセスはいけません。)



やってみて思ったこと

やりたいことの実現はできましたが、MT4/MT5に外部からデータを取り込むのは面倒な上に不安定で他の方法を探した方が良いように感じました。

一方で誰もが簡単に取得できる情報には価値がないのでは?ということにも気づくことができました。

といった状況なので、「VIXをどのように使いたいか?」についてもう一度整理したほうが良さそうです。



裁量・半裁量で使う場合のご提案

MT4/MT5にこだわる必要はないかと思います。

既にご利用の方も多いかと思いますが、TradingViewというブラウザ上で動く素晴らしいサービスがあります。

以下はローソク足を「VIX」にして、折れ線を「USDJPY]にしたものですが・・・裁量と半裁量において必要なのはこれなのかな?と思いました。閾値超えや閾値クロスのアラート設定も簡単にできます。

TradingView

まだ使っていない方は一度以下からご確認ください。登録は無料です。(有料プランもありますが個人的には無料で十分)

比較できる銘柄が圧倒的に多いです。

結局ユーザー目線で考えれば、その銘柄を取引できるかは別としても比較対象として利用できることが重要です。そういう意味では完全に要望を満たせているかと思いました。



完全自動売買で使う場合のご提案

2つ選択肢があります。

  • TradingViewに移行してみる
  • MT4/MT5でどうにかする

[TradingViewに移行してみる]
OANDAのNYサーバーならTradingViewからトレードできるようです。難点としては今までのプログラムと違うことです。「また?」ということになるでしょうが、こだわりが無い方には良いかと思います。

OANDA JAPAN 口座開設
OANDA JAPAN 口座開設
OANDA JAPAN 口座開設?|?fx-on.com


[MT4/MT5でどうにかする]

今回私がやったパターンがそうです。

スクレイピングなので仕方がないのですが、やはりデータの取得部分が不安定になります。

さらに、自作EAは簡単にコントロールできても市販EAをコントロールするのは難しいという問題があります。

今回は市販EAのコントロールをゴールに決めていたのですが、外側からコントロールすることになるので、やれることが限られてきて断念しました。

  • EAをチャートから削除 -> 設定リセットされて面倒
  • チャートを閉じる -> 設定リセットされて面倒
  • MTを閉じる -> 全部止まる

ポジションを持っていた場合はどうする?などの問題も出てきますが、EAの特徴次第だと思いますので、現状では市販EAのコントロールを完全自動化するのは難しい。。。それならばTradingViewと併用したほうがいいのでは?というのが答えになる気がします。

ただ、MT4/MT5に外部データを取り込む技術を持っておくことには大きな意味があると思います。

今回はVIXの話でTradingViewにもあるものでしたが、もしどこのツールにも入っていない情報だったらどうしましょう。仮に、とあるWebサイトのデータを引っ張れれば勝率が20%上昇しそう・・・このチャンスを直ぐにものにできる技術があれば素晴らしいと思います。

誰もが簡単にその情報を入手できるようになってしまえば優位性はなくなりますので、全員が気づく前に利益を出して気づく頃には次のネタに進むイメージです。



最後に

当初思い描いていた結論とは全く違うものになってしまいました。

投資はとても大事な「お金+時間」が掛かっているので、1%でも勝率が上がる方法を探していくと、新しいものに直面することもあります。

ダーウィンが「変化に最も対応できる生き物が生き残る」と言っているので、常に柔軟であり続けようと思います。(頭が悪いので時間で勝負。。。)

※MT4/MT5がダメでTradingViewが完璧と言っているわけではなく、今回の検証(銘柄の多さ)においてはTradingViewが優位だったというだけです。無料なので試す価値は十分ありそうです。