文件
開啟 Studio

策略範例

台積電逆勢抄底

本頁內容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:波動分析報告計算的視窗長度。

下一步

↑↓ 選擇 Enter 開啟 Esc 關閉