iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

在股票市場中,成功的交易策略不僅仰賴於對市場的洞察和分析,還需要通過回測和優化來驗證其有效性。回測是一個關鍵性的過程,可以幫助交易者評估和改進他們的交易策略。在這篇文章中,我們將深入探討回測的重要性和流程,並示範如何使用歷史資料進行回測,之後然後進行最佳化。

  1. 重要性
    評估策略有效性:回測可以幫助您確定一個交易策略是否在過去的市場條件下產生了盈利。如果策略無法在歷史數據上實現良好的表現,那麼在實際交易中的成功可能性也較低。

風險管理:通過回測,您可以評估潛在的風險和損失,並確保您的資本不會受到過度的損失。這有助於制定適當的風險管理策略。

改進策略:回測結果可以幫助您識別策略的缺點和改進的機會。您可以根據回測結果調整參數或修改策略,以提高其表現。

  1. 流程
    進行回測的一般流程如下:

a. 收集歷史資料
首先,您需要收集用於回測的歷史市場資料,包括股票價格、成交量、交易時間等。這些資料通常可以通過財經資料供應商或網站來獲得。

b. 選擇交易策略
根據您的投資目標和風險承受能力,選擇一個交易策略,包括交易信號生成、風險管理和出場策略。

c. 編寫回測程式
使用程式語言(例如Python或R),編寫回測程式來模擬交易策略。這個程式需要能夠讀取歷史資料,模擬交易,計算賬戶價值等功能。

d. 執行回測
運行回測程式,模擬過去一段時間內的交易。在每個交易日,程式將檢查交易信號,執行交易並計算賬戶價值的變化。

e. 評估結果
評估回測結果,包括總回報、風險指標、最大損失等。這些指標將幫助您了解策略的表現。

f. 最佳化策略
調整參數或改變策略的部分。然後重新運行回測以查看改進的效果。

backtrader & backtesting.py
Python基本主流就這兩種,backtrader與backtesting.py,

下方用backtesting.py當作範例
提供一個 Python 交易回測工具 Backtesting.py 簡易教學
這邊的範例是均線的簡單的策略和回測

要使用 library執行安裝

pip3 install backtesting

官網上面有sample code

from backtesting import Backtest, Strategy
from backtesting.lib import crossover

# 取得 GOOG 的股價
from backtesting.test import SMA, GOOG


class SmaCross(Strategy):
    n1 = 10
    n2 = 20

    def init(self):
        close = self.data.Close
        # 10 日和 20 日的移動平均值 (SMA)
        self.sma1 = self.I(SMA, close, self.n1)   # 10日均線
        self.sma2 = self.I(SMA, close, self.n2)   # 20日均線(月線)

    def next(self):        
        if crossover(self.sma1, self.sma2): #往上穿越 20 日移動平均時「買進」
            self.buy()
        elif crossover(self.sma2, self.sma1): #往下穿越 20 日移動平均時「賣出」
            self.sell()


bt = Backtest(GOOG, 
              SmaCross,
              cash=10000, #成本
              commission=.002,
              margin=1.0, # 初始保證金比例
              exclusive_orders=True)

output = bt.run()
bt.plot()

結果如下:

Start 2004-08-19 00:00:00
End 2013-03-01 00:00:00
Duration 3116 days 00:00:00
Exposure Time [%] 94.27
Equity Final [$] 68935.12
Equity Peak [$] 68991.22
Return [%] 589.35
Buy & Hold Return [%] 703.46
Return (Ann.) [%] 25.42
Volatility (Ann.) [%] 38.43
Sharpe Ratio 0.66
Sortino Ratio 1.30
Calmar Ratio 0.77
Max. Drawdown [%] -33.08
Avg. Drawdown [%] -5.58
Max. Drawdown Duration 688 days 00:00:00
Avg. Drawdown Duration 41 days 00:00:00
#Trades 93
Win Rate [%] 53.76
Best Trade [%] 57.12
Worst Trade [%] -16.63
Avg. Trade [%] 1.96
Max. Trade Duration 121 days 00:00:00
Avg. Trade Duration 32 days 00:00:00
Profit Factor 2.13
Expectancy [%] 6.91
SQN 1.78
_strategy SmaCross(n1=10, n2=20)
_equity_curve Equ...
_trades Size EntryB...
dtype: object

Backtesting.py 還提供了豐富的功能,例如圖形化工具,以便更深入地分析回測結果和圖表。詳細文檔和示例可在 Backtesting.py 的官方網站上找到:https://kernc.github.io/backtesting.py/

請注意,實際交易中需要謹慎,並且建議在模擬環境中測試和最佳化您的策略,以確保風險管理和效能。


上一篇
交易模型建立
下一篇
風險管理策略
系列文
嘗試使用Python與Open Data 打造自動化投資30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言