株価+αを取得
Financial Modeling Prepから株価+αを取得する
def get_df_stock_screener(exchange):
requests_cache.install_cache("stock-screener")
url = f"https://financialmodelingprep.com/api/v3/stock-screener?marketCapMoreThan=100000&volumeMoreThan=100÷ndLowerThan=10&betaLowerThan=10&betaMoreThan=-10&exchange={exchange}&apikey={apikey}"
response = requests.get(url)
content = response.content.decode()
json_content = json.load(StringIO(content))
return pd.DataFrame(json_content).set_index("symbol")
requests_cache
pandasでread_jsonするときにキャッシュでアクセスする方法を使ってキャッシュに保存する
Stock Screener
[
{
"symbol" : "AAPL",
"companyName" : "Apple Inc.",
"marketCap" : 1382174560000,
"sector" : "Technology",
"beta" : 1.2284990000000000076596506914938800036907196044921875,
"price" : 318.8899999999999863575794734060764312744140625,
"lastAnnualDividend" : 3.0800000000000000710542735760100185871124267578125,
"volume" : 51500795,
"exchange" : "Nasdaq Global Select",
"exchangeShortName" : "NASDAQ"
},
{
"symbol" : "AMZN",
"companyName" : "Amazon.com Inc.",
"marketCap" : 1215457260000,
"sector" : "Technology",
"beta" : 1.5168630000000000723758830645238049328327178955078125,
"price" : 2436.8800000000001091393642127513885498046875,
"lastAnnualDividend" : 0,
"volume" : 6105985,
"exchange" : "Nasdaq Global Select",
"exchangeShortName" : "NASDAQ"
}
]
の形で返ってくる
ベータ値
$$ r_a = \alpha + \beta r_b $$
$ r_a $は株のリターン
$ r_b $は市場(例:S&P 500)のリターン
$ \beta $は市場のリターンに対する係数
$ \beta = 2 $の場合、市場のリターンが3%上昇すると株のリターンが6%上昇する
$ \alpha $は市場のリターンの無関係な株のリターン
lastAnnualDividend
去年の1年間の1株当たりの配当金
統計値の計算
DataFrame作成
df_stock_screener_nasdaq = get_df_stock_screener("nasdaq")
df_stock_screener_nyse = get_df_stock_screener("nyse")
df_stock_screener = pd.concat([df_stock_screener_nasdaq, df_stock_screener_nyse])
df_stock_screener["sector"].replace("", np.nan, inplace=True)
df_stock_screener.dropna(subset=["sector"], inplace=True)
df_stock_screener_target = df_stock_screener[["price","beta","lastAnnualDividend","volume"]]
欠損値
sectorは空の場合がある
ETFとかが空になるっぽい
対象からETFは外した方が解釈しやすいので、dropする
dropnaは空文字はdropしないので、空文字をnanにreplaceする
describe
describeで要約統計量を取得できる
df_stock_screener_target.describe()
price beta lastAnnualDividend volume
count 6153.000000 6153.000000 6153.000000 6.153000e+03
mean 130.651825 0.940899 0.589505 1.701368e+06
std 5257.505324 0.874763 1.033488 5.608641e+06
min 0.010000 -8.439448 0.000000 1.000000e+02
25% 5.730000 0.301854 0.000000 8.373300e+04
50% 13.770000 0.881456 0.000000 3.761930e+05
75% 34.160000 1.392074 0.840000 1.274612e+06
max 291621.000000 8.949109 9.680000 1.566431e+08
price
平均は130ドルで標準偏差は5257ドル、最大は291621ドル
外れ値の存在で、統計値がほとんど意味を成していない
株分割も任意にできるため、株価の大小は意味を成さない
beta
平均は0.94で標準偏差は0.87、最小は-8.43、最大は8.94
betaはその導出法から平均が1に近いのは市場との一致するという意味で正しそう
配当、株数
株数が任意である以上、その絶対値の比較はそこまで意味を持たない