【株式投資】Pythonでスクリーニングする方法

プログラミング

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

ひよこです(@hiyoko_lets_go)。

本日は、Pythonを用いた銘柄のスクリーニング方法をご紹介します。

こんな方におすすめ!

・Pythonや株式投資に関心がある
・証券会社のスクリーニングに満足していない
・自分だけのスクリーニング条件で投資を行いたい
ひよこ
ひよこ

私もPythonを用いたスクリーニングを行うことで、米国株を中心に多くの利益をあげています。
特に、スクリーニング×通知をPythonで自動化することで、売買のタイミングを逃すことなく投資を行うことができます!

 

 

 

結論:2種類のライブラリを用いればOK

主に2種類のPythonライブラリを用いることで銘柄のスクリーニングが可能です。

本記事のサンプルコードを実行することで簡単に銘柄のスクリーニングを体験でき、更に応用することで自分だけのスクリーニング方法を用いた投資を実践できます。

個人投資家の参入ハードルが下がっている昨今、身に付けておくことで周りよりも差を付けられるでしょう。ぜひ最後までご覧ください!

本記事の信頼性

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

ファンダメンタル指標取得

ファンダメンタル指標とは、企業を分析する際の売上高、利益、保有資産などの財務情報、各種の経済指標のことです(引用:セゾン投信)。

ファンダメンタル指標の取得には「pandas_datareader」というライブラリを用います。株価取得でおなじみですね。

使い方を簡単におさらいします。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')
  • marketCap:出来高
  • trailingPE:PER
  • priceToBook:PBR
  • epsCurrentYear:現在のEPS
  • epsTrailingTwelveMonths:12ヶ月間のEPS
  • epsForward:予想EPS
  • trailingAnnualDividendYield:配当利回り
ひよこ
ひよこ

よく出てくる指標をいくつかピックアップしました!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とやや買われすぎの傾向があることが分かります。年末にかけて価格が高騰していることが懸念されるため優先度としては高くないでしょう。

スクリーニング

スクリーニングとは、様々な指標に条件を設定し、それに合う銘柄を抽出することです。

スクリーニング例

  • 割安で安全な株を選択したい場合は、PER(株価収益率)やPBR(株価純資産倍率)などの割安さを測る指標と、株主資本比率など安全性を測る指標の組み合わせ。
  • 成長性の高い株を選択したい場合は、売上高増加率や経常利益増加率などの成長性を測る指標と、ROEや売上高営業利益率など収益を測る指標の組み合わせ。(引用:SMBC日興証券

スクリーニング条件

ここでは、スクリーニング条件としてファンダメンタル指標とテクニカル指標の2つを考慮します。

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

ファンダメンタル指標

ファンダメンタル指標のスクリーニング条件は業種などにも依存するため、ご自身で調整が必要ですが、一般的によく言われている基準を以下に記載します。

  • PER(trailingPE):15倍以下が割安
  • PBR(priceToBook):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配当利回り
DOW49.65.08%
MRK48.93.38%
MMM49.13.38%
ひよこ
ひよこ

RSIが50以下であることが確認できますね。

DOWのチャートRSIが50付近のため、まだまだ買い時ではないなぁと感じますが、ぜひ購入を検討してみてはいかがでしょうか。

MRKのチャート

MMMのチャート

まとめ

今回は、Pythonを用いた銘柄のスクリーニング方法をご紹介しました。

ファンダメンタル指標とテクニカル指標をPythonで扱い、スクリーニング方法として用いました。

また、NYダウ構成30銘柄を対象とし、実際にスクリーニングを実施しました。このコードをサンプルにすることであなたも自分だけのスクリーニングに挑戦できると思います!

一緒にPythonで豊かな将来を目指しましょう。

 

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

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

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

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

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

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

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

コメント

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