マーチンゲール法を利用したHIGHLOW自動取引ツール
バイナリーオプションに取り組んでいる方なら一度はマーチンゲールという言葉を耳にしたことがあると思います。
ここでは、マーチンゲール法を紹介するとともに、実際にHIGHLOWで自動取引を行うことができる簡易ツールを作ってみましょう。
なおこれから説明しますが、割とハイリスクな手法であることをご了承のうえご覧ください。
マーチンゲール法について
マーチンゲール法はギャンブルにおけるシンプルな手法です。負ける度に最初の賭け金(バイナリーオプションでいえば購入金額)の2倍の額を賭け続け、勝ったら最初の賭け金に戻ってやり直す、これだけです。
こうすると、どんなに連敗しても一度勝つだけで最初の賭け金に対する利益を確保することができるため、理論上必ず勝てる手法と言われることもあります。
当然落とし穴もあって、連敗が続くと次回の賭け金は指数関数的に増加していくため、簡単に全財産を溶かすことができてしまいます。
HIGHLOWのスプレッドで初回の購入額を1000円とすると、2回目は2000円、3回目は4000円、4回目は8000円、5回目は16000円、60回目は32000円、7回目は64000円・・・と購入額を倍にしていくことになります。ただし、HIGHLOWでは1回の購入上限が200000円のため、実質8連敗した時点で255000円を失った挙句、この手法を継続することができなくなります。8回目の投資額は128000円に達するのに対し、ここでHITした時に得られる利益は最初と変わらず1000円となります。
仮に50%でHITするとした場合、8連敗する確率は2分の1の8乗で256分の1ですから、端的に言えばいかにしてこの256分の1を引かずに1000円の利益を積み重ねることができるかという勝負になります。
256分の1なんてそうそう引かないだろうと感じる人も多いでしょうが、そこまでで255回勝って積み重ねた255000円が最後に8連敗するだけで全部なくなると考えれば怖さがわかるのではないでしょうか。そもそも早い段階で8連敗してしまえば取り返すことは困難です。
ですが、これでもどこか魅力的に見えてしまうところがマーチンゲール法の怖いところだと思います。
ちなみにマーチンゲールの名はこの手法の愛好家が多かった南フランスのマーティギューに由来するそうです。
マーチンゲール法を利用したHIGHLOWのサンプル
それではHIGHLOWでマーチンゲール法に従って取引を行うプログラムを書いてみましょう。
8連敗は怖いですが、単純な1回あたりの勝率が50%より高ければ高いほど、8連敗する確率も低くなります。そのような1回あたりの取引シグナルは個人の研究に任せることにして、ここでは単純に乱数を利用して取引を行うようにしてみます。
実際に試すのは怖いので、クイックデモで動作を確認してみましょう。8連敗より前に的中すれば、1セットで必ず1000円の利益を得ることができます。
サンプルコードについて
以下にサンプルコードを示します。ここまでお読みいただけていればだいたい大丈夫かと思いますが、細かいところは下で説明します。
前回のサンプルの名残が多少ありますが、適宜カスタマイズしてみてください。
'マーチンゲール法のサンプル
Option Explicit
'/* パブリック変数 */
Public Const history As String = "履歴シート"
Public IE As New InternetExplorer
Public ID As Long '通しデータ番号
Public TradeFlag As Boolean '取引実行フラグ
Public nextBet As Long '次回購入額
Public MoneyInit As Long '残高
Public signal As Double 'シグナル
'/* 表示待ち処理 */
Sub WaitRead()
While (IE.Busy = True) Or (IE.readyState < READYSTATE_COMPLETE)
DoEvents
Wend
End Sub
'/* HIGHLOWmartingale */
Sub HIGHLOWmartingale()
'/* 起動設定 */
Cells(2, 1) = 1
ID = Application.WorksheetFunction.Match(0, Sheets(history).Columns(1), -1)
Sheets(history).Cells(ID + 1, 2) = "start" '起動チェック
TradeFlag = False
'/* ログイン */
IE.Navigate2 "https://jp.trade.highlow.net/" 'ハイローのログイン画面
IE.Visible = True 'ブラウザ表示
WaitRead '表示待ち
MsgBox "ログインして下さい" '※ここでログインせず、クイックデモで動作確認することを推奨
MoneyInit = IE.Document.getElementById("balance").innerText '初期残高取得
nextBet = 1000 '初期購入額セット
Randomize '乱数初期化
appname = IE.LocationName & " - " & IE.Name 'ページのtitleとieの名前を取得
Trading 'レート取得・取引処理
End Sub
'/* レート取得・取引処理 */
Sub Trading()
Dim rate As Double 'レート
Dim pair As String '通貨ペア
Dim Money As Long '残高
With Sheets(history)
On Error GoTo HitError 'エラー処理
rate = 0
rate = Val(IE.Document.getElementById("strike").innerText) 'レート取得
pair = IE.Document.getElementById("asset").innerText '通貨ペア取得
Money = IE.Document.getElementById("balance").innerText '残高取得
.Cells(ID + 1, 1) = ID 'ID
.Cells(ID + 1, 3) = Money '残高
.Cells(ID + 1, 4) = Date '年月日
.Cells(ID + 1, 5) = Hour(Time) & ":" & Minute(Time) & ":" & Second(Time) '時間
.Cells(ID + 1, 6) = pair '通貨ペア
.Cells(ID + 1, 7) = rate 'レート
'/* チェック */
If pair <> "USD/JPY" Then '選択通貨が変わった
ExitBOT "change"
ElseIf rate = 0 Then 'レートが取得できてない
ExitBOT "miss"
End If
If Money > MoneyInit Then '残金増加(HIT後)
.Cells(ID + 1, 8) = "Hit"
MoneyInit = Money '残金初期化
nextBet = 1000 '購入額初期化
ElseIf Money < MoneyInit Then '残金減少(OUT後)
.Cells(ID + 1, 8) = "Out"
MoneyInit = Money '残金初期化
nextBet = nextBet * 2 '購入額倍
If nextBet > 128000 Then '全敗
ExitBOT "lost"
End If
End If
'/* 購入額入力 */
Dim appname As String
AppActivate appname, True 'ウィンドウをアクティブ
IE.Document.getElementById("amount").innerText = nextBet '購入額入力
IE.Document.getElementById("amount").Focus
SendKeys "{ENTER}" 'エンターキーを入力
'/* シグナルセット */
'※ここの処理は必ず自分で変更するようにしてください
'※このままだとほぼ確実に破産します
'※最低でも勝率55%以上は欲しいです
signal = Rnd '乱数をそのままシグナルにセット
'/* 取引実行 */
If TradeFlag = True Then
If signal > 0.5 Then '円安
IE.Document.getElementById("up_button").Click
Application.Wait Time:=[Now() + TimeValue("00:00:00.2")] '0.2秒ウェイト
IE.Document.getElementById("invest_now_button").Click 'クリック
Else '円高
IE.Document.getElementById("down_button").Click
Application.Wait Time:=[Now() + TimeValue("00:00:00.2")] '0.2秒ウェイト
IE.Document.getElementById("invest_now_button").Click 'クリック
End If
End If
ID = ID + 1 'データ番号加算
End With
'/* 次回スケジュールセット /*
Application.OnTime Time + TimeSerial(0, 0, 45), "Trading" '45秒後にセット
Exit Sub
'/* エラー処理 */
HitError:
ExitBOT "error"
End Sub
'/* 終了処理 */
Sub ExitBOT(comment)
Sheets(history).Cells(ID + 1, 2) = comment '終了チェック
Stop
Exit Sub
End Sub
シート名の変更
historyにシート名をセットしています。とりあえず、sheet1を「履歴シート」という名前に変更してください。
参照の追加
まず以下を参考にMicrosoftInternetControlsへの参照を追加します。これにより、InternetExplorerが簡単に扱えるようになります。追加していないと、サンプルの実行時にエラーが起こります。


ログイン時の注意点
実行後、MsgBox "ログインして下さい"のところで、まずはログインせずクイックデモを選択するようにしてください。

上の画像の赤丸が通常のログインですが、その左のクイックデモを選択するようにしてください。
サンプルプログラムではレートを取得してはいるものの一切判定の材料にすることなく乱数のみで売買を決定していますので、このまま本番で使ってしまうと大変なことになります。
ログインはぜひ自信のあるシグナルを組み込んだのちにしてください。
正直なところ、自信のあるシグナルをお持ちならマーチンゲールではなく定額購入をおすすめしますが・・・。
取引ページ表示後に希望のオプション、通貨ペア、時間を選択してから先に進みます。ここではスプレッドTURBO、30秒、通貨ペアとしてUSD/JPYを選択してください。
30秒はスプレッドの幅が狭く、機械的に回数を稼ぐには有利なオプションです。
スケジュールと購入額管理
30秒オプションなので、毎分45秒ごとに取引処理を実行するようにしています。購入から30秒後に判定結果は出ますが、払戻額の反映にやや時間がかかるため15秒の余裕を持っています。この余裕時間は適宜変更してください。
初回の購入額は1000円が設定されています。購入後、次回取引時に残高を確認して前回より減っていれば負け、増加していれば勝ちと判断します。マーチンゲール法なので、負けたら購入額を2倍にし、勝ったら購入額を初期値に戻します。
HIGHLOWでは判定ライン上で引けた場合に購入額をそのまま返してくれますので、前回と残高が変わっていなければ引き分けだったと判断して、同額を購入することにします。
購入額入力処理は注意が必要です。以前Q&Aにも書きましたが、IE.Document.getElementById("amount").innerTextの値を書き換えるだけでは実際の購入額が変更されないからです。
購入額を入力した値に変更するためには、サンプルのようにウインドウをアクティブにして購入額を入力した後にSENDKEYでエンターを押すまでを実行させる必要があります。
ただしSENDKEYを入れる場合、他の作業をしていると、処理がうまく実行できない場合があります。プログラム実行中はIEを表示して他の作業を行わないように注意してください。
128000円を購入して負けてしまった場合、残念ながらほぼゲームオーバーです。クイックデモだったことに感謝して次への糧にしましょう。
実戦について
クイックデモでランダムだとは言っても、運次第では相当の利益を上げることもあるはずです。ですが、本当にそれは偶然ですので、実際に運用する際にはくれぐれも慎重に、かつ自己責任でお願いします。