今回は、
をご紹介します。これまでPythonによる銘柄のスクリーニングを行ってきましたが、スクリーニング結果を定期的に通知してくれないかな、と思ったことはないでしょうか。
わたしはめちゃくちゃあります。プログラムを実行することさえ面倒です。
本日はこんな悩みを解決していきたいと思います!
・
結論:
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)
このプログラムではスクリーニング条件を以下のように設定しています(甘々に設定しています。あなたの自由に変更してみてください)。
・RSI:60以下
Pythonを用いたスクリーニング方法やPythonの実行結果をLINEへ通知する方法などは以下の記事をご覧ください。
プログラムの定期実行にはHerokuというSaleceForce社のクラウドサービスを利用します。
月1000時間分を無料で利用することができる優良サービスです。
Herokuを利用する大まかな流れは以下の通りです。
Herokuの詳細な利用方法についてはこちらの記事をご覧ください。スクリーンショットを用いてご紹介しています。
Herokuを利用する際には実行したいプログラム以外にも2つ「runtime.txt」と「requirements.txt」を用意する必要があります。
- runtime.txt:Pythonのバージョンを記載するファイル
- requirements.txt:必要なライブラリを記載するファイル
今回はTA-Libというテクニカル指標の算出のためのライブラリを使用しているため、安直にrequirements.txtにTA-Libを記載するとエラーが出ます(
解決方法としては、以下のコマンドを実行する必要があります。
$ 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月上旬の結果ですが、金利上昇懸念によりグロース株の株価に影響を与えていると考えられますね。。
今回は、をご紹介しました。
TA-Libのように、プログラム上で使用しているライブラリによっては簡単にデプロイできない場合があります。
PUSH時にエラーが出るようでしたら、エラー内容を確認の後公式HPなどで対処方法を探してみると案外解決方法が記載されていたりします。
本ブログでは、株式やプログラミングに関する記事を投稿しています。
プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。
は、プログラミングスクールという方法がおすすめです。
私の一押しは『TechAcademy』です。
質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。
無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。
コメント