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年の取引日数の平方根を乗じたものです。次に解説されています。
$${Annualized Volatility = SD Daily * \sqrt{t}}$$
3.Sharpe Ratio & Sortino Ratio
3.1 Sharpe Ratio
リスクを超えたリターンを割合で示します。次に解説されています。
a.計算式(MathJaxで書きました)
Rp = Return of portfolio
Rf = Risk free rate
SDp = 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.
参考にさせていただきました、ありがとうございます。
細かい指摘で恐縮ですが、Ⅱ.Dataの表で時価総額と書かれている所は、”Volume”に対応していると思われますが、出来高ではないでしょうか。
ご指摘ありがとうございます。おっしゃる通りで、ただいま訂正いたしました。コメントいただき、大変助かりました。