在投資裡,報酬告訴你「賺多少」,而波動率則告訴你「它穩不穩」。加密貨幣 24 小時交易、假日不停市,波動通常比股票更大,所以先學會量化波動,能幫助你選擇更符合自己風險承受度的標的。
安裝:
pip install yfinance pandas numpy matplotlib
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Heiti TC'
# 1) 設定標的與參數
symbol = "BTC-USD" # 也可改成 "ETH-USD"
window = 30 # 計算 30 日滾動
annual_trading_days = 365 # 加密貨幣建議用 365
# 2) 下載過去一年的日資料(已調整收盤價)
df = yf.download(symbol, period="1y", interval="1d",
auto_adjust=True, progress=False)
# 3) 計算日報酬與 30 日滾動年化波動率
df["daily_return"] = df["Close"].pct_change()
# 使用樣本標準差(ddof=1)較貼近常見財金實務,也可改 ddof=0
df["vol_30d_annual"] = df["daily_return"].rolling(window).std(ddof=1) * np.sqrt(annual_trading_days)
# 4) 檢視最後 5 天結果
print(df[["Close", "daily_return", "vol_30d_annual"]].tail())
# 5) 圖一:價格走勢
plt.figure(figsize=(12,5))
plt.plot(df.index, df["Close"], label="收盤價")
plt.title(f"{symbol} 價格(過去一年)")
plt.xlabel("日期"); plt.ylabel("價格(USD)")
plt.grid(True); plt.legend(); plt.tight_layout()
plt.show()
# 6) 圖二:30 日滾動【年化】波動率
plt.figure(figsize=(12,5))
plt.plot(df.index, df["vol_30d_annual"], label=f"{window}日滾動年化波動率")
plt.title(f"{symbol} {window} 日滾動年化波動率(過去一年)")
plt.xlabel("日期"); plt.ylabel("年化波動率(小數,例如 0.6 = 60%)")
plt.grid(True); plt.legend(); plt.tight_layout()
plt.show()
今天你把 Day10 取得的歷史價格,升級成可量化的風險指標。
從這一步開始,你的分析不只看「漲多少」,還能理解「穩不穩」。