什麼是回測 (Backtesting)?
簡單來說,就是「用歷史資料來測試交易策略,評估其過去的表現」,從而判斷策略是否可能有效。
回測四步驟
import backtrader as bt
import yfinance as yf
# 1. 定義策略
class MovingAverageCross(bt.Strategy):
params = (("short_window", 40), ("long_window", 100))
def __init__(self):
# 計算快、慢速移動平均線
short_ma = bt.indicators.SimpleMovingAverage(period=self.p.short_window)
long_ma = bt.indicators.SimpleMoving-Average(period=self.p.long_window)
# 監控均線交叉訊號
self.crossover = bt.indicators.CrossOver(short_ma, long_ma)
def next(self):
# 策略的主要邏輯
if self.crossover > 0: # 快線向上穿越慢線
self.buy()
elif self.crossover < 0: # 快線向下穿越慢線
self.sell()
# 2. 準備數據與環境
cerebro = bt.Cerebro()
data = bt.feeds.PandasData(dataname=yf.download('AAPL', '2020-01-01', '2022-01-01'))
cerebro.adddata(data)
cerebro.addstrategy(MovingAverageCross)
# 3. 設定初始條件
cerebro.broker.set_cash(100000) # 初始資金 10 萬
cerebro.broker.setcommission(commission=0.001) # 手續費 0.1%
# 4. 執行與出圖
print('初始資產: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('最終資產: %.2f' % cerebro.broker.getvalue())
cerebro.plot()
如何解讀圖表與分析