Bitcoin 裁定取引と自動取引 abitra.netのブログ

Bitcoinの自動売買のあれこれ

バイナリーオプション(ハイローオーストラリア)で自動売買(Selenium)ツール作成の方法 その2

バイナリーオプション(ハイローオーストラリア)で自動売買(Selenium)ツール作成の方法 その2



前回(バイナリーオプション(Highlow オーストラリア)で自動売買(Selenium)のやり方 その1 - Bitcoin 裁定取引と自動取引 abitra.netのブログ)で環境設定が出来たかと思いますので、今回は簡単なロジックでハイローオーストラリアで自動売買を行うプログラムを作成したいと考えます。
※MT4との連携は今回は行いません。もしMT4との連携した自動売買システム作成を希望する方はコメントにご連絡下さいませー有効なロジックであれば無料で検証及び自動売買まで作成しちゃいます。


予め説明すると今回の私が提供するロジックをお勧めしてはいません。
個人的にマーチンを利用する方法はいずれ破綻する可能性を含んでいると考えますので。
今回ブログ作成にあたり分かりやすいかなーって事で構築します。

マーチンを完全否定もできないのですが資金管理をしっかり出来る方でないとダメかと。


■作成内容
Seleniumを利用してハイローオーストラリアで自動売買を行います。

■ロジック
1) ランダムで1000円でエントリー
2) 勝ったらOK
3) 負けたらマーチン 1000円=>2000円=>4000円=>8000円=>16000円=>32000円=>64000円=>128000円

これを繰り返すロジックです。

※今回は検証しませんが複利を効かせたいのであれば勝った時は2回目は1回目の利益を乗せてエントリーすると良いかも。
※倍率2倍以上でないと高回数になるとマーチン成立がしないのですが今回は無視でw

■エントリー足
1分のターボ

■エントリー通貨ペア
GBPJPY

USDJPYでもいいですがGBPJPYの方が値動き激しい気がするので何となく今回はGBPJPYを設定。
理由としては引き分け負けなので値動き激しい方が引き分けになる確率が低いんじゃないかなーって感じ
(実際引き分け率などを検証しないと何ともです。MT4のバックテストでM1のコマ数を検証すればある程度分かるかもですが今回は気にせず感覚で通貨ペアを設定)

■口座
デモ口座

■その他、備考
本ソースには取引時間処理、その他ペア選択、エントリー時間確認、エラー処理、取引ログ保存、取引通知(メール送信)などは含めていませんのでご了承下さいませ。(自身のプログラムであれば入れるのですが書きだすと長くなるのでブログ用に今回は端折ってます。)
一応それっぽくプログラム書いていますが私自身ガチのプログラマーでは御座いませんしプログラム制作会社等で働いた事がないので変なロジックや糞プログラムになっている可能性が高いのでご了承下さいませ。(独学で誰にもソースコードを見てもらった事が無いので正直メッチャ自信ないですw)


ソースコードの流れ
1) トップページから"クイックデモ"選択
f:id:hogehoge_kato:20190610154308p:plain

2) キャッシュバックの案内の取引を始める選択

f:id:hogehoge_kato:20190610154321p:plain

3) Turbo選択
4) GBP/JPYを選択

f:id:hogehoge_kato:20190610154335p:plain


5) エントリー金額入力
6) ランダムでHigh 又は Low を選択
7) 今すぐ購入選択

f:id:hogehoge_kato:20190610154409p:plain

8) 勝ったか負けたかを口座残高から判断

f:id:hogehoge_kato:20190610154423p:plain

9) 5~8を繰り返す

こんな感じかな。


以下rubyソースコード 2019年6月10日現在デモ口座での動作は確認出来ています。
ハイローオーストラリアは時々ソースコードを変更してくるので今後も以下コードが動くなどの保証は出来ませんのでご了承下さいませ。
上記にも書いていますがブログ用にエラー処理などは入れていませんが何も問題なければ動き続けてくれると思いますw

もしここはこうした方が良いなどあればコメント下さいませ。あくまで参考コードなので。。。一応うまくいくと利益出るかもしれませんw

一応私が動かした感じだと1時間で約10000円程の利益が出ています。運が良かった可能性大なので期待はしない方が良いですかねー


require 'selenium-webdriver'

def high_low_purchase(driver, wait, high_low_xxx, entry_price)
    if high_low_xxx == "high"
      puts "Highを選択, エントリープライスは #{entry_price}"
      driver.find_element(:xpath, "//input[@class='number-only eng first-child last-child']").clear # 金額を数値を消す 
      driver.find_element(:xpath, "//input[@class='number-only eng first-child last-child']").send_keys(entry_price) # 金額を入力
      driver.find_element(:xpath, "//div[@id='up_button']").click #Highを選択
      driver.find_element(:xpath, "//a[@class='invest investNow_disabled button']").click #購入クリック
    elsif high_low_xxx == "low"
      puts "Lowを選択, エントリープライスは #{entry_price}"
      driver.find_element(:xpath, "//input[@class='number-only eng first-child last-child']").clear # 金額を数値を消す
      driver.find_element(:xpath, "//input[@class='number-only eng first-child last-child']").send_keys(entry_price) # 金額を入力 
      driver.find_element(:xpath, "//div[@id='down_button']").click #Lowを選択
      driver.find_element(:xpath, "//a[@class='invest investNow_disabled button']").click #購入クリック
    end
end



def scraping
  url = 'https://jp.trade.highlow.net/' #デモ
  driver = Selenium::WebDriver.for :firefox# ブラウザ起動
  wait = Selenium::WebDriver::Wait.new(timeout: 1000)
  driver.navigate.to url
  puts "サイトにアクセス開始"
  driver.manage.timeouts.implicit_wait = 1000
  puts "======スクレイピング開始======#{Time.now.strftime("%Y-%m-%d %H:%M:%S")}======"
  puts "デモクリック"
  wait.until { driver.find_element(:xpath, "//a[@class='highlight hidden-xs outlineNone']").displayed? } #要素の確認
  driver.find_element(:xpath, "//a[@class='highlight hidden-xs outlineNone']").click #demoをクリック
  puts "取引を始めるをクリック"
  wait.until { driver.find_element(:xpath, "//a[@class='exit-onboarding btn btn-default btn-extruded last-child']").displayed? } #要素の確認
  driver.find_element(:xpath, "//a[@class='exit-onboarding btn btn-default btn-extruded last-child']").click#取引を始めるのクリック
  puts "Turboタグをクリック"
  sleep(1)
  wait.until { driver.find_element(:xpath, "//*[@id='assetsGameTypeZoneRegion']/ul/li[3]").displayed? }
  driver.find_element(:xpath, "//*[@id='assetsGameTypeZoneRegion']/ul/li[3]").click #turboのタブをクリック
  puts "1分足をクリック"
  wait.until { driver.find_element(:xpath, "//*[@id='assetsCategoryFilterZoneRegion']/div/div[3]").displayed? }
  driver.find_element(:xpath, "//*[@id='assetsCategoryFilterZoneRegion']/div/div[3]").click#1分足のタブをクリック


  puts "全ての資産タブをクリック"
  wait.until { driver.find_element(:xpath, "//div[@id='highlow-asset-filter']").displayed? }
  driver.find_element(:xpath, "//div[@id='highlow-asset-filter']").click#全ての資産タブを選択
  puts "GBP/JPYの通貨ペアを入力して選択"
  wait.until { driver.find_element(:xpath, "//*[@id='searchBox']").displayed? }
  driver.find_element(:xpath, "//*[@id='searchBox']").send_keys("GBP/JPY")
  wait.until { driver.find_element(:xpath, "//*[@id='assetsFilteredList']/div").displayed? }
  driver.find_element(:xpath, "//*[@id='assetsFilteredList']/div").click

  martin = 1 #初期のマーチン設定

  loop do #取引を常に行う
    #残高確認
    wait.until { driver.find_element(:xpath, "//span[@class='balance-display balanceValue balanceArea last-child']").displayed? }
    zandaka1 = driver.find_element(:xpath, "//span[@class='balance-display balanceValue balanceArea last-child']").text
    zandaka2 = driver.find_element(:xpath, "//span[@class='cashback-balance balance-display last-child']").text
    if zandaka2.empty?
      zandaka_x = zandaka1.delete("¥").delete(",").to_i
    else
      zandaka_x = zandaka1.delete("¥").delete(",").to_i + zandaka2.delete("¥").delete(",").to_i
    end

    high_low_xxx = ["high", "low"].sample #ランダムでhigh or lowを返す
    # エントリー金額の設定
    if martin == 1
      entry_price = 1000
    elsif martin >= 129 #8回以上のマーチンは20万円のエントリー金額を超えるのでまた1000円からやり直し 
      entry_price = 1000
    else
      entry_price = 1000 * martin
    end 

    high_low_purchase(driver, wait, high_low_xxx, entry_price) # エントリー
    sleep(80) #エントリー結果の確認待ち時間

    #残高確認
    zandaka1 = driver.find_element(:xpath, "//span[@class='balance-display balanceValue balanceArea last-child']").text
    zandaka2 = driver.find_element(:xpath, "//span[@class='cashback-balance balance-display last-child']").text
    if zandaka2.empty?
      puts "現在の口座残高 : " + zandaka1.to_s
      zandaka_y = zandaka1.delete("¥").delete(",").to_i
    else
      puts "現在の口座残高 : " + zandaka1.to_s + "  キャッシュバック金額 : " + zandaka2.to_s
      zandaka_y = zandaka1.delete("¥").delete(",").to_i + zandaka2.delete("¥").delete(",").to_i
    end

    #マーチン設定など
    if zandaka_x < zandaka_y
      martin = 1
      puts "勝ち!! うほー今夜は焼肉だ!!"
    elsif zandaka_x == zandaka_y #エントリー出来ていない場合は何もしない。
    else
      martin = martin * 2
      puts "負け くそー次はマーチンで倍掛けだ!!"
    end
  end

end # scraping end

scraping


f:id:hogehoge_kato:20190610155102p:plain


f:id:hogehoge_kato:20190610155111p:plain


f:id:hogehoge_kato:20190610155120p:plain



私自身が実践で投入するかといわれると少し修正(エントリーのタイミングなど修正)してしばらくデモ口座で回してみて判断します。
テクニカル、ファンダメンタルズをガン無視したランダムでのエントリーなので良くも悪くも運が大きく、その運をマーチンでカバーしている感じかな。

■懸念点
このままで動かす事はないのですが、もしデモ口座で良い感じ成果が出てリアル口座で動かそうとなった時の懸念点など。
1) 取引回数クソ多い問題。
単純にですが15時間動かすとして80秒間隔でエントリーしていると約675回/日エントリーする事になりますwこれはさすがにやり過ぎかなーと。

2) マーチン前提なのでいつか連続9回負けの可能性があり、その時は今までの利益でカバー出来るか分かりません。しかもそれは連続で起こる可能性もあり。

3) そもそも自動売買はハイローオーストラリにとってNG行為なのでバレる可能性あり。エントリーが高頻度だと余計に。。。(個人的に垢バンは利益額とは考えますが)


■対策など
いくつか思いつきますが、ここらへんはノウハウになってくるので機会があればーでw

■自動売買ツールについて
上記コードでの不具合や損失などの保証は出来ませんのでご理解の上ご利用下さいませ。

またこんなロジックあるんだけど自動売買出来ない?などご質問あればお気軽にコメント下さいませー一緒に儲けましょう!!w