プログラミング開発

【初心者向け】20分でできる!Pythonで銘柄スクリーニング結果をスマホへ通知する方法

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

ひよこです(@hiyoko_lets_go)。

本日は、Pythonで銘柄スクリーニング結果をスマホへ通知する方法をご紹介します。

これまで、Pythonを用いた銘柄スクリーニングPythonからLINEへ通知を送る方法をご紹介してきました。

今回は、それらを掛け合わせてより実用的なプログラムを実装していきたいと思います。

 

こんな方におすすめ!
Pythonで銘柄スクリーニング結果を通知したい
・Pythonに興味がある
・株式投資に興味がある

記事の信頼性

ひよこ
ひよこ
私は大学時代にプログラミングを学び、PHPなどのWeb系言語からAIに用いられるPythonまで幅広く経験してきました。
今ではほぼ不労所得として月10万円以上の収益を継続的に達成しています。
現在は大手企業に所属しながら、データサイエンティストとして活動しています。

結論:pandas-datareaderとLINE Notifyを使えばOK

Python環境さえあれば、たった20分程度で通知まで実行することができます。

銘柄スクリーニングの自動化とLINEへの通知を掛け合わせることで実装でき、私自身よく利用しています。個人投資家には便利なものだと思います。

是非最後までご覧ください。

具体的な流れ

具体的な流れは以下の5つです。

  1. スクリーニング条件の検討
  2. Python上で指定した条件に従って銘柄をスクリーニング
  3. 銘柄抽出
  4. 抽出銘柄をスマホへ通知
  5. 通知結果を基に株式売買

この中で手動で行う必要があるのは、「1. スクリーニング条件の検討」と「5. 通知結果を基に株式売買」のみです。

また、「1. スクリーニング条件の検討」は最初の1度だけでOKです(もちろん目的に合わせて適宜調整をする必要はありますが)。

後は全てPythonで自動化していきます。

主に必要な機能は2つ

実装において必要な機能は主に以下の2つです。

① Pythonで銘柄をスクリーニングする

② PythonからLINEに通知する

ひよこ
ひよこ

作りたいサービスを要素ごとに分解することで実装イメージが湧いてきます。

「①Pythonで銘柄をスクリーニングする」は「pandas-datareader」と「TA-Lib」の2つのPythonライブラリを用いて実装することができます。

そして、「②PythonからLINEに通知する」は「LINE Notify」というサービスを利用することで実現できます。

ここから①②についてそれぞれご説明していきます。

① Pythonでできる!銘柄スクリーニング方法

Pythonで銘柄のスクリーニングを行うには、「pandas-datareader」と「TA-Lib」を使うことで実現できます。

それぞれの役割は以下の通りです。

スクリーニングによる各指標の主な役割
・ファンダメンタル指標:優良銘柄の抽出
・テクニカル指標:売買タイミングの検討

スクリーニング
様々な指標に条件を設定し、それに合う銘柄を抽出すること
例:割安で安全な株を選択したい場合は、PER(株価収益率)やPBR(株価純資産倍率)などの割安さを測る指標と、株主資本比率など安全性を測る指標の組み合わせ(引用:SMBC日興証券

Pythonでの具体的なスクリーニング方法は以下の記事に記載しておりますのでご参照ください。

② Pythonの実行結果をLINEに通知する方法

PythonでLINEに通知するには、「LINE Notify」というサービスを利用する必要があります。あなたのLINEアカウントと紐づけるだけで簡単に利用できます。

以下の記事に、サンプルコードを交えて具体的な利用方法を解説しています。

大まかな流れは以下の通りです。

  1. LINE Notify」にログイン
  2. トークン名とトークルームを決定
  3. トークン発行

たった5分ほどで準備を終えることができます!

後は、PythonからLINEに通知する関数(line_notify関数)を実行すれOKです。

#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)

サンプルコード

ここから、具体例を用いながら実際にPythonでスクリーニングを行い、その結果をLINEに通知するプログラムを実装していきたいと思います(実行結果は執筆時点のもの)。

このサンプルコードをあなた好みに自由に変更するだけであなただけのスクリーニングができるようになります!

対象銘柄

今回は、NYダウを構成する30銘柄をスクリーニングの対象とします。具体的な銘柄は以下の通りです。

項番銘柄(ティッカー)業種
1アップル(AAPL)PC、携帯端末等
2マイクロソフト(MSFT)OS、クラウド、PC等
3JPモルガン・チェース(JPM)金融
4ユナイテッド・ヘルス(UNH)医療サービス
5ビザ(V)決済
6ジョンソンエンドジョンソン(JNJ)ヘルスケア製品
7ホーム・デポ(HD)ホームセンター
8ウォルマート(WMT)ディスカウントストア
9P&G(PG)家庭用消費財
10ディズニー(DIS)エンターテインメント
11ナイキ(NKE)スポーツ用品
12セールスフォース(CRM)法人向け顧客管理ソフト
13コカ・コーラ(KO)清涼飲料水
14シスコシステムズ(CSCO)ネットワーク機器
15シェブロン(CVX)石油メジャー
16ベライゾン(VZ)米通信
17インテル(INTC)半導体
18マクドナルド(MCD)ファストフード
19メルク(MRK)医薬品
20ハネウェル(HON)産業用機器、機械
21ゴールドマン・サックス(GS)金融
22アメリカン・エキスプレス(AXP)決済
23アムジェン(AMGN)バイオ医薬品
24ボーイング(BA)航空機、防衛、宇宙
25IBM(IBM)ITサービス
26キャタピラー(CAT)建設機械
273M(MMM)素材化学、事務用品
28ウォルグリーンズ(WBA)ドラッグストア
29ダウ(DOW)素材化学
30トラベラーズ(TRV)保険

スクリーニング条件

スクリーニングを実施するにあたり、対象銘柄やスクリーニング条件を定めます。

・投資目的:キャッシュフローを増やしたい(高配当銘柄を購入したい)
・スクリーニング条件
  ・ファンダメンタル指標:PER≦30
  ・テクニカル指標:RSI≦50

今回は比較的条件を甘く設定し、確実にいくつかの銘柄が抽出されるようにしました。

また、抽出結果の表示順としては、キャッシュフローを増やしたい(高配当銘柄を購入したい)という投資目的から、配当利回りの高い銘柄を上位に表示するようにコーディングしていきます。

サンプルコード

各設定や条件に従い、ライブラリのインポートからすべてのコード例を記載します。

import requests
from datetime import datetime #日付指定
import matplotlib.pyplot as plt #グラフ描画
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'] <= 30)]
 #####################################################################################
 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'] <= 50)]
 #####################################################################################


 #変更箇所4
 #####################################################################################
 selected_stock = selected_stock[[ 'rsi', 'trailingAnnualDividendYield']].sort_values(by
 =['trailingAnnualDividendYield', 'rsi'], ascending=[False, True])
 #####################################################################################

 return selected_stock


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


#実行結果
プログラムの実行を完了しました
rsi trailingAnnualDividendYield
JPM 46.385682 0.022974
GS 47.600297 0.013078
AXP 47.784173 0.010587

「変更箇所」と記載のある部分は、対象銘柄やスクリーニング条件を表しており変更することで自由にカスタマイズすることが可能です。

実行結果

上記のサンプルコードを実行した結果を示します。

JPM、GS、AXPがスクリーニング結果として抽出されました。

RSI(買われすぎ売られすぎを表すテクニカル指標)が昇順、配当利回りが降順で表示されていることが分かります。

今回はあくまで例ですが、購入を検討してみてはいかがでしょうか。

JPM

GS

AXP

まとめ

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

Pythonを用いて、主に①、②の機能を実装することで実現することができ、ほぼコピー&ペーストでたった20分程度で通知まで実行することができます!

① Pythonで銘柄をスクリーニングする
② PythonからLINEに通知する

サンプルコードを変更すればあなただけのスクリーニング結果を自分のスマホへ通知させることができるようになります。

面倒なことはPythonにやってもらいましょう。

そして、一緒にPythonで豊かな生活を目指しましょう。

 

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

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

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

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

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

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

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

コメント

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