LoginSignup
0
1

More than 3 years have passed since last update.

株価と統計値(平均、標準偏差)

Posted at

株価+αを取得

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&dividendLowerThan=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

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"
    }
]

の形で返ってくる

ベータ値

Beta (finance)

$$ 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に近いのは市場との一致するという意味で正しそう

配当、株数

株数が任意である以上、その絶対値の比較はそこまで意味を持たない

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1