ExcelVBAではじめるバイナリーオプション自動取引

HIGHLOW自動取引ツール VBAサンプルプログラム


バイナリーオプション自動取引ツールのサンプルプログラム

HIGHLOWについて

 規制後の国内バイナリーオプションからは「2択に当たれば数分後に資金が2倍!」というシンプルな魅力が失われました。

 一方、規制以降海外バイナリーオプション業者の活動が活発になりましたが出金トラブルをはじめ数々のトラブルが発生しています。

 HIGHLOW.net当サイト管理人も利用していますが(※2019年に日本向けのサービスを終了しています)、数ある海外バイナリーオプション業者の中でも利用者の評判が良い業者です。

 通貨ペアや取引時間も充実していますが、特に1分、3分、5分という短時間で正解時倍率2倍(レンジアウト有りのスプレッド取引)というタイプのバイナリーオプション取引を行うことができるのが魅力です。

サンプルプログラム

 以下はHIGHLOWで自動取引を行うプログラムのサンプルコードです。

 あくまでプログラム例としてのサンプルですので、シグナル等については自分で研究したものに書き換えて使用してください。

 ただし、HIGHLOWでの取引及び以下のプログラムを利用して実行して取引を行ったことによる損失の責任は一切負いませんので、予めご了承の上自己責任でお願いします。

 自分のシグナルに自信があっても最初はデモ口座での取引をお勧めします。

'バイナリ―オプション自動売買ツールサンプル Public IE As New InternetExplorer 'IEオブジェクト Public timecount As Integer 'レート取得回数 Public sheetname As String 'シート名 Option Explicit Sub BynaryTrade() sheetname = Format(Date, "yy") & Format(Date, "mm") & Format(Date, "dd") 'シート名 Worksheets.Add(after:=Sheets(ActiveSheet.Name)).Name = sheetname 'シート作成 With Sheets(sheetname) .Cells(10, 2) = "カウント" .Cells(10, 3) = "時間" .Cells(10, 4) = "レート" '項目出力 .Cells(10, 6) = "3分後" .Cells(10, 7) = "最大" .Cells(10, 8) = "最小" .Cells(10, 11) = 0.236 .Cells(10, 12) = 0.382 .Cells(10, 13) = 0.5 .Cells(10, 14) = 0.618 .Cells(10, 15) = 0.784 .Cells(10, 16) = "3分後方向" .Cells(9, 21) = "シグナル" .Cells(10, 21) = "何か" .Cells(10, 22) = "FR" .Cells(10, 23) = "総合" .Cells(8, 23) = "採用指標列" .Cells(9, 23) = 23 .Cells(9, 26) = "結果" .Cells(10, 26) = "何か" .Cells(10, 27) = "FR" .Cells(10, 28) = "総合" '集計欄 .Cells(1, 1) = "集計結果" .Cells(3, 1) = "判定項目" .Cells(4, 1) = "何か" .Cells(5, 1) = "FR" .Cells(6, 1) = "総合" .Cells(2, 2) = "円安" .Cells(3, 2) = "発生回数" .Cells(3, 3) = "HIT数" .Cells(3, 4) = "勝率" .Cells(2, 5) = "円高" .Cells(3, 5) = "発生回数" .Cells(3, 6) = "HIT数" .Cells(3, 7) = "勝率" .Cells(2, 8) = "総合" .Cells(3, 8) = "発生回数" .Cells(3, 9) = "HIT数" .Cells(3, 10) = "勝率" Dim i As Long For i = 0 To 2 .Cells(4 + i, 4) = "=IF(RC[-2]>0,RC[-1]/RC[-2],0)" .Cells(4 + i, 7) = "=IF(RC[-2]>0,RC[-1]/RC[-2],0)" .Cells(4 + i, 10) = "=IF(RC[-2]>0,RC[-1]/RC[-2],0)" .Cells(4 + i, 8) = "=RC[-6]+RC[-3]" .Cells(4 + i, 9) = "=RC[-6]+RC[-3]" Next '集計式 .Cells(4, 2) = "=COUNTIF($U:$U," & 1 & ")" .Cells(4, 3) = "=COUNTIF($Z:$Z," & 1 & ")" .Cells(4, 5) = "=COUNTIF($U:$U," & -1 & ")" .Cells(4, 6) = "=COUNTIF($Z:$Z," & -1 & ")" .Cells(5, 2) = "=COUNTIF($V:$V," & 1 & ")" .Cells(5, 3) = "=COUNTIF($AA:$AA," & 1 & ")" .Cells(5, 5) = "=COUNTIF($V:$V," & -1 & ")" .Cells(5, 6) = "=COUNTIF($AA:$AA," & -1 & ")" .Cells(6, 2) = "=COUNTIF($W:$W," & 1 & ")" .Cells(6, 3) = "=COUNTIF($AB:$AB," & 1 & ")" .Cells(6, 5) = "=COUNTIF($W:$W," & -1 & ")" .Cells(6, 6) = "=COUNTIF($AB:$AB," & -1 & ")" End With IE.Visible = True 'ブラウザ表示 IE.Navigate2 "https://jp.highlow.net/?lang=ja-JP" 'ハイローのログイン画面 While (IE.Busy = True) Or (IE.readyState < READYSTATE_COMPLETE) '表示待ち DoEvents Wend IE.Document.getElementById("username-email").innerText = "●●●●●" 'ユーザー名入力 IE.Document.getElementById("password").innerText = "●●●●●" 'パスワード入力 IE.Document.getElementById("btnSigninSubmit").Click 'クリック While (IE.Busy = True) Or (IE.readyState < READYSTATE_COMPLETE) '表示待ち DoEvents Wend MsgBox "取引対象を選択してください" Schedule '定期処理 End Sub
Sub Schedule() If Hour(Time) = 0 Then '午前0時に終了 IE.Quit 'ブラウザ終了 ThisWorkbook.Save 'ブックを保存 Application.Quit 'エクセルを終了 End If 'スケジュールセット While (Second(Time) <> 0) '??:??:00のタイミングまで待機 DoEvents Wend Application.OnTime Time + TimeSerial(0, 0, 59), "Schedule" '59秒後にセット Getminutedata '1分毎のレート取得処理 If timecount >= 25 Then 'データがある程度集まるまでは取引しない GetTrade '取引実行処理 End If End Sub
Sub Getminutedata() '1分毎のレート取得 timecount = timecount + 1 'カウント加算 With Sheets(sheetname) Dim rate As Double rate = Val(IE.Document.getElementById("strike").innerText) 'レート '各種情報出力(1分毎に算出する項目) .Cells(timecount + 10, 2) = timecount 'カウント .Cells(timecount + 10, 3) = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) '時間 .Cells(timecount + 10, 4) = rate 'レート .Cells(timecount + 10, 6) = "=IF(AND(RC[-2]>0,R[3]C[-2]>0),R[3]C[-2]-RC[-2])" '3分後 If timecount > 24 Then .Cells(timecount + 10, 7) = "=MAX(R[-21]C4,R[-18]C4,R[-15]C4," & _ "R[-12]C4,R[-9]C4,R[-6]C4,R[-3]C4,RC4,R[-24]C4)" '最大 .Cells(timecount + 10, 8) = "=MIN(R[-21]C4,R[-18]C4,R[-15]C4," & _ "R[-12]C4,R[-9]C4,R[-6]C4,R[-3]C4,RC4,R[-24]C4)" '最小 .Cells(timecount + 10, 11) = "=(RC7-RC8)*R10C+RC8" 'FR-2 .Cells(timecount + 10, 12) = "=(RC7-RC8)*R10C+RC8" 'FR-1 .Cells(timecount + 10, 13) = "=(RC7-RC8)*R10C+RC8" 'FR0 .Cells(timecount + 10, 14) = "=(RC7-RC8)*R10C+RC8" 'FR+1 .Cells(timecount + 10, 15) = "=(RC7-RC8)*R10C+RC8" 'FR+2 .Cells(timecount + 10, 16) = "=IF(RC[-10]<>0,RC[-10]/ABS(RC[-10]),0)" '3分後の方向 'シグナル .Cells(timecount + 10, 21) = "=0" '何か .Cells(timecount + 10, 22) = "=IF(RC[-18] < RC[-11],1,IF(RC[-18] > RC[-7],-1,0))" '逆張り .Cells(timecount + 10, 23) = "=0" '総合 '結果 .Cells(timecount + 10, 26) = "=IF(AND(ISNUMBER(RC16),ISNUMBER(RC[-5]))," & _ "IF(RC[-5]=RC16,RC[-5],0))" '結果 .Cells(timecount + 10, 27) = "=IF(AND(ISNUMBER(RC16),ISNUMBER(RC[-5]))," & _ "IF(RC[-5]=RC16,RC[-5],0))" '結果 .Cells(timecount + 10, 28) = "=IF(AND(ISNUMBER(RC16),ISNUMBER(RC[-5]))," & _ "IF(RC[-5]=RC16,RC[-5],0))" '結果 End If End With '1分毎のレート取得終了 End Sub
Sub GetTrade() Dim pips As Double 'レンジ外範囲 Dim signalcolumn As Integer '指標採用列 With Sheets(sheetname) signalcolumn = .Cells(9, 23) pips = Val(Mid(IE.Document.getElementById("onePipUp").innerText, 1)) If pips < 0.3 Then '許容レンジ設定 If .Cells(timecount + 10, signalcolumn) = 1 Then '円安 IE.Document.getElementById("up_button").Click 'クリック ElseIf .Cells(timecount + 10, signalcolumn) = -1 Then '円高 IE.Document.getElementById("down_button").Click 'クリック Else Exit Sub End If '購入実行 Application.Wait Time:=[Now() + TimeValue("00:00:00.2")] '0.2秒ウェイト IE.Document.getElementById("invest_now_button").Click 'クリック End If End With '購入実行終了 End Sub

サンプルプログラムの使用方法・概要説明

 基本的な流れは『シート作成〜サイトへ移動〜ログイン〜取引対象・価格設定〜レート取得・取引実行』です。

 取引対象・価格設定については、実際に利用するサービス(例えばスプレッド ON DEMAND → 三分 → 購入単価\1000円)をサイト上で手動選択してください。サンプルプログラムでは短時間のスプレッド取引を想定しています。

 レート取得・取引実行は約一分ごとに実行されます。PCの時計が狂った際の誤差修正処理は省略しています。

 取引に用いるシグナルは、シート上に出力したレートを参照して決定します。ここでは仮のシグナルとして、フィボナッチリトレースメントを使った仮想の逆張りシグナルを採用していますが、上述したように単なるプログラム例であり、このシグナルの成績は一切保証しませんのでくれぐれもご注意ください。自分で必要なテクニカル指標等を算出して参照するようにしてください。

 スプレッド取引において購入直前にレンジ外幅をチェックして、広すぎる場合には購入を見送るようにしています。ここでは仮の条件として±0.4以上の幅が設定されているときには購入を見送ることにしています。ただし、スプレッド取引を選択していない場合にはこの要素はページ上に見つかりません。

 あとは設定したシグナルに従って資金が無くなるか午前0時になるまで、設定したシグナルに従って自動で取引が繰り返されます。実際には開始時間も設定した方が良いかもしれません。

 詳細はコード及びシートをご参照ください。コンパイルエラーになる場合、さしあたりVBEでMicrosoft Internet Controlsの参照設定がチェックされているか確認してください。

 最後になりますが、くれぐれも適宜カスタマイズ及び十分なテストを行ってください。口座にどれだけ残高があっても、自動で取引で使い切るのは簡単です。本気で取り組むのならばシグナルの研究は当然のことながら、残高や当日の成績を反映して取引頻度を制御するアルゴリズムを追加した方が良いでしょう。

注意点など

 上のサンプルにおいては、勝率を購入時レートと結果レートの比較のみで算出しています。

 HIGHLOWでは、購入クリックから実際の購入までややタイムラグがあり、その間にレートが大きく動くと約定しない場合があります。

 シビアに履歴を取るのであれば、実際に購入が成功した場合にシグナル発生とみなし、かつ実際に払い戻しが得られた場合をHITとみなして集計するとよいでしょう。

 他にHIGHLOW独自のサービスとして、取引参加者のHIGHとLOWの比率を表示するトレーダーズ・チョイス・インジケーターがあります。これを参照することにより、HIGHLOW参加者のリアルタイムな傾向を推測することができますので、各種指標と組み合わせて上手く使えば成績向上に役立つかもしれません。

 サンプルプログラムを参考に、自分だけのより良いツール作成に挑戦してみてください。

サイト構成の変更について

 2017年現在、サイトが変更されたため上記サンプルではログインできません。ログイン前後で一度止めて手動で入力及びログインボタンをクリックしてから続行することで実行することはできますが、その部分を自分で書き換えることを推奨します。

ハイローオーストラリアの口座閉鎖について

 海外におけるバイナリーオプション規制にも書いた通り、2019年11月30日からオーストラリア非居住者の口座が強制的に解約されることになりました。
 当然取引もできなくなりますので、このページのサンプルコードは本当にただのサンプルになりますのでご了承ください。