TOB/MBOを早く知るには?株探RSSとPythonで作る簡易通知システム
最近、TOBやMBOの発表をできるだけ早く知りたいと思うようになりました。 特別な理由があるわけではないのですが、気づいたときには株価が大きく動いていた、ということが何度かあり、 「それなら自分で監視したほうが早いのでは」と考えたのがきっかけです。
スポンサーリンク
RSSを使って監視し、特定のキーワードが含まれていれば通知する。 仕組みとしてはとてもシンプルで、Pythonで書けばすぐ動きます。 ただ、実際に作ろうとすると、思っていたよりも“どこで動かすか”という問題が大きく、 そこから考え方が少しずつ変わっていきました。
最初に考えた選択肢は、すぐに外れることになりました
最初はRaspberry Piも検討しましたが、常時稼働には向かないと判断し、別の方法を探すことにしました。 Pi自体は便利なデバイスですが、今回の用途とは少し方向性が違うように感じました。
どのRSSを監視すればいいのか調べてみました(ここが“今の正解”)
TOB/MBOの通知システムを作るうえで、 「どのRSSを監視すればいいのか」 は最初の大きなポイントです。
結論から言うと、今使えるのは 株探のRSS です。
理由は次の通りです。
- TDnetのRSSはすでに廃止されています(昔はあったが今は404)
- EDINETは有報・四半期報などが中心で、TOB/MBOの速報には向きません
- Yahooは公式RSSを提供していません
- 株探は今もRSSを提供していて、更新が速い
つまり、実用的に使えるのは株探一択です。
監視に使えるRSSはこれです。
コード
https://kabutan.jp/news/?mode=1&category=0&rss=1
株探の「重要ニュース」全体のRSSで、 TOB/MBOの発表もここに流れてきます。
Googleの無料枠で代用できないか調べてみました
次に考えたのが、Googleの無料サービスを使う方法です。 Pythonが動く環境はいくつかありますし、無料で使えるものも多いので、 「もしかしたらこれでいけるのでは」と思って調べてみました。
ただ、実際にはどれも常時稼働には向いていませんでした。
- Google Colab → 12時間でセッションが切れます
- Cloud Functions → イベント駆動で、常時動かす用途ではありません
- Cloud Run → アイドル時に停止します
- Compute Engine → 無料枠は北米リージョン限定です
こうして並べてみると、Googleの無料サービスだけで「24時間動くPython環境」を作るのは難しい、という結論になりました。
そもそも24時間監視は必要なのか、という疑問が出てきました
ここまで調べているうちに、ふと立ち止まって考える瞬間がありました。 「TOBやMBOの発表って、夜中に出ることはあるのだろうか」と。
これは経験的にも知っていたことですが、改めて考えると、 ほとんどの発表は平日の日中(9〜17時)に出ます。
企業の大きな意思決定なので、 取締役会や法務チェック、監査法人、証券会社、IR部門など、 多くの関係者が動く必要があります。 深夜に発表する理由がありません。
実際、深夜に出るケースは年間を通してもほとんどありません。 この事実を思い出したとき、 「24時間監視する必要はないのでは」と考え方が変わりました。
最小構成のPythonコード(参考まで)
RSSを監視する最小構成は、実はこれだけです。
python
import feedparser
RSS_URL = "https://kabutan.jp/news/?mode=1&category=0&rss=1"
KEYWORDS = ["TOB", "公開買付", "MBO"]
feed = feedparser.parse(RSS_URL)
for entry in feed.entries:
if any(k in entry.title for k in KEYWORDS):
print(entry.title)
print(entry.link)
entry.titleに「TOB」「公開買付」「MBO」が入るentry.linkで元記事に飛べる- 株探は更新が速いので、ほぼリアルタイムで拾える
この“骨格”さえあれば、あとは通知先を差し替えるだけです。
試作は Google Colab で十分だと感じました
24時間稼働が不要であれば、もっと軽い環境で十分です。 そこで改めて Google Colab を見直してみると、 これが試作にはちょうど良い環境でした。
- 無料で使える
- Pythonがすぐ動く
- ブラウザで結果が確認できる
- HTMLも表示できる
Colabで動かすときのコツは次の通りです。
- セルは「設定」「RSS取得」「判定」「表示」に分ける
- 30秒間隔で回すなら
time.sleep(30) - HTML表示は
from IPython.display import HTML - セッションが切れたら再実行するだけでOK
日中だけ動かす用途には十分です。
本番運用は、必要になったときに考えれば良いと思いました
もし将来的に、 「やっぱり24時間監視したい」 「通知をもっと安定させたい」 という気持ちが出てきたら、そのときにVPSを使えば良いと思っています。
月500円ほどのVPSでも、 Pythonの常時稼働やcronによる定期実行は問題なくできますし、 熱や停電の心配もありません。
ただ、現時点ではそこまでの必要性を感じていません。 まずは日中だけ動かす試作で十分だと考えています。
通知先は後から決められるようにしておくと便利です
通知先については、LINE NotifyでもDiscordでもSlackでも構いません。 最初からどれかに固定する必要はなく、 通知部分を関数として切り出しておけば、後からいくらでも差し替えられます。
最初は print で動作確認をして、 安定してきたら通知先を追加する、という流れが自然だと思います。
まとめ:完璧な環境を用意する必要はありませんでした
今回、TOB/MBO通知システムを作ろうとして感じたのは、 最初から完璧な環境を整える必要はないということです。
- 夜中にTOBはほぼ出ない
- 24時間稼働は不要
- 試作はColabで十分
- 本番は必要になったらVPSへ
- 通知先は後から決めれば良い
- 今使えるRSSは株探だけ(ここが“今の正解”)
こうして整理してみると、 最初に考えていたよりもずっとシンプルな構成で始められることに気づきました。
まずは日中だけ動かす試作から始めて、 必要になったら本番環境へ移行する。 そんな段階的な進め方が、自分には合っているように思います。