本日は、Pythonを用いた銘柄のスクリーニング方法をご紹介します。
こんな方におすすめ!
私もPythonを用いたスクリーニングを行うことで、米国株を中心に多くの利益をあげています。
特に、スクリーニング×通知をPythonで自動化することで、売買のタイミングを逃すことなく投資を行うことができます!
◆ Windows10へのインストール方法を解説(スクリーンショットあり)
◆ 仮想環境の構築~venvの設定方法~
◆ Pythonでできること(概要や始め方、学習方法までざっくり紹介)
◆ TA-Libによるテクニカル指標算出方法(移動平均、ボリンジャーバンド、MACD、RSI)
◆ 【初心者向け】10分でできる!Pythonの実行結果をスマホへ通知する方法(LINE Notify)
結論:
主に2種類のPythonライブラリを用いることで銘柄のスクリーニングが可能です。
本記事のサンプルコードを実行することで
個人投資家の参入ハードルが下がっている昨今、身に付けておくことで周りよりも差を付けられるでしょう。ぜひ最後までご覧ください!
本記事の信頼性
ファンダメンタル指標とは、企業を分析する際の売上高、利益、保有資産などの財務情報、各種の経済指標のことです(引用:セゾン投信)。
ファンダメンタル指標の取得には「」というライブラリを用います。株価取得でおなじみですね。
使い方を簡単におさらいします。2019年~現在時刻までのAAPL(アップル)の株価を取得するコード例は以下の通りです。
from datetime import datetime #日付指定
import matplotlib.pyplot as plt #グラフ描画
import pandas_datareader.data as data #株価取得
start = datetime(2019, 1, 1) #2019/1/1以降のデータを取得
end =datetime.now() #現在時刻までのデータを取得
df = data.DataReader("AAPL", 'yahoo', start, end) #AAPL(アップル)の株価を取得
date = df.index
close = df["Adj Close"] #調整後の終値を"close"として保持
ファンダメンタル指標は以下のコードで取得できます。
aapl = data.get_quote_yahoo("AAPL")
print(aapl.columns)
#実行結果
Index(['language', 'region', 'quoteType', 'quoteSourceName', 'triggerable',
'currency', 'trailingAnnualDividendRate', 'trailingPE',
'trailingAnnualDividendYield', 'epsTrailingTwelveMonths', 'epsForward',
'epsCurrentYear', 'priceEpsCurrentYear', 'sharesOutstanding',
'bookValue', 'fiftyDayAverage', 'fiftyDayAverageChange',
'fiftyDayAverageChangePercent', 'twoHundredDayAverage',
'twoHundredDayAverageChange', 'twoHundredDayAverageChangePercent',
'marketCap', 'forwardPE', 'priceToBook', 'sourceInterval',
'exchangeDataDelayedBy', 'pageViewGrowthWeekly', 'averageAnalystRating',
'tradeable', 'exchange', 'longName', 'messageBoardId',
'exchangeTimezoneName', 'exchangeTimezoneShortName',
'gmtOffSetMilliseconds', 'market', 'esgPopulated', 'marketState',
'firstTradeDateMilliseconds', 'priceHint', 'preMarketChange',
'preMarketChangePercent', 'preMarketTime', 'preMarketPrice',
'regularMarketChange', 'regularMarketChangePercent',
'regularMarketTime', 'regularMarketPrice', 'regularMarketDayHigh',
'regularMarketDayRange', 'regularMarketDayLow', 'regularMarketVolume',
'regularMarketPreviousClose', 'bid', 'ask', 'bidSize', 'askSize',
'fullExchangeName', 'financialCurrency', 'regularMarketOpen',
'averageDailyVolume3Month', 'averageDailyVolume10Day',
'fiftyTwoWeekLowChange', 'fiftyTwoWeekLowChangePercent',
'fiftyTwoWeekRange', 'fiftyTwoWeekHighChange',
'fiftyTwoWeekHighChangePercent', 'fiftyTwoWeekLow', 'fiftyTwoWeekHigh',
'dividendDate', 'earningsTimestamp', 'earningsTimestampStart',
'earningsTimestampEnd', 'shortName', 'displayName', 'price',
'ipoExpectedDate'],
dtype='object')
よく出てくる指標をいくつかピックアップしました!PERや配当利回りなどはスクリーニング条件としても用いられる機会が多いのではないでしょうか。
テクニカル指標算出
テクニカル指標とは、大和証券)。
(引用:テクニカル指標の算出には「TA-Lib」を用います。
こちらも使い方を簡単におさらいします。今回具体例として用いるRSI(買われすぎか売られすぎかを判断する指標)を算出してみます。
import talib as ta #テクニカル指標算出
#指定期間:25日
span25 = 25
df["RSI"] = ta.RSI(close,timeperiod=span25) #25日間の株価を基にRSIを算出
print(df.index[-1],":",df["RSI"][-1]) #最新のRSIを表示
#実行結果
2021-12-28 00:00:00 : 64.80059912405508
アップルのRSIは64.8とやや買われすぎの傾向があることが分かります。年末にかけて価格が高騰していることが懸念されるため優先度としては高くないでしょう。
スクリーニング
スクリーニングとは、様々な指標に条件を設定し、それに合う銘柄を抽出することです。
スクリーニング条件
ここでは、スクリーニング条件としてファンダメンタル指標とテクニカル指標の2つを考慮します。
・ファンダメンタル指標:優良銘柄の抽出
・テクニカル指標:売買タイミングの検討
ファンダメンタル指標
ファンダメンタル指標のスクリーニング条件は業種などにも依存するため、ご自身で調整が必要ですが、一般的によく言われている基準を以下に記載します。
- PER( ):15倍以下が割安
- PBR( ):1倍以下が割安
これは一例に過ぎず、目的に合わせて値を変更いただければと思いますが、例えば、PER≦15として条件を指定すれば、比較的割安な株を抽出することができます。
テクニカル指標
テクニカル指標もファンダメンタル指標同様のため、ここでは参考までにスクリーニング条件をご紹介します。
- RSI:30%以下売られすぎ、70%以上買われすぎ
- ボリンジャーバンド:-2σ以下売られすぎ、+2σ以上買われすぎ
この場合、例えばRSI≦30として条件を指定し、30%を切ったタイミングで通知するように設定していれば良い買い時を逃すことがなくなります。
具体例
それでは、実際にファンダメンタル指標とテクニカル指標を用いて、スクリーニングを体験してみましょう。※株価情報はプログラム実行時の値です。
条件
スクリーニングを実施するにあたり、対象銘柄やスクリーニング条件を定めます。
・対象銘柄:NYダウ構成30銘柄
・スクリーニング条件
・ファンダメンタル指標:PER≦30
・テクニカル指標:RSI≦50
表示順
キャッシュフローを増やしたい(高配当銘柄を購入したい)という投資目的から、配当利回りの高い銘柄を上位に表示するようコーディングしましょう。
コード例
ライブラリのインポートからすべてのコード例を記載します。
from datetime import datetime #日付指定
import pandas_datareader.data as data #株価取得
import talib as ta #テクニカル指標算出
from dateutil.relativedelta import relativedelta #時間計算
#ダウ構成銘柄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"]
dow_list = data.get_quote_yahoo(dow_list) #ファンダメンタル指標取得
selected_stock = dow_list[(dow_list['trailingPE'] <= 30)] #PER≦30の条件でスクリーニング
#ファンダメンタル指標によってスクリーニングされた銘柄リスト
selected_stock_index = selected_stock.index
end =datetime.now() #現在時刻のデータを取得
start = end - relativedelta(months=6) #6ヶ月前から
#テクニカル指標を算出するため株価取得
df = data.DataReader(selected_stock_index, 'yahoo', start, end)
close = df["Adj Close"] #調整後の終値を"close"として保持
#指定期間:25日
span25 = 25
#RSI
rsi = []
for i in selected_stock_index:
rsi.append(ta.RSI(close[i],timeperiod=span25)[-1])
selected_stock["rsi"] = rsi
selected_stock = selected_stock[(selected_stock['rsi'] <= 50)] #RSI≦50の条件でスクリーニング
#スクリーニング結果を配当利回りの高い順、RSIの低い順にソートして表示
print(selected_stock[['rsi', 'trailingAnnualDividendYield']].sort_values(by
=['trailingAnnualDividendYield', 'rsi'], ascending=[False, True]))
#実行結果
rsi trailingAnnualDividendYield
DOW 49.594574 0.050780
MRK 48.876271 0.033804
MMM 49.130522 0.033777
JPM 45.970015 0.023528
HON 45.020917 0.018127
GS 48.635114 0.014934
AXP 47.936370 0.010476
スクリーニング結果
このスクリーニング結果では、以下の3銘柄が上位に抽出されました。
RSI | 配当利回り | |
DOW | 49.6 | 5.08% |
MRK | 48.9 | 3.38% |
MMM | 49.1 | 3.38% |
RSIが50以下であることが確認できますね。
DOWのチャートRSIが50付近のため、まだまだ買い時ではないなぁと感じますが、ぜひ購入を検討してみてはいかがでしょうか。
まとめ
ファンダメンタル指標とテクニカル指標をPythonで扱い、スクリーニング方法として用いました。
また、NYダウ構成30銘柄を対象とし、実際にスクリーニングを実施しました。このコードをサンプルにすることであなたも自分だけのスクリーニングに挑戦できると思います!
一緒にPythonで豊かな将来を目指しましょう。
本ブログでは、株式やプログラミングに関する記事を投稿しています。
プログラミング(Python)を学びたい方におすすめの書籍やプログラミングスクール、おすすめの学習方法などをご紹介しておりますのでぜひご覧ください。
は、プログラミングスクールという方法がおすすめです。
私の一押しは『TechAcademy』です。
質問することですぐに分からないところをクリアにできますし、進捗をサポートしてくれるため確実に成長することができます。
無料相談を実施しているため、まずは話を聞いてあなたのスタイルに合っているかどうか確認してみるのが良いと思います。
コメント