プログラミング開発

【Python】銘柄スクリーニング結果を定期的に通知する方法(無料)【30分でできる!】

おはようございます、こんにちは、こんばんは。

ひよこです(@hiyoko_lets_go)。

今回は、Pythonで銘柄スクリーニングした結果を定期的にLINEへ通知する方法をご紹介します。

これまでPythonによる銘柄のスクリーニングを行ってきましたが、スクリーニング結果を定期的に通知してくれないかな、と思ったことはないでしょうか。

わたしはめちゃくちゃあります。プログラムを実行することさえ面倒です。

本日はこんな悩みを解決していきたいと思います!

こんな方におすすめ!
スクリーニング結果を定期的に受け取りたい
・Pythonを学習している
・株式投資を行っている
記事の信頼性
ひよこ
ひよこ

私は、大学時代にプログラミングを学び、PHPなどのWeb系言語からAIに用いられるPythonまで幅広く経験してきました。

今ではほぼ不労所得として月10万円以上の収益を継続的に達成しています。

結論:HerokuとPythonを用いると30分で実装可能!

HerokuというクラウドサービスとPythonを用いて実装していきます。役割は以下の通りです。

  • Heroku:プログラムの定期実行
  • Python:銘柄のスクリーニング

エラーが出る出ないの問題もありますが、おおよそ30分程度で完了できると思います。

実行したいプログラムを準備する

今回は、Pythonで銘柄のスクリーニングを実施し、その結果をLINEへ通知するプログラムを書いていきます。

サンプルコードとして以下を用意しました。

import requests
from datetime import datetime #日付指定
import pandas_datareader.data as data #株価取得
import talib as ta #テクニカル指標算出
from dateutil.relativedelta import relativedelta

#変更箇所1
#####################################################################################
#ダウ構成銘柄30
dow_list = ["AAPL", "MSFT", "JPM", "UNH", "V", "JNJ", "HD", "WMT", "PG", "DIS"
, "NKE", "CRM", "KO", "CSCO", "CVX", "VZ", "INTC", "MCD", "MRK", "HON", "GS"
, "AXP", "AMGN", "BA", "IBM", "CAT", "MMM", "WBA", "DOW", "TRV"]

#期間
end =datetime.now() #現在時刻のデータを取得
start = end - relativedelta(months=6) #6ヶ月前から
#####################################################################################


#LINEに通知する関数
def line_notify(message):
 line_notify_token = 'ここにトークンをペーストしてください'
 line_notify_api = 'https://notify-api.line.me/api/notify'
 payload = {'message': message}
 headers = {'Authorization': 'Bearer ' + line_notify_token}
 requests.post(line_notify_api, data=payload, headers=headers)

#銘柄スクリーニング
def screening(ticker,start,end,span=25):
 list = data.get_quote_yahoo(ticker)


 #変更箇所2
 #####################################################################################
 selected_stock = list[(list['trailingPE'] <= 50)]
 #####################################################################################
 selected_stock_index = selected_stock.index
 df = data.DataReader(selected_stock_index, 'yahoo', start, end) #株価を取得
 close = df["Adj Close"] #調整後の終値を"close"として保持


 #変更箇所3
 #####################################################################################
 #RSI
 rsi = []
 for i in selected_stock_index:
  rsi.append(ta.RSI(close[i],timeperiod=span)[-1])
 selected_stock["rsi"] = rsi
 selected_stock = selected_stock[(selected_stock['rsi'] <= 60)]
#####################################################################################


 #変更箇所4
 #####################################################################################
 selected_stock = selected_stock[['rsi']].sort_values(by=['rsi'], ascending=[True])
 selected_stock = selected_stock.round(2)
 selected_stock = selected_stock[:5]
 #####################################################################################

 return selected_stock


if __name__ == '__main__':
 try:
  selected_stock = screening(dow_list,start,end)
 except Exception as e:
  text = "\nエラーが出ました\n"
  text += str(e)
  line_notify(text)
 else:
  text = "\nプログラムの実行を完了しました\n"
  text += str(selected_stock)
  line_notify(text)

このプログラムではスクリーニング条件を以下のように設定しています(甘々に設定しています。あなたの自由に変更してみてください)。

・PER:50以下
・RSI:60以下

Pythonを用いたスクリーニング方法Pythonの実行結果をLINEへ通知する方法などは以下の記事をご覧ください。

Herokuを利用する方法

プログラムの定期実行にはHerokuというSaleceForce社のクラウドサービスを利用します。

月1000時間分を無料で利用することができる優良サービスです。

Herokuを利用する大まかな流れは以下の通りです。

Herokuの利用方法

  • Herokuとgitのインストール
  • Herokuのアカウント作成
  • プログラム準備(実行したいプログラム以外にも必要)
  • Heroku上で新規アプリ作成
  • Herokuへアプリデプロイ
  • スケジューラ設定

Herokuの詳細な利用方法についてはこちらの記事をご覧ください。スクリーンショットを用いてご紹介しています。

TA-LibをHerokuで利用する方法

Herokuを利用する際には実行したいプログラム以外にも2つ「runtime.txt」と「requirements.txt」を用意する必要があります。

  • runtime.txt:Pythonのバージョンを記載するファイル
  • requirements.txt:必要なライブラリを記載するファイル

今回はTA-Libというテクニカル指標の算出のためのライブラリを使用しているため、安直にrequirements.txtにTA-Libを記載するとエラーが出ますPUSH時に自動でインストールしようとするが、インストールできずエラーを吐く)。

解決方法としては、以下のコマンドを実行する必要があります。

$ heroku buildpacks:add --index 1 heroku/python
$ heroku buildpacks:add --index 2 numrut/ta-lib

これにより、Heroku上でもTA-Libを使用することができるようになるはずです。

ひよこ
ひよこ

詳細な情報は公式HPをご覧ください!

このコマンドの実行タイミングは以下の通りです。

$ git init
$ git remote add heroku https://git.heroku.com/アプリ名.git
$ git add .
$ git commit -m "app first commit"
$ git push heroku master
$ heroku buildpacks:add --index 1 heroku/python
$ heroku buildpacks:add --index 2 numrut/ta-lib
$ heroku addons:add scheduler:standard
$ heroku addons:open scheduler
  • 1~5行目:プログラムのデプロイ
  • 6~7行目:TA-Libの使用準備
  • 8~9行目:スケジューラ設定

実行結果

ひよこ
ひよこ

最後にHerokuに設定した通り実行できているか確認していきましょう!

LINEに来た通知は以下の通りです。確かにRSI60以下の5社が昇順で並べられていることが確認できます。

これで、自分だけのスクリーニングによって抽出された銘柄を自分の好きなタイミングで通知させることができるようになりました!

株式投資がはかどりそうです🐣

余談ですが、$MSFTのRSIが低いですね。これは2022年1月上旬の結果ですが、金利上昇懸念によりグロース株の株価に影響を与えていると考えられますね。。

まとめ

今回は、Pythonで銘柄スクリーニングした結果を定期的にLINEへ通知する方法をご紹介しました。

TA-Libのように、プログラム上で使用しているライブラリによっては簡単にデプロイできない場合があります

PUSH時にエラーが出るようでしたら、エラー内容を確認の後公式HPなどで対処方法を探してみると案外解決方法が記載されていたりします。

 

本ブログでは、株式やプログラミングに関する記事を投稿しています。

プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。

独学で挫折してしまう方は、プログラミングスクールという方法がおすすめです。

私の一押しは『TechAcademy』です。

質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。

無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。

スキルアップを目指したい方におすすめのオンライン学習サービス

コメント

タイトルとURLをコピーしました