投資をしていると、チャートを四六時中チェックするのは本当に大変ですよね。仕事中や寝ている間に絶好のチャンスを逃してしまい、後悔した経験がある方も多いのではないでしょうか。
そんな悩みを解決するのが、Pythonを使ったテクニカル分析の自動化です。この記事では、人気指標の「RSI」を使い、買われすぎの状態を自動で検知して通知する仕組みの作り方を詳しく解説します。
RSI(相対力指数)とは?自動化の前に知っておきたい基本
RSIは、今の相場が「買われすぎ」か「売られすぎ」かを数字で教えてくれる便利な指標です。自動化のプログラムを書く前に、まずはRSIがどのような仕組みで動いているのか、その全体像を整理しておきましょう。
この章では、RSIの計算の仕組みや判断基準、そしてなぜわざわざPythonを使って自動化するのか、そのメリットについてお伝えします。
RSIが「買われすぎ」を示す仕組み
RSIは、一定期間の値動きの中で「上昇した分の勢い」がどれくらいあるかを0から100の数値で表したものです。例えば、価格が上がり続けていれば数値は100に近づき、下がり続けていれば0に近づきます。
相場の過熱感を視覚的に把握できるため、逆張りの指標として多くの投資家に愛用されています。
プログラムで計算する際も、この「勢いの割合」をデータとして取り出すことが最初のステップになります。
例えば、急激な高騰が起きたとき、RSIはすぐさま反応して高い数値を示します。
この数値の動きを機械的に監視することで、人間の感情に左右されない判断が可能になります。
一般的な判断基準は「70」と「30」
RSIを活用する上で最もポピュラーな基準が「70以上は買われすぎ」「30以下は売られすぎ」というラインです。このラインを超えると、相場が反転する可能性が高まると判断されます。
もちろん、銘柄や市場の状況によってこの基準を80や20に変更することもありますが、まずは基本の数値をマスターしましょう。
以下に、一般的なRSIの判断基準をまとめました。
RSIの数値に応じた相場状況の目安は以下の通りです。
| RSIの数値 | 相場の状態 | 一般的な判断 |
| 70以上 | 買われすぎ | 売りを検討する局面 |
| 50 | 中立 | トレンドの分岐点 |
| 30以下 | 売られすぎ | 買いを検討する局面 |
この基準値をプログラムに覚えさせることで、24時間休まずに相場をチェックさせることができるようになります。
なぜ手動ではなくPythonで計算するのか?
手動でチャートを見る場合、どうしても「もう少し上がるかも」といった主観が入ってしまい、判断が遅れることがあります。Pythonを使えば、あらかじめ決めたルール通りに、一瞬で正確な計算を行えます。
また、複数の銘柄を同時に監視できるのも大きな強みです。
10個も20個もチャートを並べて眺めるのは疲れますが、プログラムなら一瞬で全てのRSIを計算してくれます。
例えば、深夜に急騰した銘柄があったとしても、プログラムが動いていれば見逃すことはありません。
自分の代わりに機械が働いてくれる環境を作ることで、投資のストレスを劇的に減らすことができます。
Pythonでテクニカル分析を始める準備
自動化を始めるには、まずはパソコンにPythonの環境を作り、必要な道具(ライブラリ)を揃える必要があります。難しい設定は不要で、数行のコマンドを入力するだけで準備は完了します。
ここでは、インストールすべきライブラリの種類や、初心者でも使いやすい開発環境について具体的に紹介していきます。
必要なライブラリをインストールしよう
テクニカル分析には、データの加工が得意な「pandas」や、株価を取得する「yfinance」、そして指標計算用の「pandas_ta」というライブラリを使います。これらをインストールすることで、複雑な計算を自分でする必要がなくなります。
ターミナルやコマンドプロンプトを開き、以下のコマンドを入力してください。
ライブラリをまとめて導入するためのコマンドです。
pip install pandas yfinance pandas_ta requests
これだけで、プロが使うような分析ツールと同じ機能があなたのパソコンで使えるようになります。
一度インストールしてしまえば、あとはコードを書き始めるだけです。
開発環境(VSCodeやGoogle Colab)を整える
コードを書く場所としては、自分のパソコンにインストールする「Visual Studio Code(VSCode)」か、ブラウザ上で動く「Google Colab」がおすすめです。初心者のうちは、環境構築の手間がないGoogle Colabから試してみるのが良いでしょう。
VSCodeは動作が軽快で、ファイルを細かく管理したい中級者以上に向いています。
どちらを選んでもRSIの計算結果に違いは出ないので、まずは自分が使いやすいと感じる方を選んでください。
例えば、外出先からタブレットでコードを修正したいならGoogle Colabが便利です。
自分のライフスタイルに合わせて、最適なツールを選択しましょう。
証券会社などのAPIを使わずにデータを取得する方法
通常、株価データを取得するには証券会社のAPI契約が必要なことが多いですが、「yfinance」ライブラリを使えば無料でデータを取得できます。これはYahoo Financeの公開情報を取得する仕組みで、面倒な登録作業も一切不要です。
米国株はもちろん、日本株やビットコインなどの仮想通貨データも取得可能です。
個人で分析ツールを作るなら、この方法が最も手軽でコストもかかりません。
ただし、データの更新頻度にはわずかな遅れがあるため、数秒を争うスキャルピングには向きません。
数分〜数時間単位のトレードであれば、十分に実用的なデータとして活用できます。
yfinanceで株価データを取得するコードを書く
準備ができたら、実際に株価データを取得してみましょう。Pythonを使えば、特定の銘柄の過去データを一瞬でダウンロードして、表形式で整理することができます。
この章では、銘柄の指定方法や、取得したデータの確認の仕方をコード例とともに解説します。
対象の銘柄と期間を指定する
まずは、どの銘柄のデータを、いつからいつまで取得したいかを指定します。米国株ならティッカーシンボル(例:AAPL)を、日本株なら銘柄コードに「.T」を付けたもの(例:7203.T)を使います。
以下のコードは、Apple(AAPL)の過去1ヶ月分のデータを取得する例です。
Appleの株価データを取得するPythonコードです。
import yfinance as yf
# 銘柄と期間を指定
ticker = "AAPL"
data = yf.download(ticker, period="1mo", interval="1d")
print(data.head())
これだけで、日付ごとの始値、高値、安値、終値、出来高がまとめて手に入ります。
期間を「1y(1年)」にしたり、間隔を「1h(1時間)」にしたりと、自由に変更して試してみてください。
取得したデータをpandasで確認しよう
取得したデータは「DataFrame(データフレーム)」という表形式のオブジェクトに格納されます。これはExcelのシートのようなもので、中身を確認するには「head()」や「tail()」といった命令を使います。
データの先頭や末尾を表示して、正しく読み込めているかチェックする癖をつけましょう。
ここでエラーが出る場合は、ネット接続や銘柄名のスペルミスを確認してください。
例えば、最新の株価が昨日の日付になっていれば、データ取得は成功です。
表の形式が整っていることを確認できたら、次のRSI計算へと進みます。
日本株と米国株での書き方の違い
yfinanceで日本株を扱うときは、銘柄コードの後に必ず「.T」を付ける必要があります。例えばトヨタ自動車なら「7203.T」、ソニーなら「6758.T」といった具合です。
米国株はそのままティッカーを入力するだけなので、よりシンプルに書けます。
対象とする市場によって、指定方法が少しだけ変わる点に注意しましょう。
日本株を指定する際の代表的な書き方は以下の通りです。
銘柄指定のルールをまとめたリストです。
- 米国株(アップル):AAPL
- 米国株(テスラ):TSLA
- 日本株(トヨタ):7203.T
- 日本株(任天堂):7974.T
このように、対象を書き換えるだけであらゆる市場の分析ができるようになります。
pandas_taを使ってRSIを計算する
株価データが手に入ったら、いよいよ本題のRSI計算です。本来は複雑な数式が必要ですが、ライブラリを使えばたった1行で算出が終わります。
ここでは、計算の実行方法や、パラメーター(期間)の変更方法について見ていきましょう。
わずか数行でRSIを算出するコード
「pandas_ta」ライブラリを使えば、データフレームに対して直接RSIを計算する命令を出せます。難しい数学の知識がなくても、正確な数値を出すことが可能です。
実際にRSIを計算するコードは、以下のようになります。
RSIを計算して新しい列に追加するコードです。
import pandas_ta as ta
# RSIを計算(デフォルトは14日)
data["RSI"] = ta.rsi(data["Close"], length=14)
print(data[["Close", "RSI"]].tail())
終値(Close)を元にして、RSIの値が新しい列として追加されました。
これで、各日付の終値に対してRSIがいくつだったかが一目で分かります。
計算期間(14日)を変更する方法
RSIの標準的な期間は14日ですが、もっと敏感に反応させたい場合は期間を短く(例:9日)し、ゆったりとした動きを見たい場合は長く(例:25日)設定します。
コード内の「length=14」の部分を好きな数字に変えるだけで、計算結果が即座に切り替わります。
自分のトレードスタイルに合わせて、最適な数値を探してみるのも面白いですよ。
例えば、短期トレードなら「length=7」に設定して、小さな値動きを拾う設定にすることもあります。
ただし、期間を短くしすぎると「ダマシ」が増えるため、注意が必要です。
算出したRSIをデータフレームに結合する
計算されたRSIは、元の株価データと同じ行(日付)に並べることで、分析がしやすくなります。pandas_taを使えば自動的にインデックスが合わさるため、特に難しい結合処理は不要です。
これで、「株価がいくらのときに、RSIがいくつだったか」というセットが完成しました。
このデータさえあれば、あとは「70を超えたら通知する」というロジックを付け加えるだけです。
プログラムの中でデータが整理されている状態は、自動化における土台となります。
ここまでの流れがスムーズにできれば、自動化の半分以上は完了したと言っても過言ではありません。
「買われすぎ」を自動で判定するロジックを作る
数値が計算できたら、次はその数値を見て「今がチャンスかどうか」を判断する頭脳の部分を作ります。プログラムに「もし70を超えていたら教えて」と命令する仕組みです。
最新のデータだけをチェックする方法から、過去のシグナルを探す方法まで具体的に解説します。
最新のRSI値を取得するコード
通知を送るためには、常に最新(一番下)の行にあるRSIの値を取り出す必要があります。データフレームの「iloc[-1]」という書き方を使えば、最新の数値をピンポイントで取得できます。
コードで書くと、以下のようになります。
最新のRSI値を抽出するコードです。
# 最新のRSI値を取得
latest_rsi = data["RSI"].iloc[-1]
print(f"現在のRSI: {latest_rsi:.2f}")
これで、画面上に現在のRSIが表示されます。
まずはこの数値が正しく取得できているか、デバッグ(確認)することから始めましょう。
if文を使って「70」を超えたか判定する
次に、取得したRSIの値が「70」という基準を超えているかどうかをif文で判定します。もし超えていれば「買われすぎです!」というメッセージを出すように設定します。
条件分岐のコードは非常にシンプルです。
買われすぎを判定するロジックの例です。
if latest_rsi >= 70:
print("【警告】買われすぎです!売りを検討してください。")
elif latest_rsi <= 30:
print("【注目】売られすぎです!買いのチャンスかもしれません。")
else:
print("現在は安定した相場です。")
このように書くことで、プログラムが自動的に相場の状況を判断してくれます。
人間がチャートを見なくても、コンピューターが「今だよ!」と教えてくれるわけです。
過去のデータと比較してシグナルの発生を検知する
単に「70以上」というだけでなく、「前回は70以下だったのに、今回で70を超えた」という瞬間のシグナルを捕らえることもできます。これには、1つ前の行(iloc[-2])のデータと比較する処理を加えます。
この処理を入れることで、何度も同じ通知が届くのを防ぎ、真の変化があったときだけ反応させることが可能になります。
「今、まさにラインを越えた」という貴重なタイミングを逃さずに済みます。
例えば、ずっと60付近をうろうろしていたRSIが、急に72になった瞬間だけを狙い撃ちできます。
より洗練されたロジックを作るための、大事なステップです。
検知したシグナルをチャットツールに通知する
プログラムがシグナルを見つけても、あなたがパソコンの前にいなければ意味がありません。そこで、判定結果をSlackなどのチャットツールに自動送信する機能を組み込みましょう。
ここでは、最も手軽に実装できるSlackへの通知手順を紹介します。
SlackのWebHook URLを取得する手順
Slackにメッセージを送るには、「Incoming WebHook」という機能を使います。Slackの管理画面からアプリを作成し、通知を飛ばしたいチャンネルを選んで専用のURLを発行するだけです。
このURLは「住所」のようなもので、ここにデータを送るとSlackの画面に文字が表示されます。
初めての方でも、公式のガイドに従えば5分ほどで発行できます。
例えば、「#trade-alerts」というチャンネルを作っておけば、投資関連の通知だけをそこに集約できて便利です。
自分だけの通知専用ルームを作ってみましょう。
Pythonからメッセージを送信する関数を作る
WebHook URLが手に入ったら、Pythonの「requests」ライブラリを使ってメッセージを送信します。数行の関数を作るだけで、いつでも好きなタイミングで通知が飛ばせるようになります。
通知用の関数コードは以下の通りです。
Slackへ通知を送るためのシンプルな関数です。
import requests
def send_slack_message(message):
webhook_url = "あなたのWebHook URL"
payload = {"text": message}
requests.post(webhook_url, json=payload)
# 使い方の例
send_slack_message("RSIが70を超えました!チェックしてください。")
この関数を先ほどのif文の中に組み込めば、「買われすぎ判定」と「自動通知」が連携します。
これで、外出中でもスマホに通知が届く環境が整いました。
スマホで通知を受け取るための設定
Slackのアプリをスマホに入れておけば、仕事中でも移動中でもプッシュ通知でシグナルを知ることができます。パソコンをずっと開いておく必要がないので、自由な時間が増えるはずです。
通知の重要度に応じて、音を変えたりバイブレーションを設定したりして、見逃さない工夫をしましょう。
「あ、チャンスが来たな」とスマホを見るだけで判断できるのは、想像以上に快適です。
例えば、急な相場変動でRSIが30を割り込んだとき、すぐにスマホが震えて教えてくれます。
あとは落ち着いて取引アプリを開くだけです。
プログラムを24時間自動で動かす仕組み
ここまでのコードが完成したら、あとはそれを「自動で、定期的に」実行させる設定をするだけです。自分のパソコンをずっとつけっぱなしにする方法から、クラウドを使う方法までいくつか選択肢があります。
運用スタイルに合わせた最適な実行方法を選んで、全自動化を完成させましょう。
GitHub Actionsを使って無料で定期実行する
プログラミングに慣れているなら、GitHubの「Actions」という機能を使うのがおすすめです。これを使えば、24時間365日、無料で決まった時間にプログラムを動かすことができます。
自分のパソコンの電源を切っていても、GitHubのサーバーが代わりにコードを実行してくれます。
1時間おきにRSIをチェックする、といった設定も簡単に行えます。
設定には少し知識が必要ですが、一度組んでしまえば維持費はゼロです。
コストを抑えて自動化したい個人投資家にとって、最高の味方になります。
ローカルPC(Mac/Windows)でスケジュール設定する方法
もっと手軽に始めたいなら、自分のパソコンにある「タスクスケジューラ(Windows)」や「cron(Mac)」を使いましょう。パソコンが起動している間だけ、定期的にコードを実行してくれます。
例えば、平日の市場が開いている時間帯だけ10分ごとに動かす、という設定が可能です。
クラウドの設定が難しく感じる場合は、まずこの方法から試してみてください。
ただし、ノートパソコンを閉じると止まってしまうため、安定性を求めるなら注意が必要です。
まずは動作テストとして使ってみるのが良いでしょう。
クラウドサーバー(VPS)を利用するメリット
より本格的に、1秒の狂いもなく動かし続けたいなら、月額数百円程度の「VPS(仮想専用サーバー)」を借りるのも手です。外部の影響を受けにくく、非常に安定した運用が可能です。
OSのアップデートなどでプログラムが止まるリスクも低いため、資産運用を本気で自動化するなら最終的にはここに行き着きます。
以下に、主な実行方法の比較をまとめました。
それぞれの実行環境のメリットとデメリットです。
| 実行環境 | コスト | 難易度 | メリット |
| GitHub Actions | 無料 | やや高い | 完全に無料でクラウド運用できる |
| ローカルPC | 無料 | 低い | 設定が簡単ですぐに始められる |
| VPS(サーバー) | 有料 | 中程度 | 24時間安定して動作し続ける |
自分の予算や技術レベルに合わせて、無理のない方法からスタートしましょう。
RSI自動化で失敗しないための注意点
最後に、自動化プログラムを運用する上で絶対に知っておくべきリスクについてお伝えします。機械はルール通りに動きますが、相場にはルールが通用しない「例外」が必ず存在するからです。
「自動化したから100%安心」と過信せず、賢くツールと付き合うためのポイントを押さえておきましょう。
強いトレンド相場での「ダマシ」に備える
RSIの最大の弱点は、強い上昇トレンドや下落トレンドが続いているときに「数値が張り付いてしまう」ことです。RSIが80を超えて「買われすぎ」と言っていても、価格がさらに上がり続けることは珍しくありません。
この状態で「買われすぎだから売りだ!」と安易に判断すると、大きな損失を出すリスクがあります。
自動通知はあくまで「検討の合図」として捉えるのが安全です。
例えば、強いニュースが出た直後はテクニカル指標が機能しにくくなります。
機械の判断を鵜呑みにせず、周りの状況も確認する余裕を持ちましょう。
他の指標(移動平均線など)と組み合わせる理由
RSI単体での判断が不安な場合は、移動平均線(SMA)やMACDといった他の指標と組み合わせるのが定石です。「RSIが70以上で、かつ価格が移動平均線から大きく離れているときだけ通知する」といった二重のチェックを設けます。
条件を厳しくすることで、ダマシに遭う回数を減らし、精度の高いシグナルだけを抽出できるようになります。
Pythonなら、こうした複雑な条件も数行追加するだけで簡単に実装可能です。
複数のフィルターを通すことで、より「勝率の高い場面」を絞り込めるようになります。
自分だけの最強の組み合わせを見つけてみてください。
投資判断は自己責任であることを忘れない
どんなに優れたプログラムであっても、将来の利益を保証するものではありません。予期せぬシステムの不具合や、相場の急変で思うような結果が出ないこともあります。
まずは少額でテストしたり、通知を受け取ってから自分で最終判断を下したりするなど、慎重に運用を始めましょう。
ツールはあくまであなたの判断を助ける「補助」であることを忘れないでください。
プログラムが誤作動する可能性もゼロではありません。
定期的に動作チェックを行い、信頼できるパートナーとして育てていく姿勢が大切です。
まとめ:Pythonで賢く投資を効率化しよう
この記事では、Pythonを使ってRSIの計算から自動通知までを行う方法を解説しました。
- yfinanceを使えば無料で最新の株価データが手に入る
- pandas_taなら、たった1行でRSIの計算ができる
- Slack連携を使えば、24時間どこにいてもチャンスを逃さない
- GitHub Actionsなどを活用すれば、全自動の監視システムが作れる
自動化の仕組みを作るまでは少し大変に感じるかもしれませんが、一度完成してしまえば、あなたの代わりに24時間相場を見守ってくれる強力な武器になります。
まずは身近な1銘柄から、Pythonでの分析を始めてみませんか?
コツコツとツールを改良していく過程も、投資の新しい楽しみ方になるはずです。

