ruby seleniumで複数のブラウザで並行処理を行う方法 バイナリーオプションで同時に複数の通貨ペアエントリー
自分用メモ
バイナリーオプション(ハイローオーストラリア)のエントリー時ですが次足のタイミングエントリーの場合、同じ時間に2-3通貨ペアのエントリーが重なる事が時々ある。
例: 同タイミングで3通貨ペア(USD/JPY, GBP/JPY, EUR/JPY) 全部にアラートが出た場合を想定。
手動であれば事前にブラウザのタブを開いて2通貨位であれば何とかマウス裁きで行けるかなw
運用当初は1ブラウザ立ち上げで行っていた事もあり複数の通貨ペアのアラートが出た時はバックテストの結果から成績の良い通貨ペアでのエントリーを行っていました。
ですが同時に複数の通貨ペアにもエントリー出来ないかなーって欲求がw
そんな時はThreadで処理
私はrubyでseleniumを利用して自動売買を組んでいますがThreadのエントリー数分のブラウザ立ち上げで処理出来ないかなーと思いテストしてみました。
結果あっさり成功。
"ドラえもん", "アンパンマン", "ポケモン", "妖怪ウォッチ", "ドラゴンボール"のキーワードをランダムで複数ブラウザで同時に検索
4つブラウザを立ち上げて各ブラウザで検索を行っています。
プログラム的には
プログラム的にはブラウザ立ち上げの所をごっそりThreadで処理してやります。
上記動画のプログラム例
require 'selenium-webdriver' def yahoo(search, n) url = 'https://www.yahoo.co.jp/' #やほー driver = Selenium::WebDriver.for :firefox wait = Selenium::WebDriver::Wait.new(timeout: 100) driver.navigate.to url #ここに各検索処理などをずらずらずら #ここに各検索処理などをずらずらずら end search = ["ドラえもん", "アンパンマン", "ポケモン", "妖怪ウォッチ", "ドラゴンボール"] 4.times do |n| # nはなくてもOK 私はブラウザの位置調整でnを利用しているだけ Thread.new do yahoo(search.shuffle, n) end end sleep(60) #Thread処理対策。これ以外にも方法ありますが面倒なのでsleepにて対応。
簡単に書くとこれだけで複数ブラウザのほぼ同時に立ち上がります。
この方法は事前にブラウザ立ち上げてアラートが出ての即エントリー方法を採用しているロジックでは難しいかもです。
事前に立ち上げるブラウザ数が分からないため次足エントリーの方法のみで使えるのかなーと考えています。
実際のバイナリーオプション(ハイローオーストラリア)での処理はLoopを利用して処理をしています。