EasyTrader ArtNo 294
通常交易系統在開發完成後,大部分的人皆以總績效損益去做衡量,期望總績效損益愈大愈好,或者是將風險納入考量,取得最大報酬風險比。但是不同系統之間(當沖、留倉、不同交易時段、不同商品 ...)只比較總損益意義並不大,而每冒一分風險,可以獲得多少盈利,則是比較具有意義的績效指標。有些人喜歡用勝率去做考量:賺多賺少無所謂,只要勝率高就好。
有些人會以風險低的策略,MDD小為優先考量。
有些人想的是以期望獲利*交易次數來衡量,考慮長期交易。
投資大師樊恩.薩普博士在《部位規模設定完全手冊》(The Definitive Guide to Position Sizing)中介紹了自創的交易系統衡量法 ⇢ 系統品質分數 SQN (System Quality Number)
在第一版的書籍裡 期望值 = (平均獲利*勝率) - (平均虧損*賠率)
在第二版才作修正如下,將原來的期望值公式,再除上每次交易可能遭受的風險。
期望值 = [ (平均獲利*勝率) - (平均虧損*賠率) ] ÷ 1R
基本上,只要你的交易策略期望值是正的,就是有可能會獲利的交易策略。
如果你不知道如何計算你的初始風險1R?
薩普博士建議,你可將交易記錄的平均虧損,設為你的1R。
SQN公式的影響因子如何看待呢?
1. 期望獲利越高,SQN值越大。
2. 標準差越小,代表交易產生的風險越小,當然SQN值越大。
3. 交易次數(N)越多,SQN值越大。
但是交易次數過多,確實也會讓SQN失真,例如你交易了1000次,則根號N = 31.6,這會造成SQN值異常的大。所以薩普博士也建議,在筆數的計算上有個上限,如果每年超過 100 筆交易,就當作 100筆計算。
例如策略的歷史交易資料時間區間是在 2007/1/1~2010/12/31 ,共有 992 個交易日內作了 546 筆交易,則計算出平均一年的交易次數是 546*(252/992) = 138.7次,則以此例超過了一年 100 次,因此計算上每年交易次數直接帶入 100。
對於一般正常交易次數所計算出來的 SQN 要如何評價呢 ?
SQN <= 1 , 可能很難拿來交易
SQN 介於 1.01~2 之間,平均水準系統 (有1.7以上較據統計顯著性)
SQN 介於 2.01~3 之間,好系統
SQN 介於 3.01~5 之間,優秀的系統
SQN 介於 5.01~7 之間,傑出的系統 (很少有)
SQN > 7,聖杯系統 (Holy Grail System)
當交易次數N太少,SQN也會相對低。薩普博士也給了以下的建議:
1. 交易次數只有十次(N=10),策略的SQN至少要大於3.5。
2. 交易次數只有二十次(N=20),策略的SQN至少要大於3.0。
3. 交易次數只有三十次(N=30),策略的SQN至少要大於2.5。
雖然,我們可以從績效報表裡找到相關SQN計算所需要的數字,用計算機求得策略的 SQN,總是沒有程式自動計算來得方便,所以我把這樣的想法轉成程式碼放入開發出來的策略中,這樣就可以衡量策略每一年的 SQN表現與整體交易期間的總分數
inputs:TradeArray[nn](NumericArrayRef),TradeDays(Numeric) ;
var:NTrades(0),PL(0),Sum(0),SumSq(0),NLoss(0),MeanLoss(0),MeanSqLoss(0),StdDevLoss(0),j(0),k(0),x(0);
vars:Rwin(0),RLoss(0),AvgWin(0),AvgLoss(0),Expectancy(0),AnnualTrades(0),RStdev(0),TradeAdjust(0) ;
NTrades = TradeArray[0];
AvgWin = iff(NumWinTrades <> 0, GrossProfit/NumWinTrades,0) ; { 平均盈利 }
AvgLoss = iff(NumLosTrades <> 0, GrossLoss/NumLosTrades,0) ; { 平均虧損 }
RWin = NumWinTrades/(NumWinTrades+NumLosTrades) ; {盈利筆數比例 }
RLoss = NumLosTrades/(NumWinTrades+NumLosTrades) ; {虧損筆數比例 }
Expectancy = (AvgWin*RWin + AvgLoss*RLoss)/AbsValue(AvgLoss) ; { 期望值 }
{ 統計虧損交易均方根植 }
for j = 1 to NTrades begin
PL = TradeArray[j];
if PL < 0 then begin
NLoss = NLoss + 1;
Sum = Sum + AbsValue(PL);
SumSq = SumSq + AbsValue(PL * PL);
end;
end;
{ minimum of 2 trades needed to calculate standard deviation }
if NLoss >= 2 then begin
MeanLoss = Sum / NLoss;
MeanSqLoss = SumSq / NLoss;
x = MeanSqLoss - MeanLoss * MeanLoss;
end ;
{ 雖然薩普博士建議 SQN 計算方式,當交易筆數大於 100時,以 100 做參考 ,個人是覺得若交易次數很多時,可以同時用年化 & 調整係數來修正 }
{ 年化交易筆數 }
AnnualTrades = (252/TradeDays)*NTrades ;
{ 調整係數 }
TradeAdjust = iff(AnnualTrades > 100 ,SquareRoot(AnnualTrades/100) ,1) ;
if x > 0 then begin
StdDevLoss = SquareRoot(x);
RStdev = AbsValue(AvgLoss)/StdDevLoss ; { 平均單筆虧損標準差值 }
_SQN = TradeAdjust * SquareRoot(MinList(AnnualTrades ,100)) * Expectancy / RStdev;
end else
_SQN = 0 ;
最後我將 如意多空網應用策略範例 內的策略也做了 SQN 評分如下
從統計出來的表現,我們也觀察到系統之間在不同的年度中 SQN也會有同質性與差異性的互補性,如果我們再多花些時間研究商品盤勢與 SQN的關係,相信更有助於開發一個優秀的交易系統的 !
PS: 表格內 Year 107 ~116 代表 2007~2016
最後我將 如意多空網應用策略範例 內的策略也做了 SQN 評分如下
從統計出來的表現,我們也觀察到系統之間在不同的年度中 SQN也會有同質性與差異性的互補性,如果我們再多花些時間研究商品盤勢與 SQN的關係,相信更有助於開發一個優秀的交易系統的 !
PS: 表格內 Year 107 ~116 代表 2007~2016
這本書有中文版嗎?
回覆刪除您好! 我是看網路上的原文,加上其它中文譯作如 "交易本事:邁向頂尖操盤手的獲利心法",發想寫了這篇文章與測試
回覆刪除謝謝分享,請問交易本事這本書也有講到交易系統衡量的方式嗎,例如您這次分享的SQN,
刪除另外請問CTA模型也是類似的交易系統衡量嗎?
新手發問,Thanks!
Q1 交易本事這本書也有講到 SQN 概念與評價,也有簡單提到部位設定的觀念
刪除Q2. CTA交易策略說明 https://kknews.cc/zh-tw/finance/6bxoxm.html
CTA 投資法 https://www.cmoney.tw/notes/note-detail.aspx?nid=45132
很優質!!感謝分享
回覆刪除謝謝您支持
回覆刪除感謝分享, 好文章!
回覆刪除作者已經移除這則留言。
回覆刪除請問在訊號內要引用這個_SQN,參數要帶甚麼?感謝,可否給一個範例?
回覆刪除您好
回覆刪除TradeArray[nn](NumericArrayRef),-- 回測期間每筆交易損益
TradeDays(Numeric) ; --- 總交易天數