精選專欄
交易濾網設計:利用季節特性
何謂市場的「季節性特性」
台灣股市有所謂「五窮六絕七上吊」,此句話的意思是:一年十二月份中,資訊硬體的產製、代工訂單營收等方面,在五月、六月時會達最低迷,連帶影響股市跌多漲少。舉凡元月效應、聖誕節旺季、開紅盤行情、中秋節變盤等等,都是市場或商品的一種季節性分析與描述。利用季節性特性來設計濾網的原理即是:在偏漲的日子盡可能做多,在偏跌的日子則盡可能作空,在有波動的日子放大部位,在清淡的日子盡量做壁上觀。
季節性分析與指數
有些季節性講法純屬江湖傳說,媒體充版面用,季節性分析的基礎在於統計以及數字背後可以解釋的成因,「史瓦格期貨基本分析」一書中有專章介紹如何統計與編制商品季節性指數。此外,MultiCharts的績效報表也提供週期性分析,如下圖所示,我們就可以歸納出策略的績效在進入第三季末至第四季開始變差,我們就可以加一道濾網,在這個期間減少操作,或是把進場的條件調更嚴格。
可惜MultiCharts的周期性分析沒有星期一~星期五的分析(也就是策略績效在禮拜一至禮拜五各自的績效表現),股市有所謂的「黑色星期一」,是否禮拜一的波動往往比較大(理應如此,因為要反應周末可能的突發事件),又,禮拜幾波動最小?其實不用臆測,用MultiCharts就可以跑出統計(可參考一書「Building Winning Trading Systems with TradeStation」:Chapter 8 TradeStation as a Research Tool),結果如下表所示:
星期/ATR相較於近30日ATR表現 |
2013~2017年 |
星期一 |
115.26 |
星期二 |
92.91 |
星期三 |
105.45 |
星期四 |
109.08 |
星期五 |
98.17 |
讀數100表示ATR等於近30日平均ATR,越大代表波動越大,應用上,當沖策略就可以考慮在波動大的日子(星期一跟四)放大部位,波動小的日子減少操作。
濾網範例:星期一~星期五,把績效不好的那天濾掉
另外來有一個作法是直接個別看禮拜一~禮拜五各自的績效表現(較適用當沖策略),從結果去回推,形成濾網,也就是例如統計顯示禮拜一的績效相對不好,就針對禮拜一設濾網減少操作,依此類推。以下是程式碼(備註1),範例是一個缺口填補當沖策略,加上一個參數(DaytoTest)讓使用者可以自行輸入1~5,各自限制策略只在禮拜一~禮拜五執行,就可以個別看績效:
另外來有一個作法是直接個別看禮拜一~禮拜五各自的績效表現(較適用當沖策略),從結果去回推,形成濾網,也就是例如統計顯示禮拜一的績效相對不好,就針對禮拜一設濾網減少操作,依此類推。以下是程式碼(備註1),範例是一個DBS(請參考本篇:經典交易系統介紹:動態通道系統(Dynamic Breakout System, DBS)突破當沖填補當沖策略,加上一個參數(DaytoTest)讓使用者可以自行輸入1~5,各自限制策略只在禮拜一~禮拜五執行,就可以個別看績效:
====================================
Inputs: Ceil(30),Flr(10),S(30), DayToTest(0),StpLs (6000),PrfTg(4000);
Variables:X(0),ZDelta(0),N(0),vDayOfWeek(0),ValidDay(False);
If ( Date <> Date[1] ) Then Begin
vDayOfWeek = DayOfWeek( Date );
ValidDay = False;
If ( vDayOfWeek = Monday ) and ( DayToTest = 1 ) Then ValidDay = true
Else If ( vDayOfWeek = Tuesday ) and ( DayToTest = 2 ) Then ValidDay = true
Else If ( vDayOfWeek = Wednesday ) and ( DayToTest = 3 ) Then ValidDay = true
Else If ( vDayOfWeek = Thursday ) and ( DayToTest = 4 ) Then ValidDay = true
Else If ( vDayOfWeek = Friday ) and ( DayToTest = 5 ) Then ValidDay = true;
end;
X = Stddev(Close, S);
if X<>0 then ZDelta = (X - X[1]) / X;
If CurrentBar=1 then N = (Ceil+Flr)/2;
If CurrentBar>1 then N = N [1]* (1 +ZDelta);
N = MaxList(N, Flr);
N = MinList(N, Ceil);
{Entry}
if marketposition<>1 and ValidDay = true then Buy next bar at Highest(High, N) Stop;
if marketposition<>-1 and ValidDay = true then sellshort next bar at Lowest(Low, N) Stop;
Setstoploss (StpLs);
Setprofittarget (PrfTg);
Setexitonclose;
====================================
假設你得到一個禮拜五績效特爛的結果(最後可以回頭觀察每個禮拜五的日內走勢,並能找出背後成因),那麼你再回頭去調整程式碼,限制只在一~四進場,如此就可以優化績效。這也是一個利用季節性特行所設計出的濾網。
結論
交易策略的開發,參考的往往不脫價跟量,季節性特性如果呈現統計上的顯著結果,又能解釋背後成因,它會誠為超越價跟量之外的濾網,對交易績效可能大有幫助,絕對值得投資人去好好觀察跟專研。
備註:
1.程式碼與策略參考:http://systemtradersuccess.com/improve-simple-gap-strategy/。這個網站的討論相當完整與專業,推薦給讀者。
統一期貨分析師 莊舜傑
警語:本文提供之程式範例僅為教學之用,旨在闡述交易之精神與策略原理,非操作建議,亦不做任何保證。
/統一期貨相關連結/