iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

30天用Python打造你的數位金融實力:從零開始的FinTech入門筆記系列 第 11

用 Python 計算加密貨幣的「30 日滾動年化波動率」

  • 分享至 

  • xImage
  •  

在投資裡,報酬告訴你「賺多少」,而波動率則告訴你「它穩不穩」。加密貨幣 24 小時交易、假日不停市,波動通常比股票更大,所以先學會量化波動,能幫助你選擇更符合自己風險承受度的標的。

觀念先懂一下

  • 日報酬率:今天收盤價相對於昨天的漲跌幅。
    日報酬 = 今日收盤 / 昨日收盤 - 1
  • 滾動波動率:用最近 N 天(日報酬)的標準差衡量波動。
  • 年化:把日波動換算成年尺度。股票常用 √252;加密貨幣建議用 √365(因為天天交易)。

Python 小實作

安裝:

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()

https://ithelp.ithome.com.tw/upload/images/20250816/20177983GvRJbcwUCb.png

https://ithelp.ithome.com.tw/upload/images/20250816/20177983d3dUjOM0Fk.png

讀圖提示

  • 波動率顯示為小數:0.60 代表年化 60%。
  • 若某段時間線條抬升,表示那段日內漲跌幅變大,行情更劇烈;反之則較平穩。
  • 你也能把 symbol 換成 ETH-USD,或把 window 改成 14/60 觀察不同時間窗。

提醒

  • 若你看到 KeyError: 'Adj Close',代表 yfinance 新版已把 Close 調整過,直接使用 Close 即可。
  • 加密貨幣用 √365 年化,股票或 ETF 再改回 √252。
  • 波動率不是好或壞,它只是風險強度的溫度計;策略要跟你的心理界線與資金管理對齊。

小結

今天你把 Day10 取得的歷史價格,升級成可量化的風險指標。
從這一步開始,你的分析不只看「漲多少」,還能理解「穩不穩」。


上一篇
用 Python 做「加密貨幣歷史價格查詢」
下一篇
用 Python 算夏普比率與最大回撤:把風險與報酬說清楚
系列文
30天用Python打造你的數位金融實力:從零開始的FinTech入門筆記29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言