ruby seleniumのThread処理のエラー処理方法
自分用メモ
先日紹介したseleniumのThread処理のエラー処理方法。
"ruby seleniumで複数のブラウザで並行処理を行う方法 バイナリーオプションで同時に複数の通貨ペアエントリー"
abitra.hatenablog.com
バイナリーオプションのハイローオーストラリアのサイトは時々思い通りには動かないので注意が必要。
プログラム的には細かくパーツ毎にプログラムを分けて、その分けたパーツ毎にエラー処理をいれるといった方法がいいのかなーと考えています。
Threadのエラー処理は少し注意が必要
初っ端から言い訳ですw
私はガチプログラマーでは御座いませんので今回の方法は最適ではないかもしれませんのでご了承下さいませ。
私はバイナリーオプション(ハイローオーストラリア)のエントリーはThreadを立ち上げて動かしています。
理由は同じ時間足で同時に複数通貨ペアのエントリーがあるので、その対応にって感じです。
バイナリーオプションの自動売買はseleniumで運用しています。
でseleniumは時々止まる。。。エラーを起こす。。。
この原因はよく分かりませんがw
対応としてはエラーを起こした場合は再度ブラウザを読み込みを行う。又はエントリー機会を逃したとしてエントリーを諦める。
特にバイナリーオプション及びFXの場合はエントリータイミングを逃すと同じ機会は訪れないのでエラー処理の対応次第でエントリー回数が変わってきます。
例えば "USDJPYでエントリー条件が110円以上で10分後締め" のエントリー条件とした場合。
エラーなどでブラウザが止まったりしても9分間の時間的な余裕があります。
その間にエラー処理して再度ブラウザの更新などすればOK。
9分間のうちに110円以上になればエントリーはいつでもいいのでねー
エラー処理でエントリー出来ない例としてはハイローオーストラリアのターボ取引とかは対応は難しいかもしれないので注意が必要。
エラー処理するとどんなに早くても1-2秒は余計に時間が掛かります。
その間に有利な条件になればいいのですがターボの場合は判断が難しい。
エラー処理 例 beginとretry
基本的にエラーを起こした場合
私はbeginとretryでエラーを処理しています。
※以下コードは全てloop処理で動かしていると考えて下さいませ。
こんな感じ。
def hogehoge begin #ここに処理をいれる rescue #エラーの処理 #エラーが起きた時 retry end #beginのend end
こんな感じでbeginでエントリー処理囲ってしまってretryで処理していました。
Threadの問題点
Threadで立ち上げて処理はjoinしてあげないとThreadでエラーを起こしても無視されてしまいます。
動かし始めはこの処理を知らなかったのでThreadの立ち上げを諦めようかと考えました。
エラー処理しようにもエラーが返ってこないのでretryが出来ない。。。
def hogehoge begin aiueo =[["aaaa","bbbb"],["cccc", "dddd"]] aiueo.count.times do |n| t = Thread.new do aaa = aiueo[n][1] p aaa end #thread end t.join # ←ここのjoinが重要 end #count end rescue #このメソッドエラーの処理 retry end #beginのend end
このt.join がないとThreadでエラーを起こしても何もなかった事にされますw
Thread内でbeginのretryをしたらどうなるの?
ではThreadないでbeginとretryをしたらどうなるのか?
def hogehoge begin aiueo =[["aaaa","bbbb"],["cccc", "dddd"]] aiueo.count.times do |n| t = Thread.new do begin aaa = aiueo[n][1] rescue retry end end #thread end t.join # ←ここのjoinはいらない end #count end rescue #このメソッドエラーの処理 retry end #beginのend end
問題なくretryが動きます。この場合はjoinは不要でThreadが立ち上がっている限り動きます。
ですが個人的には一応joinを入れてエラー処理を二重にしています。
これらの方法がベストかどうなのかは分かりませんが、今の所良い感じ。
気を付ける点としてはスクレイピング時のretryの回数制限。個人的にですが3回以上のretryは止めています。
理由は特にありませんが常にハイローオーストラリアのサイトでretryし続けるはさすがにアレな気がします。
またエラー処理して即retryするのも何となく嫌な気がするのでsleep処理などで1-2秒程時間を開けています。
この辺りは個人的な考えなので気にしなくても良いかもですが、無茶はしない方がいいよって気がします。
焦ってエントリーするよりもエントリー機会はまた訪れると考えてエラー処理からのretryは程ほどに。
バイナリーオプション(ハイローオーストラリア)の勝率とエントリー回数の関係について
自分用メモ
エントリー回数と勝率を計算及び比較
エントリー回数と勝率について
勝率80%と勝率60% どちらが利益を多くだせるのか?
エントリー回数が同じであれば勝率80%の方が利益を多く出せます。書くまでもなくあたりまえー
勝率が重要なのは言うまでもないのですがエントリー回数も重要。
バイナリーオプションの利益の計算
※ハイローオーストラリアの場合で計算しています。
ペイアウト率 : 0.88
エントリー金額 : 1000
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
100 | 75% | 66000 | 25000 | 41000 |
100 | 70% | 61600 | 30000 | 31600 |
100 | 65% | 57200 | 35000 | 22200 |
100 | 60% | 52800 | 40000 | 12800 |
100 | 55% | 48400 | 45000 | 3400 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
200 | 75% | 132000 | 50000 | 82000 |
200 | 70% | 123200 | 60000 | 63200 |
200 | 65% | 114400 | 70000 | 44400 |
200 | 60% | 105600 | 80000 | 25600 |
200 | 55% | 96800 | 90000 | 6800 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
300 | 75% | 198000 | 75000 | 123000 |
300 | 70% | 184800 | 90000 | 94800 |
300 | 65% | 171600 | 105000 | 66600 |
300 | 60% | 158400 | 120000 | 38400 |
300 | 55% | 145200 | 135000 | 10200 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
400 | 75% | 264000 | 100000 | 164000 |
400 | 70% | 246400 | 120000 | 126400 |
400 | 65% | 228800 | 140000 | 88800 |
400 | 60% | 211200 | 160000 | 51200 |
400 | 55% | 193600 | 180000 | 13600 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
500 | 75% | 330000 | 125000 | 205000 |
500 | 70% | 308000 | 150000 | 158000 |
500 | 65% | 286000 | 175000 | 111000 |
500 | 60% | 264000 | 200000 | 64000 |
500 | 55% | 242000 | 225000 | 17000 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
600 | 75% | 396000 | 150000 | 246000 |
600 | 70% | 369600 | 180000 | 189600 |
600 | 65% | 343200 | 210000 | 133200 |
600 | 60% | 316800 | 240000 | 76800 |
600 | 55% | 290400 | 270000 | 20400 |
エントリー回数 | 勝率 | 獲得 | 損 | 利益 |
---|---|---|---|---|
100 | 80% | 70400 | 20000 | 50400 |
700 | 75% | 462000 | 175000 | 287000 |
700 | 70% | 431200 | 210000 | 221200 |
700 | 65% | 400400 | 245000 | 155400 |
700 | 60% | 369600 | 280000 | 89600 |
700 | 55% | 338800 | 315000 | 23800 |
勝率80% で100回エントリーと勝率60% で500回エントリー出来る機会であれば勝率60%の方が利益が出る。
裁量でもバイナリーオプションの自動売買でも勝率を求めがちですがエントリー回数も重要。
勝率低くても利益が優先。
もちろんベストは勝率80%で高回数のエントリーですがねw
エントリー機会を絞っていけば高勝率は出来る可能性がありますが、その絞ったエントリー回数とそうでない場合のエントリー回数の比較して利益ベースで選択する。
エントリー回数の考え方
どちらかといえば裁量でのエントリー時に気を付けたい勝率の考え方かもしれません。
裁量の場合、勝率上げたいのでエントリーを絞りがち。
もちろん裁量もバックテストしてエントリーポイントや平均的な勝率を把握した上でですが実際エントリーとなると絞りたくなるのが心情。
絞るのは悪くないのですがねー絞り過ぎるとエントリー出来なくなる。
理由としてはバックテスト時は簡単に24時間エントリーポイントを見つける事が出来るのですが実際はリアルタイムでエントリー出来たり出来なかったりして、そのエントリー出来なかったエントリーポイントの方が根拠が強かったり魅力的だったりすると直近のエントリーポイントと比較して見送ってしまったりする。
(私だけかもしれませんがw )
自動売買であれば極端な高勝率が出る事がないのでエントリー回数を注目しやすいかな。
そんな時は今回の記事を思い出してエントリー回数も重要って事も思い出す。
追記 2019年8月10日
TMシグナルインジゲーターの取引回数の重要性を追加しましたー
"TMシグナルインジケーターとバイナリーオプション(ハイローオーストラリア)の取引回数の重要性"
abitra.hatenablog.com
FX ドテン君 フォワードテスト 約3か月状況報告
半個人メモ
ドテン君のフォワードテストが約3ヶ月経過したのでご報告。
結果報告
1時間足のドテン君は結果マイナスです。
lot数の違いなどにより利益率などは変わりますが80%位といった感じでしょうか。
4時間足のドテン君の結果はプラスです。
約120-130%位。
一時期初めて1っカ月もたたない位で200%近くになっていたのでこれは期待出来ると考えたのですが、トレンドが終わると利益が減っていきます。。。
実際フォワードテストしての感想
何かしらのトレンドが発生しているときはいいのですがレンジが続くと辛いなーと。
ドテン君の特徴として抜けるとポジションを持つので幅の大きなレンジが続くと死ねるw
一応バックテストの結果からトレンドが発生しないと辛いことは分かっていましたが改めて年を通して考えていかなといけないと感じました。
下手したら数年は考えないとダメなロジックになりますかねー3カ月だけでは判断出来ないw(意味がないとかではないのですがw)
実弾の運用を開始するの?
4時間足の方は実弾開始しようかと考えています。
フォワードテストでは複数の通貨ペアで動かしていますが、1-2通貨にして様子をみようかと考えています。
実弾運用にあたっての対応
手動による決済は考えた方がよさそうです。
lot数は固定の方が良さそうです。
証拠金に合わせて変動lotでも運用しているのですがレンジで死んでるwトレンド発生していると爆益ですが、固定ロットで手動で小まめに変更した方が良さげ。
7月頭ごろのポジション
直近2019年7月19日頃
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を利用して処理をしています。
Uber Eatsの配達で楽々稼ぐ方法を見つけたかも
以下方法は出来るかどうか検証していません。
また個人的におすすめしている訳では御座いません。
※私は行いません。
FX及びバイナリーオプションは全く関係ない記事ですがアービトラージっぽいのかなーとも考えているので方向は同じ。
Uber Eatsの配達で楽々稼ぐ!!
※私はUber Eatsの配達員を一度も行った事がないので想像だけで書いてますのでご了承下さいませ。
最低限必要なものスマホ2台とUber EatsのアカウントとUber Eatsの配達員側のアカウント。
Uber Eatsのキャンペーンの逆手をとる
前提としてUber Eatsの配達無料キャンペーンの時にしか使えない手法と考えます。
Uber Eatsですが時々配達料を無料キャンペーンを行っています。Uber Eats側が費用負担してのキャンペーンかと。
正直私は配達料無料キャンペーンの時にしか利用しないのですごく助かっています。
で先日からマクドナルドの配達無料キャンペーンが始まっており利用したのですが、その時の感じた違和感。
普段からマクドナルドではチーズバーガーの単品でしか頼まない事あるので、Uber Eatsでもチーズバーガー単品を頼もうかと。
チーズバーガー単品の値段は150円(店舗だと130円)。
これこのまま頼むとチーズバーガーの150円のみで配送料無料で届けてくれます。何度でも!!!
やばくないですか何度でも150円でチーズバーガー届けてくれるんですよw
Uber Eatsの配達員の一件当たりの配達料は550-700円前後(Uber Eats => 配達員に支払われる費用)
他の方のブログ等を拝見する限り1件辺りの配達料は550-700円との事。
何件以上配達するとボーナスとか色々あるようですが今回は無視。単純な配達料にて計算。
アービトラージの道が見えてきた
上記前提から注文と配達料の差額で儲かるんじゃないか疑惑。
チーズバーガーの150円の費用で、配達料550円を獲得。差額400円。
Uber Eats アービトラージ手法
仲間内で一人は注文、もう一人は配送。これを永遠に繰り返す。
注文よりも配達料の方が高い限り使えます。
↑えーだったら普通に配達員として他の人に配達した方がよくない?疑惑。
違います。それだと普通にUber Eatsの配達員。この手法のミソは配達手間を限りなく小さくする事。
どぎついやり方をすればマクドナルドの店の入り口で一人がUber Eatsを使って注文して、もう一人に届けてもらえば配送手間はほぼ無いに等しい。
で仲間内で再度注文して即届けてもらってを繰り返していく。マクドナルド内で配達を繰り返している様な感じw
出来るか分かりませんが自分で注文して自分で配達が出来れば完璧なアービトラージです。
スマホ2台使えば完璧なアービトラージ出来そうなんですけどねー 配達用スマホと注文用スマホに分けてやれば。。。
利用規約を読んでないけど注文回数に制限もないと仮定すると100回やれば4万円。
利益を出す事だけを考えての方法になりますので、100個もチーズバーガー注文してもどうするんだ?といった事は無視してます。
確かハンバーガーもあるので120円の費用に抑える事も出来る。
懸念点
必ず注文したチーズバーガーを配達出来るとは限らない可能性問題。(配達員をした事がないので雰囲気が分かりませんw)
即バレ&即アカバン まぁ注文数やらなんやかんやは見られていると思うので。。。
送料無料キャンペーンが無かったら利益が小さすぎて使えない。
まとめ
妄想で書いているだけなので有効かどうか分かりませんw
何か起こったとしても私は一切責任も持てませんのでw妄想なのでねーw
裁量が最強。それはまぁそうなんやけど自動売買の方が好きって矛盾。
自分用メモ(2019年7月16日現在の思いメモ)
将来自分で見直してあの時の思いを思い出す用。
以下バイナリーオプション(ハイローオーストラリア)前提の話です。
BO仲間と打ち合わせをしていて出た話題。
「やっぱり裁量が最強だよねー」って。
うーん。半分正解で半分違うんじゃねーって(正確には私の中でのモヤモヤ感)
裁量が最強
勝ってる人の勝率だけで考えると裁量が最強は同意。
私の師匠は裁量のみですが安定して80%程で利益を取れてるので本当に凄いなーと。
その弟子達(私も含む)はどうなのかと考えるとうーん。勝ってる人もいるけどそうでない人もいる。
師匠の教えを聞いたから絶対勝てる訳ではない。
センスといえば終わりなのですが、センスだけで片付けられない何かがある。
あらゆる考え方をセンスで言ってしまいがち。
私も含め弟子たちは間違った相場の知識、認識を持っている可能性もあるのですが、それとは別の何かが違う。
師匠含め勝ててる人は抽象化と具体化がうまい気がする。そしてそれを人に伝える為の言語化が出来ている。
言語化する為には市場の知識やらローソク足、流れ、タイミングなども理解していないとダメ。
あと根拠はないですが裁量で高勝率の人はゲームが上手い気がするw
話戻って勝てる人前提で考えると裁量の勝率には自動売買では絶対に勝てないと考えてます。
自動売買だと短期的に特定の時間で結果的に80%とかはあるけどトータルでみると60%いかない位に落ち着く。
ですが自動売買のメリットは勝率だけで判断するのは間違ってるなーと。
自動売買のメリットは自身の時間確保とトレード以外での安定収益 精神的な安定
自動売買をお勧めする意図では御座いません。裁量、自動売買も一長一短でどちらが最強って事はないのかなーと。
その上で自動売買のメリットの話。
自動売買で自分の時間を確保
私の場合ですがチャートを見なくてもいいのが本当に気が楽です。(チャート見ることに苦痛があるわけでないですが特に楽しいとも感じていないので)
主夫をしているので子供のお迎えや晩御飯、寝かしつけなどしていると夕方から夜までは何も出来ません。
裁量をメインで考えていた時はこの時間帯にチャートが見たくてイライラしていましたが自動売買化してからは気にしなくなり子供と遊ぶ時間が持てています。
トレード以外の収益化
自動売買プログラムを他者への販売等によるトレード以外で収益を出す事が出来ます。
私もこっそりいくつか提供して収益化しています。
月額課金での提供もあるのでトレードで損をしていてもここまでは大丈夫って精神的な安定が半端ないです。
精神的な安定
私が未熟な部分が影響しているのですが裁量の精神的なストレスは辛いです。
自分自身を信用しきれていないのも原因かもしれませんが、自動売買にその部分が薄いですw
バックテストをプログラム的に行っているので過度な期待もないのが理由かもしれません。
ちなみによく巷で言われているのが儲かってたら他者への提供はしない。って話。
半分はあってるけど、半分は違う。
儲かってるってレベルにもよりますが儲かっていても他者提供することにより収益化出来るのであれば他者提供はアリ。破壊的なメソッドまたはバグを突くような方法はナシ。
裁量と自動売買どっちがおすすめ?
個人的には自動売買の方がいいかなーって考えてます。(自身でプログラム組める人は)
自身でプログラム組めずに誰かのプログラムを買ってって人は裁量もやった方が良いかなー
正直好みの問題でもあるので絶対こっちってのは無い。
その上で私が自身でプログラム組める人って書いたのは、トレードで負けてもプログラムノウハウは裏切らないってのがあるから。
自身でプログラム組めれば取引ロジックの変更なども出来るし何らかの方法で収益は出すことが出来ると考えてます。
まぁ今の気持ちを書いただけなので将来どう考えているかは知りません。
やっぱ裁量サイコーって言って裁量メインで取引しているかもしれませんしw
ちなみに承認欲求を求めるのであれば裁量かな。
TMシグナルインジゲータをFXのスキャルピングで運用したらどうなる
TMシグナルインジゲータをFXで運用したらどうなるのかを検証してみました。
簡単に説明するとバイナリーオプション(ハイローオーストラリア)用のインジゲータをFXで運用したらどうなるのかの検証ですね。
もちろんTMシグナルインジゲータはFX用のインジゲータでは御座いませんので期待はしていませんw
ですがバイナリーオプションの逆張りで良い感じに成績が出ているのでFXでも逆張りのスキャルピングでいけんじゃないのかなーって淡い期待をせずにはいられませんでしたw
バックテスト条件など運用
通貨ペア : USDJPY
時間 M5(5分足)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
エントリーは逆張り
StopLoss=20 => 120まで最適化
TakeProfit=20 => 120まで最適化
エントリーは順張りでもテスト
Moment trueとfalse両方でテスト
結果発表
もったいぶってもあれなので早速結果発表。
はっきりと言って儲かりません。勝率も最適化などを行いましたが50%超える事はなかったですねー
酷い結果だと勝率25%などもあったので、これは順張りであればいけるかもと思ってテストするも勝率は低いままw
利益が出ない理由
FXはスプレッドがありスキャルピングだと小さいスプレッドが大きく影響して勝率を上げる事が出来ていない。
FXのエントリータイミングとは違うバイナリーオプション用のロジックなのでエントリーのタイミングが合っていない。
因みに5分足以外にも1分足だとどうだろう?と思い検証してみましたがダメですw
5分足よりも結果がひどいw
結論
TMシグナルインジゲータはバイナリーオプション(ハイローオーストラリア)用のインジゲータ!!
FXの逆張りタイミングとは違うロジックが入っているのか逆張り、順張り共に結果は悪い。
もしかしたらUSDJPY以外の通貨であれば成果の出る通貨もあるかも知れませんが。。。うーん。調べるの面倒w