Finance: 株価を評価する指標, yfinance, python ver. 15

Last Updated on July 17, 2022 by shibatau

I’m rewriting now. The red part is corrected.

I.What do you learn?

株価についての5つの指標を算出するPythonのスクリプトを次の解説で学びます。

I Used Python to Develop Investment Portfolio Performance Indicators

Apple、Amazon、日経平均、トヨタ、ファーストリテイリング、イオンのそれぞれの指標の値を算出しました。

Plotlyでインターアクティブな株価グラフを描きます。

A Simple Guide to Plotly for Plotting Financial Chart

Google Colaboratoryに公開しました。随時更新します。

 https://colab.research.google.com/drive/1kwQeW9BA7JvHr-r6YQrw-3uusbac8FFH?usp=sharing

 II.Data

ライブラリyfinaceを使って、Yahoo Financeの株価を取得します。Apple Inc.のここ3年の株価を取得するコードは次です。

import yfinance as yf
import numpy as np
ticker = 'aapl'
stock_data = yf.download(ticker, start='2018-08-20', end='2021-08-20')
stock_data
 

初値、高値、安値、終値、調整終値、出来高のデータです。

III.Indices

1.Compound Annual Growth Rate (CAGR)

1年にどれぐらい儲かるかを測る指標です。すべてのリターンを再投資することを仮定しています。次に解説されています。

Compound Annual Growth Rate (CAGR)

上の解説に示されたサンプルを理解しやすいようにGoogle Sheetsで集計しました。

a.計算式(MathJaxで書きました)

EV = Ending Value

BV = Beginning Value

n = Number of years

$$CAGR = {(}{EV \over BV}{)}^{{(}{1 \over n}{)}} -1$$

b.スクリプト

# 1. Cumulative Annual Growth Rate (CAGR)
def CAGR(data):
    df = data.copy()
    df['daily_returns'] = df['Adj Close'].pct_change()
    df['cumulative_returns'] = (1 + df['daily_returns']).cumprod()
    trading_days = 252
    n = len(df)/ trading_days
    cagr = (df['cumulative_returns'][-1])**(1/n) - 1
    return cagr

print("CAGR: " + str(CAGR(stock_data) * 100) + "%")

次の結果を得ました。

CAGR: 41.13271665492731%

Amazon, Inc.の場合は次です。

CAGR: 19.3151793632542%

日経平均の場合は次です。

CAGR: 7.0304471959864445%

2.Annualized Volatility

Volatilityは 一定の期間のリターンのばらつきを測ります。Volatilityが高いほどリスクが高いと評価されます。Annualized Volatilityはリターンの標準偏差に1年の取引日数の平方根を乗じたものです。次に解説されています

Volatility

$${Annualized Volatility = SD Daily * \sqrt{t}}$$

3.Sharpe Ratio & Sortino Ratio

3.1 Sharpe Ratio

リスクを超えたリターンを割合で示します。次に解説されています。

Sharpe Ratio

a.計算式(MathJaxで書きました)

R = Return of portfolio

Rf  = Risk free rate

SD = Standard deviation of the portfolio’s excess return

$$Sharpe Ratio = {R_p – R_f \over SD_p}$$

3.2 Sortino Ratio

$$Sortino Ratio = {R_p – r_f \over SD_d}$$

4.Calmar Ratio

$$ Calmar Ratio = {R_p – R_f \over Maximum Drawdown}$$

IV.Charts

1.Financial Charts

import plotly.graph_objects as go
fig = go.Figure(go.Candlestick(x=toyota.index,
  open = toyota['Open'],
  high = toyota['High'],
  low = toyota['Low'],
  close = toyota['Close']))
fig.show()

2.Bar charts for indeces

a.Creating a data frame

指標の関数は、Iのリンクの文書の通りです。

銘柄列は、データ・フレームの名前を取得する関数を使用しました。それぞれlist comprehensionsです。

 

To be continued.

 

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

2 Comments

  1. 参考にさせていただきました、ありがとうございます。
    細かい指摘で恐縮ですが、Ⅱ.Dataの表で時価総額と書かれている所は、”Volume”に対応していると思われますが、出来高ではないでしょうか。

    • ご指摘ありがとうございます。おっしゃる通りで、ただいま訂正いたしました。コメントいただき、大変助かりました。

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.