策略範例
台積電逆勢抄底
本頁內容5
抄底就是所謂的逆勢策略,能不能用量化的方式實測呢?這一頁用布林通道對台積電(2330)做逆勢操作:股價跌破下軌時買進,等它反彈回中軌附近賣出,適合想驗證「搶反彈」到底能不能賺的人。詳細說明見策略文章。
策略邏輯
布林通道是最廣為人知的逆勢方法:運用均線和標準差,大部分 K 線都落在 d 日均線上下 n 個標準差的範圍之內。股價跌破下軌時可能出現超賣訊號,之後均值回歸,反彈到中軌附近。
- 布林通道:40 日均線,上下各 2.5 倍標準差。
- 進場:收盤價跌破下軌。
- 出場:收盤價回升至中軌以上。
- 標的:只交易台積電(2330)。
完整程式碼
strategy.py
from finlab import data
from finlab.backtest import sim
close = data.get('price:收盤價')
upperband, middleband, lowerband = data.indicator(
'BBANDS', resample='D', nbdevup=float(2.5), nbdevdn=float(2.5), timeperiod=40
)
entries = lowerband > close
exits = close > middleband
position = entries.hold_until(exits)['2330']
report = sim(position, upload=False, mae_mfe_window=40, name='護國神山救難隊')
# 波動分析報告
report.display_mae_mfe_analysis(violinmode='overlay').show()
# 報酬率圖表
report.display()
# 交易紀錄
trade_record = report.trades
trade_record這段程式依序畫出波動分析報告、報酬率圖表,最後列出交易紀錄。
加入停損停利
搶反彈如搶銀行,不管有沒有搶到都要跑!極端的暴跌行情下搶反彈,87% 勝率、平均持有 19 個交易日,平均獲利 5%;平均一年不到 3 次,要把握機會。
所以加上:漲幅超過 10% 產生停利訊號,跌幅超過 15% 產生停損訊號。
strategy_with_stops.py
from finlab import data
from finlab.backtest import sim
close = data.get('price:收盤價')
upperband, middleband, lowerband = data.indicator(
'BBANDS', resample='D', nbdevup=float(2.5), nbdevdn=float(2.5), timeperiod=40
)
entries = lowerband > close
exits = close > middleband
position = entries.hold_until(exits, take_profit=0.1, stop_loss=-0.15)['2330']
report = sim(position, upload=False, mae_mfe_window=40, name='護國神山救難隊')
report.display_mae_mfe_analysis(violinmode='overlay').show()
report.display()怎麼調整
- 均線天數 d(
timeperiod=40):數值越大,價格曲線越平滑,能減少波動雜訊。 - 標準差倍數 n(
nbdevup、nbdevdn):數值越大,能產生越極端的訊號。一般依據 68-95-99.7 法則(68-95-99.7 rule)設定在 1~3,也就是常態分布中,距平均值一個、二個、三個標準差以內的百分比。 - 停利停損
take_profit=0.1、stop_loss=-0.15:漲 10% 停利、跌 15% 停損。 - 股票代號
['2330']:換成其他股票代號,就能對別的股票做同樣的測試。 - 波動分析視窗
mae_mfe_window=40:波動分析報告計算的視窗長度。
下一步
這一頁有幫到你嗎?