こんにちは。TATです。
今日はお待ちかねのおふざけ企画です。(誰も待ってないかもですが・・・)
株クラで目にする「おはぎゃー」のプロセスを自動化してみますw
最近のPythonネタはふざけてばかりですね。すみません。
株クラ界では、朝起きてアメリカ株が暴落していることを確認すると、finvizのヒートマップのスクショなどとともに「おはぎゃー」とか「紅だーーーーー」などとツイートする人々がいます。
こちらの作業の通常の流れとしては、朝起きて株価をチェックして、めっちゃ下がっていたらスクショをとってツイートする感じかと思います。
全てマニュアルで行う作業ですね。
僕はこのプロセスをPythonを駆使して全自動化することに挑戦しました(笑)
どこからも需要ないですね。すみません。
目次
【Pythonでデータ分析】株クラで目にする「おはぎゃー」のプロセスを自動化してみた!
株クラ界で頻発する「おはぎゃー」とは?
まずは今回の自動化対象となる「おはぎゃー」についてみておきます。
冒頭でもご紹介した通り、「おはぎゃー」とは、アメリカ株が暴落した翌日に投資家さんたちがTwitterを介してfinvizのヒートマップのスクショなどと共にツイートすることを指します。
「おはよう」と「(株価が落ちて)ぎゃああああああああああ」を組み合わせた言葉です。
株の情報収集のためにTwitterを利用している方なら一度は見たことがあるのではないでしょうか。
こんな感じです。
おはぎゃーです😇
アメリカ市場は
真っ赤に燃えてしまいました🔥NYダウ -0.46%
NASDAQ -3.02%
S&P500 -1.48%
ラッセル2000 -2.95%
半導体指数 -4.24%
米10年国債 1.719%日本市場がどうなるか楽しみですね☺️
今日も一日楽しみましょう! pic.twitter.com/86jS5m5cFe— かむい@投資家 (@kabutotomoni) March 18, 2021
ちなみに「おはぎゃー」だけでなく「紅だーーーーーーー」というパターンもあります。
🇺🇸米株「紅だぁーーーーー!!」😱今週2回目
ダウ -730
6/24(水) -710①米感染拡大
②テキサス州など経済規制の再強化
③金融株の下落
FRB ストレスとスト結果 配当制限・自社株買い制限
④ナイキ 決算❌赤字 コロナの影響
⑤フェイスブックの下落 大手が広告掲載停止
⑥ハイテク株に利益確定売り pic.twitter.com/PPp0FntHiZ— にこそく (@nicosokufx) June 26, 2020
僕はこういったツイートをみることを密かな楽しみにしています。
特に2020年2月あたりから始まったコロナショックで世界中の株価が大暴落していた時には、毎朝のように「おはぎゃー」や「紅だーーーーー」が連発されていました。
このプロセスを全自動化することが今回の目標です。
「おはぎゃー」ツイートまでのプロセスを分解する
「おはぎゃー」を自動化するために、必要なプロセスをブレイクダウンしてみます。
ツイートするまでに必要なステップは次の通りかなと思います。
- finvizなどでアメリカ株をチェックする
- 大幅に下落してたらスクリーンショットを撮る
- 画像を添えてツイートする
上記の通り。シンプルですよね。
人間がやるならこれくらいシンプルでも問題ありません。
しかしながら、これをプログラムにやらせるとなるといくつかの工夫が必要になってきます。
プログラムでやる場合のプロセスの一例がこちらです。(他にも色々あると思います)
- finvizからスクショを取得して画像ファイルとして保存する
- 取得した画像を解析して、全体的な動向を判定する
- 基準値を超えていたら、スクショとともに「おはぎゃー」ツイートをする
こちらもシンプルな3ステップに見えますが、実際やるとなると結構だるいです。
順番に見ていきましょう。
「おはぎゃー」プロセスをプログラムに落とし込む
それでは、「おはぎゃー」のプロセスをプログラムに落とし込んでいきます。
人間がやると簡単ですが、プログラムにやらせるとなるとそうもいきません。
ここを考えるのが楽しいところでもあります。
1. finvizからスクショを取得して画像ファイルとして保存する
ステップ1についてはPythonで利用可能なSeleniumを使うことで解決できます。
Seleniumはプログラムでウェブブラウザを遠隔操作できるライブラリーです。
人間がネットサーフィンする際の行動(ページ遷移やボタンのクリックなど)をプログラムを通して行うことができます。
もちろんスクリーンショットを撮ることも可能です。
Google Chromeなどをブラウザを操作して必要なページにアクセスし、指定した範囲をスクリーンショットして画像ファイルとして保存することができます。
ということで、ステップ1についてはSeleniumで全て解決できます。
2. 取得した画像を解析して、全体的な動向を判定する
ステップ2については、少し工夫が必要です。
いかにして「株価の全体的な動向を判断するか」です。
これにはいくつかの方法があります。
例えばこんな感じ。
- 画面から赤色の部分を抽出して画面全体に対する占有率から判定する
- 画像全体の平均色を計算して判断する
人間が判断するなら、パッと見て「全体的に赤いなー」くらいの感じで判断ができますが、プログラムにそんな融通は利きません。
きちんとロジックに落とし込んで、「この基準を超えたら「おはぎゃー」とする」みたいな明確なラインを設定する必要があります。
上記の2つはその例です。
どちらを使っても判定は可能なので、好みの問題とか導入の難易度とかを考慮して決定することになります。
ちなみに今回は、プログラムの実装的にも手っ取り早い「画像全体の平均色を計算して判断する」でいきます。
3. 基準値を超えていたら、スクショとともに「おはぎゃー」ツイートをする
ステップ3はシンプルです。
ステップ2で基準値を超えていたら、スクショを添えて「おはぎゃー」とツイートするだけですね。
TwitterにはAPI機能があるので、これを利用すればPythonを使って自動ツイートすることが可能です。
ただし、TwitterのAPIを利用するには申請が必要で、英語で用途などを説明する必要があります。(これが結構大変です)
無事に申請が通るとAPIを使えるようになります。
僕のTwitterアカウントはAPIの申請をクリアしています。(じゃないと自動ニュースとかできないですw)
図を添えたツイートももちろん可能です。
例えば、こちらのツイートはプログラムで自動投稿していますが、画像もきちんと添付されていることがわかります。
【自動ニュース】
「マザーズ指数」でディストリビューションが発生しました。
発生回数
・過去1週間:1回
・過去2週間:1回
・過去3週間:2回
・過去4週間:3回
・過去5週間:4回ディストリビューションは株価下落のサインです。
詳細はこちらの記事をどうぞ!https://t.co/pWf3y6Bfq1 pic.twitter.com/eAfcIX1j6U— TAT@ブログと株で資産形成中 (@investortat) March 19, 2021
ただし今回においては、このツイート部分はなしにして、スクショ画像を判定するところまでにします。
ツイートしてもフォロワーさんに迷惑かけるだけなのでw
「おはぎゃー」プロセスを実装する
それでは実装してきます。
Seleniumでfinvizのスクショを保存する
まずはfinvizのスクショを取得します。
サイトを見てみると、chartというクラス名がついていることがわかります。
ここを指定してスクショを保存すればOKですね。
ちなみにSeleniumで操作している際には、ブラウザに「Chromeは自動テストソフトウェアによって制御されています」と表記されます。
プログラムの解説は別記事にてご紹介するとして、ここでは取得したスクショを確認します。
余計な部分は排除されてヒートマップの部分だけがきれいに保存されていることが確認できます。
【Pythonコード解説】Seleniumでfinvizのヒートマップのスクショを保存する
続きを見る
OpenCVを使ってスクショ画像を解析する
次に取得した画像を解析してきます。
これにはPythonのOpenCVというライブラリーを使います。
OpenCVは画像解析のためのライブラリーで、画像認識とかのプログラムによく使われます。
OpenCVでスクショ画像を読み込むとこのような数値データに変換されます。
これは、行(高さ) x 列(幅) x 色(3)の3次元配列データになります。
それぞれのリストの中に数字が3つずつ格納されていますが、これらはそれぞれBGR(青、緑、赤)の数値を示しています。
色の3原色を使えばすべての色を表現できるので、データとして扱う場合にはこの3つの色に分解することが可能です。
この数値でフィルターをかけると、例えば赤色部分のみを抽出することも可能です。
こんな感じです。
ちょっとグロい感じになってしまいますが、赤色だけが抽出できていることがわかります。
画像全体の平均色を算出する
画像のデータが読み込めたところで、本題に戻ります。
今回、「おはぎゃー」を判定するためには、画像全体の平均色を用います。
つまり、読み込んだ画像全体の平均色を求める必要があります。
これはとてもシンプルで、先ほどの3次元配列の平均値を計算すればOKです。
OpenCVには平均を計算する関数があるのでさらに楽チンです。
上記の結果から、画像全体の平均色は赤茶色っぽいことがわかります。
数値にすると、赤が137、緑が87、青が83です。
「おはぎゃー」基準を決める
この結果を踏まえて、どれくらい赤が強ければ「おはぎゃー」と判定するかを決める必要があります。
改めてスクショを確認します。
全体的に赤色が多そうな印象はありますが、まだ緑色の部分も結構あることがわかりますね。
この平均色が赤茶色だったので、基準をもっと厳しくするなら基準値となる赤色はもっと強くても良さそうですね。
例として過去のスクショを使ってみます。
Twitterで調べて過去の写真を探してみました。
コロナショック時における暴落が発生していた頃のものです。
まさに「紅だーーーーー」ですね。
上にFinvizって言葉が入ってしまっていますが気にせずいきますw
上記の写真を解析すると平均色はこうなりました。
さっきと比べてかなり赤っぽくなりました。
数値で見ると、赤が181、緑が83、青が81です。
緑と青はほとんど変わらずに、赤だけがかなり大きくなりました。
ざっくり50増えましたね。
いくつかの画像の平均色をまとめてみました。
結果から、緑や青の基準はそこまできにする必要はなくて(適当に70以上とかでいいかな?)、赤の基準だけを気にすればいいことがわかります。
この例のようにほぼ全てが真っ赤に待っている時だけを「おはぎゃー」の基準に設定するなら、180を基準にすれば良さそうです。
ちょっと緩く設定するなら160とか170あたりが妥当でしょうか。
こんな感じで、いくつかのデータで検証しながら良さげな基準を設定できればOKです。
【Pythonコード解説】OpenCVを使ってfinvizのヒートマップ画像を解析する
続きを見る
「おはぎゃー」基準をクリアしたらあとはツイートするのみ
「おはぎゃー」基準をクリアしたら、あとはAPIを使ってツイートすればOKです。
これで株クラ界でよく目にする「おはぎゃー」のプロセスを完全自動化することができます。
ここでは、Twitterの自動化については省いてしまいましたが、興味のある方は是非とも挑戦してみてください。
そのためにはAPIの申請が必要です。
英語で用途の説明とかが必要になってくるので結構だるいですw
こういう場面を考えると、やはりプログラミングを学んでいる方は英語ができると強いです。
【経験談あり】プログラミング学習者が英語を学ぶべき理由!【メリットばかりです】
まとめ
いかがでしたでしょうか。
今回は、株クラでよく目にする「おはぎゃー」のプロセスを自動化してみました。
久しぶりのデータ分析記事かと思えば、相変わらずのおふざけ企画です。すみません。
ただ、この記事を通して、普段人間が行なっている作業をいかにプログラムに落とし込んでいくのか、そういったプロセス一部でも想像がついたのではないでしょうか。
実際に、プログラムを開発する際には、実現したいことをプロセスに分解して、それぞれをさらにロジックに落とし込んでいくことが必要になってきます。
「おはぎゃー」を自動化するというふざけたテーマでも、こういったことを学ぶことに繋がります。
どうせやるんだったら、楽しいことをやったほうが面白いですからね。
継続するには楽しむことも大切です(完全な自己正当化ですw)
今後、この「おはぎゃー」のプロセスを自動化するために必要なPythonコードについても解説していければと思います。
特にSeleniumを使ったウェブブラウザの遠隔操作はいろいろなことに利用できるので知っておくと便利です。
ふざけた企画でしたが、ここまで読んでくださってありがとうございました。