回測是什麼?為什麼需要回測?
回測是把自己想的交易方法,透過歷史數據進行測試,藉由查看回測結果(過去表現),了解一個交易方法的可行性和有效性。
市場先生自己是在剛學投資第2年時,因緣際會因為寫程式交易,於是開始了解回測觀念,至今已經10多年,對我在投資的學習有非常大的幫助,釐清很多投資迷思。
理論上,一個未來能賺錢的投資策略,至少要在過去也能賺錢,回測就是驗證的方式。
回測讓我們不用付出真金白銀,也不用浪費時間青春,就能快速驗證自己的投資策略是否可行。
在這篇文章中會詳細探討回測的基本概念,以及回測的執行方式,介紹如何正確執行回測、回測的標準步驟和分析回測相關的一些重要指標。
本文市場先生會告訴你:
回測是什麼?
回測 (英文: Backtesting)也稱為回溯測試,是指用歷史數據測試某種交易策略的過去表現,觀察如果時間回溯到過去執行同樣的策略,會產生什麼結果,藉此評估一個策略在未來是否可行,以及提前了解可能的風險。
如果回測後發現,一個策略在過去按照一樣的方法執行,得到的成果很好,那也許它有機會繼續在未來創造好的表現 (但並非絕對)。
而一個策略,回測發現它在過去表現得很差,代表存在某些缺陷,我們就不會採用這個策略,因為對它未來的表現不會有信心。
為什麼需要回測?
• 驗證假說、排除無效策略:回測可以幫忙篩選掉無效策略,驗證投資策略的可行性。
• 了解策略風險報酬特性:包括歷史的報酬走勢、在歷史上各種多頭與空頭下的反應,以及像是最大回檔、波動率、勝率、盈虧比、Sharpe Ratio等等數據。
• 了解策略在不同行情下的表現:透過回測,你會知道這個策略歷史上哪些情況表現好、哪些時後策略會表現不好,結合當時的背景環境,能幫助我們更清楚的認識自己的策略。在未來遇到績效差的時候,也能判斷較差的情況只是短期狀況,還是策略長期失效。
• 提高策略信心:假如一個策略在過去十幾年裡有良好的表現,就算不能保證未來一定會成功,但至少可以讓投資者在進行操作時更有信心,不容易因為波動而被掃出場。
• 減少人性對投資的影響:因為回測是基於數據來客觀驗證,不是仰賴直覺或信心,避免交易決策受個人情緒的干擾,可以更理性看待投資策略。
當你想出一套交易方法,但不確定能否賺錢,也不知道實際執行的有效性,
先透過回測確認執行結果,可以省下拿真金白銀去實際驗證所需要付出的大量金錢和時間。
市場先生經驗談:回測讓我在投資學習上,少走很多彎路
我自己過去在做大量回測時,印象最深刻的經驗,就是會發現很多包括書上、電視上、坊間流傳很有用的策略,實際測試後發現績效很差,或是只有某些時期有用、其他時候很差,
真正能長期有效的策略可以說是少之又少。
這些經驗,讓我在學習投資的路上少走很多彎路,不必在一些回測無效的策略上浪費時間和金錢,也能更清楚瞭解一些策略特性。
過去的歷史能賺錢,未來並不保證可以賺錢,但回測依然有價值。
過去能賺錢,不代表未來一定能賺錢,但連過去都不確定是否能賺錢,未來更不用提了。
就算未來能賺錢,如果沒有過去歷史數據的佐證,當它虧損時,你有足夠的信心堅持下去嗎?
而過去的歷史能賺錢,不能保證未來一定會和過去一樣,沒有人能夠預期未來市場的走向,像是市場法規制度改變、黑天鵝事件的發生,都可能讓過去有效的策略變得失效。
回測執行步驟
1. 了解策略的獲利來源
一個策略的關鍵核心價值:你在賺什麼錢?
在一個策略中,最關鍵的靈魂問題,就是回答自己的策略在賺什麼錢?為什麼這樣的策略長期可行、有超額報酬?
也許是某些市場的不效率、某些市場統計上一再重複的特性、某些不合理可被套利的價差、某些資訊優勢等等。
所謂的進出場點、參數、濾網等等,都是為了獲取這個獲利來源所做的行動,只是策略的行動方針,而不是策略本身。
市場先生提示:我把獲利來源這一點放在第一項,是因為任何策略,都會在未來某一天陷入連續虧損,甚至超越歷史最大回檔的虧損。
如果你回答不出自己的獲利來源,遇到連續虧損的時候,往往只會懷疑策略失效,或者只能盲目堅持。
但如果你清楚獲利來源,知道自己在賺什麼錢、基於什麼理由或假設賺錢,那你就有能力判斷當下的情況是暫時現象,還是策略永久失效,能分辨是否該繼續堅持。
2. 清楚的定義交易策略:
市場先生認為所謂「清楚定義的策略」是:「你能否把策略邏輯,轉換為可執行的程式碼?」
一個交易策略包含幾項元素:
- 進場條件:通常是一個條件。
- 濾網 Filter:排除掉一些情境,即使符合進出場條件也不動作。
- 出場條件:可以是一個或多個條件,但需要與進場條件不衝突。通常預設是進場條件已經不存在即出場,或者進場條件不存在後達到某個門檻出場。
- 風險控制:即使沒有符合出場條件,但依然因為風險過高,決定強制出場的條件。一些短線策略中停利、止損屬於這部份。
- 資金控管:部位規模調整機制,決定何時加碼、減碼,透過部位增減,可以增加長期報酬與降低風險。
上述這些,如果都能用程式碼的形式呈現,才代表策略沒有任何的模糊空間,也才能進行回測。
市場先生提示:舉一個進場策略、出場策略,兩者互相矛盾的例子,
例如價值投資,價格下跌到某一個程度時,符合買進價格進場。但如果策略中同時又設了一個停損,在繼續下跌時,理論上對價值投資策略來說,這代表更便宜、更值得進場,但停損條件卻要出場,兩者就互相矛盾衝突,成果自然也不會好。
3. 收集歷史數據:
歷史數據可以透過購買或者一些免費來源下載,部分回測軟體平台也有提供免費或付費的數據源:
- 取得過去的價格及指標資料:包含開盤價、收盤價、含息報酬的還原價格、交易量、技術指標、經濟數據、財務數據、籌碼數據等等。
- 確保資料時間足夠長:時間要夠長的定義是,要經歷過金融市場變化的考驗。最好能經歷過牛市、熊市、盤整,這樣能觀察到更多有意義的成果。否則最後數據解讀容易有偏頗,用在未來時不一定符合。
- 資料清理:許多購買或下載的數據資料,期間數值可能存在錯誤、缺漏,因此需要設法檢查清理,確保資料正確性,才能得到有意義的回測結果。
資料所需要的長短,並不是說時間越長就一定越好,取決於統計上的效力。
在統計上要有足夠效力,一是樣本數要夠多,二是最好涵蓋不同行情情境。
例如一個波段策略,幾周或幾個月才有一些訊號變動,一年交易次數個位數,這樣一來最好有10年以上時間的回測,至少涵蓋一個多頭、一個空頭、一個盤整的市場周期,才可以觀察到這套策略在不同的市場週期中的表現。
又例如一個頻率是秒級或tick級別的高頻交易策略,可能回測3~6個月就已經有成千上萬的交易筆數,用歷史2~3年就有足夠代表性的樣本作為參考。
另外也要考慮數據本身的歷史背景。
舉例來說,黃金的價格抓1970年以前的數據根本沒有意義,因為在那之前美元和黃金是固定的兌換比率。
又例如財報資料,像是2020年到2021年 Covid 19時期的財報,是否可以拿來作為評估未來的參考?在一些產業顯然是有疑慮的,當時短期情況,並不能作為未來常態。因此評估策略結果,就需要排除掉這些偏差。
4. 進行回測:
將步驟1設定的交易策略套用到步驟2的歷史數據中,根據設定的進出場規則,進行模擬交易,同時計算每一次買賣的盈虧,輸出結果報表。
常見的回測工具包括:
- EXCEL:優點是只要熟悉EXCEL公式即可進行,需要自己抓數據,以及自己寫出回測報表所需的計算,適合跑日、周、月以上頻率不高的簡單策略。但只能處理少量的標的價格,無法處理大量運算。
- Python:自己撰寫程式,優點是能處理更大量的數據、更複雜的策略。需要自己抓數據,且需要有一點寫程式能力。
- 套裝軟體:例如Multichart、XQ、CMoney、Bloomberg等等資料軟體,有提供現成的數據,大多須要付費購買或訂閱。需要熟悉各軟體的程式指令與介面。
- 線上平台:例如TradingView、Portfoliovisualizer這類線上工具。提供免費數據,也提供現成的策略僅需調整參數,有些則可以自行撰寫程式碼。需要熟悉各平台的程式指令。
除上述以外,也還有很多其他撰寫程式的工具。
5. 結果分析:
評估回測結果的績效,通過年化報酬率、單年度報酬、勝率、盈虧比、Max Drawdown、Sharpe Ratio、Sortino Ratio、波動性Volatility、與Benchmark比較的差異等等結果,來確認策略特性,報酬風險是否值得運作。
另外也會評估策略的可行性,包括獲利是否只來自少數幾筆交易或少數年度、是否處於參數高原、是否有over fitting、是否過度最佳化、平均獲利是否遠高於交易成本及滑價等等。
如果回測結果不符預期 (大多時候如此),會去觀察進出場點位是否發生在自己預期的時間點,評估策略是否有體現自己原先的獲利邏輯並作調整,或者調整參數。
最終再回到步驟1重新來過。
而即使得到表現良好的策略,在正式運作前,也需要小心檢查,例如確認回測時是否用到未來的資料,過程計算是否正確等等。
歷史資訊畢竟還是有限的,要謹慎小心地看待回測結果,而不是把回測結果當成理所當然的未來。
如何評估回測結果?
一個有效的投資策略,有幾個可以快速判斷的特性:
1. 策略績效曲線圖,呈現從左下到右上,代表長期創造正績效。並且整體長期表現優於對比的benchmark。
通常benchmark會選擇風險類似的指數。
意思是風險類似的情況下,報酬要贏指數,策略才有使用的價值,否則指數化被動投資就好。
2. 平均單筆交易獲利扣除交易成本和滑價仍有足夠的報酬。
在計算績效時,尤其是交易頻率較高的策略,會加入交易成本,包括手續費和滑價,會抓一個正常略高一點的數字。
如果一個策略無法戰勝交易成本,並且超出足夠多,那就完全沒有使用價值。
3. 單年度來看,策略每年都呈現正報酬,或者僅有少數年度負報酬。
4. 策略沒有太嚴重的MDD,不會短期對帳戶出現破壞性的打擊。
MDD多少合理則根據策略性質及商品特性而定,越低越好,但沒有絕對標準。
市場先生提示:並不是單獨看績效高低來決定策略好壞。
首先報酬不是越高越好,也必須考慮風險,這也是為什麼挑選對比的指數,不一定是和股市大盤比,而是和風險類似的指數比。
而有些策略長期報酬風險表現良好,可以直接單獨使用,
有些策略可能長期不錯,但某些年度較差,也不代表完全沒用,因為有可能和其他策略配置互補的機會,組合後創造出報酬/風險更好的策略。
回測的核心指標
回測的目的是為了評估策略的可行性和有效性,在判斷回測結果時,有一些核心指標可以參考,讓交易者了解策略的盈利能力、穩定性、風險程度和績效,
以下介紹其中一些常見回測績效衡量指標:
收益相關 | 風險類型 | 勝率盈虧 |
---|---|---|
• 總報酬率 • 年化報酬率 • 平均單筆報酬金額 | • 最大回檔MDD • 波動率 • 夏普率 • 索丁諾比率 | • 勝率 • 盈虧比 |
收益相關指標:用來衡量策略的盈利能力。
• 總報酬率(Total Return)
總收益和期初投入資金相比的百分比率,用來判斷策略在回測期間投入資金獲得回報的比例。
總報酬率的計算公式 = (期末資產總值 – 期初資產值) ÷ 期初資產值 x 100%
• 年化報酬率(Annual Return)
把回測期間總收益的時間單位換算成以「一年」為單位,算出每年可獲得的報酬率,方便和其他投資策略做比較。
年化報酬率(%)的計算公式 = ( 1+ 總報酬率)(1/年數) – 1
• 平均報酬(Average Trade Return)
用總收益和總交易次數計算得出每一筆交易的平均收益,可以衡量每筆交易的盈利能力。
平均報酬的計算公式 = 總收益 ÷ 總交易次數
想深入了解年化報酬率,看這篇:投資年化報酬率怎麼計算?
風險類型指標:用來衡量策略的穩定性和風險暴露程度。
• 最大回檔(Max Drawdown,簡稱MDD),也稱為最大交易回落 or 最大交易回撤
回測期間(特定的一段時間內)資產淨值的最大跌幅,代表策略有可能經歷的最大虧損。
最大回檔的計算方式要分為兩步驟:
1. 計算「回檔 (Drawdown)」,只要資產價值有新高出現,就要計算一個新的回檔值。
回檔的計算公式 = (最新的資產最高價值 – 最高價值出現後的資產最低價值) ÷ 最新的資產最高價值 × 100%
回檔會隨著股價變化,一段特定的回測時間內,會存在許多不同大小的回檔。
2. 找出所有回檔中跌幅最大的回檔數值,就是「最大回檔」。
用來衡量資產收益的波動性大小,波動率越高,策略風險越大。
波動率是以過去某段時間價格變動的標準差的形式做計算,公式算起來比較複雜,
對一般投資人來說,不需要知道它怎麼計算,只要大概有概念、知道它背後代表的意義就好了。
單位風險獲得的超額報酬,可以評估調整風險後的績效。
白話解釋就是「在承受1%的風險下,能得到多少報酬?」
夏普率的計算公式 = (報酬率 – 無風險利率)÷標準差
勝率盈虧指標:發生獲利與虧損的機率,以及對績效的影響
計算所有交易裡有賺錢的交易占多少比例。
勝率的計算公式 = 有賺到錢的交易次數 ÷ 總交易次數
• 盈虧比(Profit Factor)
盈虧比是一段特定時間內的獲利交易單筆平均獲利,相較於虧損交易單筆平均虧損的比例。
盈虧比大,代表每次獲利時大賺,虧損時小賠。
盈虧比小,代表每次獲利時小賺,虧損時大賠。
盈虧比計算公式 = 獲利交易平均單筆獲利 ÷ 虧損交易平均單筆虧損
盈虧比和勝率都不能單獨去看,而是要合併參考。
通常順勢交易類的策略,盈虧比較大(大賺小賠)、勝率較低;
逆勢交易類的策略,盈虧比較小(小賺大賠)、勝率較高。
快速重點整理:回測是什麼意思?
1. 回測就是模擬過去的市場狀況表現來檢驗交易策略的有效性與可行性。
2. 回測可以省下拿真金白銀去實際驗證投資策略所需付出的大量金錢和時間。
3. 透過回測確認執行結果,可以減少交易風險、提高策略信心以及驗證市場假設,更重要的是減少人性對投資的影響。
4. 交易策略是有一套系統化的規則去執行交易的方法,像是怎麼判斷進出場條件,還有部位大小管理,交易策略需轉換成可執行的程式碼才能進行回測。
5. 一個有效的投資策略,並不是單獨看回測績效高低做判斷,有幾個判斷重點要考慮,例如策略績效圖、平均單筆獲利及MDD等指標一起做綜合評估。
了解什麼是回測後,想動手試試看怎麼自己跑回測嗎?
下一篇文章會教你「如何用TradingView做回測」。
下一篇:如何用TradingView做回測(施工中)
這篇文章為市場先生資訊整理與觀念教學分享,無任何投資推薦之意,投資必定有風險,投資前務必自行研究分析判斷。
加入市場先生FB社團,充實更多理財好知識
50歲之前想退休一定要懂理財,
解決投資的煩惱!
如果覺得這篇文章有幫助,
幫我按個讚,分享給更多人看到,謝謝!
一般留言