*

バイナリーオプションの自動売買を開発するやり方

Originally posted 2017-11-15 12:00:11.

今回はバイナリーオプションの自動売買をします。バイナリーオプションの場合、同じシステムトレードでも自動売買と過去検証は全くフローが異なります。

過去検証はこちら

バイナリーオプションでその手法が勝てるかどうか検証するやり方

 

一部の業者ではMT4にプラグインを入れることで従来のEAのように自動売買できるところもあるようですが、
業者依存で汎用性がないので、今回はそれ以外の方法で行います。

概要

まず、概要ですが、
・MT4でインジケーターを作るorソースコードがあるインジケーターを手に入れる
・バイナリーオプションのトレード画面をブラウザで開く
・MT4から出たシグナルをマクロで受け取る
・マクロでブラウザを操作する(座標でプログラミングはせず、COMを使う)
こんな感じです。

ブログを読み続けていらっしゃる方からすれば、
「はいはい、またこのパターンね」という感じでしょうか。

やっぱりこの形は汎用性があって多様性があるので便利だと思います。

 

問題となるのは、
・インジケーターのシグナルをどの形で出力するか(ファイル出力、アラート出力、WEB出力など)
・マクロにどうやってシグナルの出力結果を渡すか
・バイナリーオプションの業者をどこにするか
だと思います。

業者に関しては一番ポピュラーな「ハイローオーストラリア」でいいかな。

 

MT4における外部に対するシグナルの出力形式には、
・ファイル出力:マクロでファイルを開けたり閉じたりすれば更新内容を取れるのでまぁまぁ
・アラート出力:一般的なインジケーターは全部これだけど、マクロのウィンドウ操作は不安定なので却下
・WEB出力:最終的にバイナリーオプションのウェブ上の画面を操作するからありっちゃありだけど、別途サーバーを用意しなければいけないので(めんどくさいから)却下。ただ、実用的ではあるかも。

ということで、今回はインジケーターのシグナルをファイルに出力し、その出力結果をもとに自動売買を行います。

 

コーディング

MQL4でRSIのシグナルをファイル関数を使ってファイルに出力する

さっそく作っていきます。

とりあえず、今回はシグナルの優位性はおいておいて、サンプルとしてRSIのラインクロスで行きましょう。

 

ファイル関数はWEB関数(WebRequest)と違い、インジケーターからでも扱えるので、インジケーターファイルに上記のファイル関数を挿入します。

ちょっと処理が仰々しくなっているのは、コピートレードのときのコードをそのまま引っ張ってきたからです。
コピートレードではスピードや正確性が命ですが、今回はここまで徹底する必要はないと思います。

FileOpenをする際にFILE_COMMONで上位フォルダにアクセスしていますが、別に絶対必要という訳ではありません。

ただ、FX業者の長ったらしい識別IDをマクロのアクセス先文字列に入れたくなかっただけです。

 

コードを挿入する場所ですが、
アラートがでるインジケーターの場合はAlert関数と差し替えればOKです。

RSIのようにアラートがでないインジケーターの場合は、
別途条件文を記述します。

これをOnCalculate内の一番下に挿入します。

 

 

bandicam 2017-11-15 11-51-36-705

するとCOMMONフォルダ(C:\Users\ユーザー名\AppData\Roaming\MetaQuotes\Terminal\Common\Files)にファイルが自動的に作成されます。

中身は

となっているので、下記のように通貨ペアが出るだけです。
bandicam 2017-11-15 11-52-12-433

バイナリーオプションでトレードする際には、
通貨ペアと方向の情報さえあれば何をどっちにプット・コールすればいいのかわかるので、UP or DOWNも付け加えます。

 

例によって通貨ペアに余計な文字列がついていると邪魔なので、前から6文字だけ抽出します。(FX業者によってはUSDJPY.やUSDJPYmのようになっているので、USDJPYにするという意味です。)

 

RSIのシグナルをファイルに出力するコード

コード全体は下記みたいな感じです。冗長な部分は勘弁してください。

 

MT4で出力したファイルをマクロで読み取る

続いて、ファイルをマクロで読み取るところまでやります。

マクロはCOMが使えれば何でもいいですが、いつも通りUWSCで行きます。
(COMとはマクロソフト開発のWindows上のソフトをオブジェクトとして操作する機能です。これによりマウス操作の座標を記録するといった陳腐な方法ではなく、ブラウザをオブジェクトとして操作することができます。)

 

UWSC=座標を記録、と認識している方もいますが、COM操作も可能ですので、
座標にとらわれない、マウスにとらわれない自動化が可能です。

※UWSCは本家が失踪してしまったので、AutoITの方が良いかもしれません。

 

UWSCのファイル関数もMQLと同じような使い方で、FOPENで開いて、FGETで取得して、最後にFCLOSEで閉めます。

Cドライブのアクセス権まわりがちょっと心配だったのですが、
特に問題なくすんなりいきました。

出力されたシグナルを受け取るコード

 

うろ覚えですが、パソコンのフォルダの権限によってはMT4インストール時に
データフォルダの場所が変わるような話があったような気がします。

フォルダパスが違う場合は適宜変更してください。

上記を.uWSで保存して実行すると、MT4で出力したトレードデータがログ出力されます。

同じトレードの重複を回避する

さて、ここで後々の問題を解決しておきます。

MT4からマクロにデータを渡してトレードした後、
トレードしたことを記録しておかないと、何度も同じトレードを連続して発注してしまう可能性があります。

 

 

それを解決するために、暫定的にファイルの文字列をマクロ側から更新します。

MT4でシグナル発生

ファイルにインジケーターのファイル関数でシグナルを出力

マクロがファイルにアクセスしてシグナルを検知

マクロがバイナリーオプションでオーダーを出す

マクロがファイルの内容を”オーダー済み”に書き換える

という流れです。

 

MT4のインジケーターが発するシグナルは、発生のタイミングの瞬間のみに発動するため、
マクロ側で更新した文字列が次にMT4側で更新されるのは次のシグナルのタイミングです。

(※例えば、RSIの70クロスの場合、クロスした瞬間にシグナルが出てファイルを書き換えるが、その後の70を超えている状態ではファイルの書き換えは行われない)

 

トレードしたらトレードしたことをファイルに書き込むコード

 

本来はファイルの読み込みと書き込みは同時にできるはずなのですが、
何故か言うことを聞いてくれなかったので、別々のファイルを呼び出しています。

 

【追記】Windowsの使用上、複数のシステムから同じファイルにアクセスしようとすると、バッティングして上手く読み込めなかったり、書き込めない可能性があります。上記のコードでは一回きりの処理ですが、バッティングしたときを解決するために、失敗した場合はスリープして再度やり直す記述にした方が良いです。

 

これでトレードする前は、「通貨ペア+トレードの方向」
トレードした後は、「donottrade」とファイルに保存されるようになりました。

 

バイナリーオプションのサイトの解析

バイナリーオプションのウェブサイトを操作するため、
ウェブサイトのトレード画面の分析を行います。

業者はハイローオーストラリアです。
ターゲットはHIGHボタン,LOWボタン,今すぐ購入ボタンです。

 

UWSCの自動化処理を経験したことがある方ならわかるかもしれませんが、WEBサイトによってボタンを押す仕組みがことなるため、ソースコードを見て分析しなければなりません。

見かけ上は同じボタンでも、画像ボタンだったり、submit属性を持っていたり、同じ属性のボタンが複数あったり様々です。

この辺りは、HTML,CSS,Javascriptの知識が必要になりますので、もしよくわからなかったらそのあたりを調べてみてください。

bandicam 2017-11-15 12-40-15-263

ここのコードを抜き取ると、

めっちゃ分かりやすいですね。
難読化処理もしていないので、自動化ウェルカムなのではないかと勘違いしそうです。

おそらくCMSを利用せずに平文でコーディングしていると考えられます。

 

ボタンのID invest_now_buttonはこのページではユニークなので、
これで識別できます。

というかIDはそもそもそのページ上で一つしかないように記述しなければならない、というのはウェブ系のコーディングでは常識ですよね。

とフラグを十分に立てたところでUP,DOWNボタンを探します。

bandicam 2017-11-15 12-45-52-127

・・・二つある。
ページを見てもボタンは一つしかないのに、ソースコード上は2つある・・・

 

といってもマクロで操作するときにはdown_button1番目、2番目で配列で指定できるので、それほど苦ではありません。

 

ハイローオーストラリアのボタンはJavascript

さて問題は、ボタンがformのsubmitでもbuttonでも画像でもなく、
javascriptに命令を飛ばしているので、そのトリッキーな処理を突破する必要があります。

がしかし、やってみると意外と楽勝でした。

 

これでボタンを自動的に押せます。

あとやってみると分かりますが、
このサイトは読み込みの後にjavascriptが動いて、完全に表示されるには3秒くらいのラグがあります。
そのため、IEの立ち上げから自動化するには少々不安定です。

IEを開いてログインした状態から自動化させた方が賢明だと思います。

 

まとめ

これまでの内容で
・MT4からシグナルをファイルに飛ばす
・ファイルからシグナルデータを読み込む
・マクロでバイナリーサイトでボタンを押す
ができたので、もう大枠はこれで完成です。

 

基本的なところはすべてこれまでの講座のおさらいなので、新しいことは特にないですね。

 

細かいところでいえば、
・システムの安定化(これはやってみないことにはどんなトラブルがあるか分からない)
・掛け金の変更(一回手で変更すればその後も維持されるのでやらなくても問題ない)
・多通貨通貨ペアの選択(普通のサイトの場合、URLで飛べることが多いがjavascriptで処理されているので、ここだけ厄介かも。)

 

まぁ、仮想通貨の台頭でバイナリーオプションの人たちも流れているので、
需要があるのかと言われれば微妙なところだと思います。

バイナリーオプションの場合、掛ける”楽しみ”も一つの要素なので、
それを自動化するならFXやアービトラージでいいんじゃね? と今更ながらに思ったりします。

 

バイナリーオプションでその手法が勝てるかどうか検証するやり方

この投稿は役に立ちましたか? 役に立った 役に立たなかった 3 人中 3 人がこの 投稿 は役に立ったと言っています。
 

コメント

  1. ユウ より:

    コメント失礼します。
    こちらを見て勉強しようと思っているのですがこの記事のプログラムはindicator ea どちらで作成して行けばいいのでしょうか。

  2. ゆう より:

    はじめまして。
    こちらの記事を見て勉強したいと思っているのですが、こちらはインジケーターで作るのかEAで作るのかわからないのですがお教えいただけますでしょうか。

  3. 管理人 より:

    これはインジケータでやっていますが、EAでも同じように作ることができます。

  4. Dの一族 より:

    コメント失礼します。
    最近BOの自動売買を始めた者です。
    この記事のコード全体部分をコピペして、カスタムインジケーターで使用させて頂いたのですが、ファイルが作成されませんでした。
    何か他にやる事があるのでしょうか?

Message

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

バイナリーオプションでバックテスト・過去検証するやり方

バイナリーオプションの場合、リアルタイムの自動売買開発と過去検証のためのソフト開発は別物です。 自

記事を読む

 
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

     


  • 横瀬兼元(ペンネーム)です。

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を) 4000文字未満のトピックや話題はツイッターで発信しています。
  • fxfx.work

    (↑広告です。このサイトの管理者の運営ではありません)

Translate »
ページトップへ