顯示具有 程式交易策略 標籤的文章。 顯示所有文章
顯示具有 程式交易策略 標籤的文章。 顯示所有文章

2014年6月27日 星期五

多策略組合的觀察2

 

以前篇 多策略組合的觀察 回應讀友們的思考,或許是前篇例子說明不夠清楚,這篇就再延伸紀錄了。

 

要回應的重點整理

1. 組合的整體績效及風險

2. 資金運用效率

3. 同時運作四種不同邏輯的情形

4. 策略的刪減

5. 遇上系統性風險

 

同一個範例,策略A、B、C、D四支,及ABCD的組合,假設是一年的表現如圖。

 

策略組合

 

關於組合的整體績效,為什麼是加總不是平均,換個角度想,A、B、C、D是我們屬下的四個交易員,我們就當作管理者的角色,A交易員這年賺了300、B交易員賺了120…等等,很優秀的,四個交易員都是賺的,這個TEAM一年下來賺的,就是四個人加總起來的,800。

 

以A自己的角度來看,他的drawdown 30,表示這一年裡,績效從高點回落最多的幅度是30元,同理,B是15元,等等。不過從管理者的角度看,他們四個交易員每天有賺有賠,常常互相抵消一部份虧損,所以整個TEAM的drawdown變成只有40,而不是他們四個人加起來的90

 

如此,對TEAM來說的獲利風險比,是800 / 40 = 20倍,比起他們每人個別的比率都還好。

 

關於資金運用效率,可以有許多種資金管理方法,在例子中有drawdown資料,所以就假設是以drawdown 的倍數來控管資金使用,再假設這個倍數是3倍,A交易員drawdown 30,那需要準備本金 90來交易,交易的結果是獲利300元。而以TEAM來說,需要準備本金 120元,交易的結果是獲利800元,以這樣的例子來說,300/90 比 800/120,那當然是後者資金有效率了

 

關於同時運作四種不同邏輯的情形,讀友經驗是可能會混亂,可能會互相衝突。但是,我們要的就是衝突,如果四個策略常常同向,才該注意,這樣就會失去風險分散的效果。而實際運作上,比四種還多上太多了,夠分散的邏輯策略十個、幾十個都常常運用。

 

關於策略的刪減,以ABCD四個交易員的表現來說,A和C表現較好,那是否選擇AC兩個就好了? 這有兩個問題,第一,現實交易上,我們無法事先得知A和C表現是比B及D好,換句話說,我們若事先就知道誰什麼時間表現最好,那段時間不就梭哈押他就行了嗎? 那就不需要多策略了,當然是作不到。第二,如果A+C表現如預期的比B+D好,還是不能表示AC會比ABCD好,因為多個策略帶來的drawdown分散效果不同,例如AC的drawdown可能也是40,那AC和ABCD的P/D是480/40 & 800/40,當然還是ABCD好。這個部份,要延伸的主題是怎麼選擇各策略以及相關性的測試,下篇再紀錄了。

 

關於遇上系統性風險,讀友經驗可能會全賠,這當然可能,也就是我們要瞭解drawdown的目的,但一個好的分散組合,或許一兩天偶爾會全賠,但拉長時間看應該是有的賺有的賠,而更長的時間看應該是都要賺,才是正常有效的分散,所以我們才研究那麼多種策略來搭配。

 

以上,請讀友想法繼續交流討論囉。

 

 

2014年6月20日 星期五

多策略組合的觀察

多策略組合標圖

 

由前篇 避免過度最佳化 提到了單一程式策略儘量專注著目標,不需要把多種盤勢邏輯統統放在一支改成大雜燴,那很容易走進最佳化的陷阱,而此篇要紀錄的是各程式所合成的策略組合觀察。

 

一般說來,走到衡量整體組合的程式交易者已經作了非常多的事情了,經過策略邏輯的設計、實戰、修改,瞭解自己偏好的交易型態,瞭解自己能夠接受的風險程度,才有辦法一支一支的打造出合適的策略,再將各支策略組合觀察整體績效,觀察的第一重點就是利潤風險比。

 

以下圖為例,有四支交易策略A、B、C、D,及其個別的獲利風險

 

策略組合

 

而這四支策略組合在一起時的獲利是各別策略獲利的加總,但Drawdown則是大為降低,組合的獲利風險比為800/40=20倍,比起原先各別策略的P/D都要高的多,這是我們要的東西,原先一支策略A估計的獲利300就要準備承擔30的風險,現在組合有800的獲利卻僅要估計40的風險

 

在這個例子中,要特別衡量是組合後的Drawdown 40,與原先個別策略的Drawdown加總 90 (30+15+20+25),所計算的比例 40 / 90 = 44.4%。這個比例的意義是組合的效果,各策略因為彼此不同的損益期間表現,所以在每段時間都有互相抵補的效果

 

當然也要各策略屬性不同、目標不同才會有效,不然每支策略賺的時候一起賺、賠的時候一起賠,那放在一起也沒什麼效果,這種情況的比例算出來會是高的,可能70%、80%以上。

 

調整組合的目標就是希望能夠再降低這個比例,希望能夠到40%、30%或更低,所以在打好基礎,有了一個基本組合後,開始慢慢調整整體組合,這時可能會發現某支不太會獲利的策略加進組合反而是蠻有效的,甚至沒什麼賺賠的策略放進組合,雖然總獲利沒增加,但是Drawdown降低了,那也是一個進步

 

而且加一支普通的策略所花費的工夫,比精雕細琢一支複雜策略來的輕鬆多了。由組合的角度看,或許普通策略更值得,各位讀友可以多加思考這樣的方法,同時再次避免了單一策略的過度最佳化

 

另外有一點可以多注意的是,若要增加部位時,同一策略的加碼往往不如再加進新的策略,當然,新策略並不是那麼好生,所以對於學習新邏輯、測試新想法,都是無法停止、要持續下去的。

 

 

 

附記1: 單一策略的評估主要有介紹三項方法,各自重要,而組合評估也同樣適用,此篇僅著重獲利風險比,而另兩種方法仍值得觀察參考。

 

附記2: 此篇紀錄策略組合的評估方法及好處,工具利用可以是MultiCharts的Portfolio backtester或EXCEL自行計算(由每日的測試損益推算),這部份下篇再紀錄了。

 

 

 

FXB

《本文與 Bituzi 同步刊登》

 

 

2014年6月7日 星期六

避免過度最佳化

 

help

 

程式交易策略的設計有個大難題,不論是新手或老手都會一直感到困擾的問題是: 我的程式是否過度最佳化了?

 

以我們現在開發程式交易策略的方式,是將歷史資料作為數據,套用各種不同的邏輯來測試,希望能找到一種通則可以適用在對未來的預測。這樣的方式是利用歸納法找出通則,而通則是表示有一定的機率,也可以當作是我們回測的勝率。

 

但若將前述各種不同的邏輯條件增加的越來越多,就會越來越像是對數據作細節的描述,可以得到很漂亮的測試,但對未來的預測能力必然不如對過去的好,這很像是考試前把所有的考古題答案背下來,而不是真的瞭解怎麼解答,那當考試時題目稍有改變就不會寫了。

 

有指標就一定有參數,有參數就一定要作選擇,選擇參數的個數及個別的範圍。還有更大的考量是,要怎麼判斷是否也用了太多指標以致於最佳化了? 或許它真的就是這麼準,也沒什麼不可能。

 

那怎麼辦?

目前並沒有主動正向的建議或準則說明該使用多少參數或指標個數,只有被動的再去測試,常用的方法是forward backtesting,就是把數據切兩部份,一部份測試合適參數,另一部份作為未知數據來測試結果。假設同一組參數在這兩部份的運作情形差異不大,那很可能表示這組參數是夠穩健的,若在兩部份的差異很大,那好險有先作測試…

 

這邊說的差異大不大要如何判斷? 可以利用之前談過的交易策略評估,參考連結

交易策略評估-Kelly formula

交易策略評估-獲利風險比

交易策略評估-損益期間

(交流會的朋友知道怎麼從測試報表中,較快速的選擇合適參數了)。

 

 

以上,是針對單一策略作forward backtesting來判斷是否過度最佳化,但作了也評估過了,能表示未來績效會和測試時一樣好嗎? 當然,還是不一定的,唯一可以確定的是對這支策略的信心和瞭解更加提昇了,這也是很重要的。

 

除了forward backtesting之外,避免過度最佳化是從策略組合的角度來設計,簡單的說,就是讓各策略專注。專注在目標上,目標是長波段10%行情、中波段3%行情、當沖策略、極短線策略、震盪盤策略或是針對只作多空單方向的特殊策略等等。

 

在設計這些策略時,單一的目標要夠明確,例如想設計一個大行情必吃的策略,那小行情就不予理會,或許能作到避開損失就夠好了,千萬不要想連震盪小行情也吃的到,因為這樣很可能又會陷入多重邏輯的陷阱

 

以交流會談到的故事來說,動物界舉辦了鐵人三項比賽,項目是飛行、短跑和游泳,老鷹在飛行項目得了第一名,但是短跑和游泳都不行,獵豹在短跑得了第一名,但是另兩項不行,海豚則是游泳第一名,但另外兩項也不行。最後這項比賽的冠軍是一隻鴨子,三項都會一點,雖然都不怎樣。

 

這故事和程式交易策略有什麼關係? 假如我們希望設計一個任何狀況都適用的策略,什麼行情大小都要吃到,那麼就可能會設計出一個什麼都吃不好的鴨子,而好的作法應該是建立一個團隊,由老鷹、獵豹和海豚組合的超級戰隊。

 

這和避免過度最佳化又有什麼關係? 當我們專注在特定目標設計策略可以有較簡化的邏輯,同時在組合時又可以有效的截長補短,這個有不有效,主要是指降低整體drawdown,也就是看老鷹、獵豹和海豚彼此合不合,這個戰隊能否發揮綜合效果,這部份下篇再紀錄了。

 

 

 

2014年5月10日 星期六

波段策略應用個股期貨

 

台指期近年來波動小,作期貨單找方向實在是沒什麼便宜可佔,所以除了台指之外,要平衡整體損益的方法就是找其它商品,作選擇權找時間和波動的利潤、作國外期貨,那是一個更大的世界。

 

其實國內還有選擇,就是個股期貨。以最大成交量的幾檔,日成交量也有一千口以上,而且這些也都是高價且波動大的標的。目前來說,宏達電、可成、TPK、聯發科,都是優先考慮的標的。

 

相對台指期來說,這些股票的波動率實在是非常大,因此趨勢單就更有交易機會了。L 使用 歷史波動率策略設計 此篇所介紹的類似策略,屬於中長線的波段。針對以上四檔個股期貨作測試,時間取不長,從2013/7開始,進出的狀況如下圖。

 

個股期

 

測試出來的績效是很不錯的,整體組合的績效如下。

 

個股期2

 

多空獲利平均,可成、聯發科、宏達電多單獲利,TPK空單獲利。將近一年的時間獲利約85萬,而drawdown 約17萬,這個獲利風險比將近五倍,相當高,當然也是因為這幾支個股都非常有趨勢。

 

現在是事後來看這四支個股在過去一年的趨勢單獲利很好,並不能以此預期未來獲利狀況,再進一步的研究可能要把現貨資料拿來測試,至少五年十年的,若績效也穩定的話,那對策略的信心就高多了

 

不過若是程式單以長線趨勢為主的話,押台指期不如押這幾檔個股有機會,有興趣的朋友也多測試看看囉。

 

 

 

2014年1月30日 星期四

使用Renko圖形交易所面臨的問題

 

在交易的圖表設定中,讀者會發現K棒不一定是要畫成蠟燭圖,也可以選擇一些不同邏輯去定義出不同的線圖,例如本篇的RENKO就是一個利用價格去畫的例子,讓我們可以很直觀的觀察價格單純的走勢,減少價格在盤整時的雜訊,然而本篇並不主要介紹RENKO的好處,而是去了解對於使用程式交易的我們,會有甚麼樣的問題,首先透過下圖設定的欄位來了解其原理。

 

圖片 1

 

一開始要設定一個單位大小,在目前國內最新的8.5版中另外有提供依照%來設定單位大小的選項,但其道理都是在設定每一根棒子要多長,表示當價格滿足設定的一單位大小,這根棒子就算收盤,開始畫下一根,另外也要同時配合週期的設定,來決定顯示的時間,設定成最小1TICK,就是每個TICK出現若滿足一單位點數的條件,就算完成並且顯示一根棒子,因此如果設定成1分鐘,就需要等待一分鐘過完,滿足多少個單位才一次顯示出來。

 

最後下面就是一些顯示的設定,一般為了避免隔日跳空的計算錯誤,通常會勾選收盤時中斷,就不會跑出明明是跳空,卻顯示成全部連續棒子的狀況,另外其他則只是用來控制顯示的方式,並不影響計算。

 

然而以上的邏輯其實對要使用RENKO進行程式交易的我們是有很大的困擾與問題,為了呈現問題的所在,J先寫了一個很簡單的測試程式,程式碼如下。

 

圖片 31

 

 

這個當沖策略設定當棒子收紅,就於下一根開盤做多,如果連兩紅,就下一根多單出場,同時設定SET指令中的STOP,空單則相反,不設定手續費,跑的圖就是最上面那張圖的設定,每四點畫一根棒子,週期使用1TICK,進行盤中即時收報價進出場測試。

 

圖片 2

 

從本張交易截圖可以看出,黃線是換日線,左邊是回測與昨天狀況,每一個進場點都在棒子的起畫點,除了SETSTOPLOSS的出場外,都在棒子的收盤(棒子的上下緣)。然而右側的實際上線狀況,一開始的多單進場就沒有落在棒子邊緣,而是在空中或是像第三筆一般在棒子中間,同時第三筆出場也在空中而不在邊緣。

 

再來看看下2圖的比較,首先第一張是即時上線狀況,第二張則是關掉MC開的狀況(形同回測狀況)。

 

圖片 6

 

 

圖片 16

 

讀者可以很明顯看出來,同一個棒子的狀況,在上線時(上圖)與回測時(下圖)比起來,差異非常大,主要的原因是每根棒子的開盤價位置被修改了,而SETSTOP指令仍有作用,只是因為進場點改變而導致出場點當然也就有所不同

 

再來J同一天也同時測試了如果週期改變為10分鐘,單位大小為3點,盤中即時圖形如下。

 

圖片 21

 

讀者可以仔細看J標記的部分是第一根9點15的棒子,然而下方座標軸卻顯示了好多個09:15,而每一個進場也都很漂亮的在每根棒子的邊緣,這原因是實際上這些09:15的進場與出場都是在09:15時間一走完時,瞬間跳出來的多次進場與出場,若使用下單機丟單,則是一筆單都不會有,或是進一單在最低點!

 

最後透過本次實驗,我們得到幾個RENKO使用上的問題,第一是在回測狀態,開盤價的定義是受到收盤價的確立(滿足一單位大小的點數)而得到回測時每根棒子的開盤價。第二是周期的設定會影響棒子多久才瞬間跳出來一次。第三就是目前RENKO是有保留完成那根棒子時的高低點,因此SET指令有效。

 

綜合以上三點可以了解到,目前RENKO的運算邏輯下,回測與真實落差太大,無法使用RENKO當作DATA1進行交易,但若使用其為DATA2當作指標來使用卻是種可行的作法,因為當成指標時可只採用其確立的CLOSE值運算以上提供想使用RENKO的讀者一些實驗心得。

 

2014年1月13日 星期一

利用交易口數畫K棒

 

多數人常使用的K棒可能是分線或日線所組成,而在MC中提供了除了用時間來計算K棒以外,還可使用成交口數來計算一根K棒,因此產生的特色是,每天得總K棒數會受到交易量的影響成變動,所以如果當天行情大(伴隨交易量大),就會使當日K棒變多,反之則相對一般分線減少。也許對玩一陣子MC的讀者來說這不是什麼新鮮事,但是否真的對交易策略有所幫助,本篇也會來驗證一下。

 

首先有淺入深,先看看在哪邊調整,可參考下圖,在商品設定中調整成以"口"來計算週期的單位,本例使用2000口作計算標準。

 

口數

 

現在J想比較到底使用口數對交易策略有沒有幫助,因此將拿同一個程式碼的策略套到兩種不同K棒來比較,以下的例子是使用台指期2005/1/2至2014/1/10為資料,策略是3口加碼型的留倉單,手續費設定為每口400元。

 

首先使用2000口的K棒作基準,跑五個參數的最佳化,選擇獲利因子最大的參數,再將此參數維持固定,調整K棒成分線,在維持相近的交易次數為前提下,找出5分線是最為接近且獲利表現最好的週期,將兩者比較一下如下表。

 

CP1

 

可以發現直接用2000口的參數套過去,得出更差的結果,獲利大幅降低,回檔增加一倍。

 

而為了更完整的測試,現在我們反過來做一次,首先,把五分線的參數一樣最佳化,且參數區間皆完全一致,再一樣透過選擇獲利因子最大的參數來當作5分線最好的表現,最後將這參數不變,直接把k棒設定改為2000口,得到兩者比較的績效如下表所示。

 

CP2

 

可以發現,兩者除了2000口的交易次數變多以外,幾乎沒有甚麼差異,因此我們再多比較一個項目近1年(2013年)表現,則由2000口k棒的策略明顯勝出。

 

最後,總結來看,利用口數畫k棒可以讓原本分線交易策略有更好的參數選擇,產生出更好的表現,並在近年來也能持續維持獲利,然而交易系統報價的精確性就顯得更為重要了,一般的DDE在使用口數畫K棒時可能就會出現問題,讀者需要特別注意,或許花點小錢讓系統更快速穩定,就能創造出更多不同以往的交易機會,就像本篇在K棒上動點手腳,就能創造出完全不同的損益結構,提供給讀者思考。

 

2014年1月8日 星期三

Aroon Indicator 阿隆指標

 

Aroon Indicator 阿隆指標,以距離創新高低後的期間來判斷強弱勢,說明和範例可以看兩個資料連結:

 

Aroon Indicator

Finding The Trend With Aroon

 

指標為計算兩數值Aroon多方及Aroon空方,定義是

AroonU : [(期間數) - (創新高後的期間數)] / (期間數)] x 100

AroonD : [(期間數) - (創新低後的期間數)] / (期間數)] x 100

 

未看圖之前可以想像,最近有創新高,AroonU值就高,有創新低,AroonD的值就高。另外一個可以參考的指標是AroonU – AroonD,有創新高又很久沒創新低,這個值就會高

 

以Multicharts來實作這個指標的語法如下

 

idAroon

 

idAroon2

 

套用台指期行情來看看有沒什麼特殊性可以利用

 

Aroon

 

是不是有什麼線索可尋?

有看出來了嗎?

 

 

 

 

 

 

若有看出來的朋友麻煩分享一下,L對它沒什麼感覺,不曉得怎麼利用,(逃~)。

 

小指標介紹,目前約略測試所設計的策略績效都不怎樣,其實也蠻正常的,要找些其它指標和Aroon搭配使用才可能有像樣點的結果,有心得再紀錄下去了。

 

 

2013年12月14日 星期六

秒K應用

 

一般多數交易者在使用或觀看K棒的時候,通常從1分、5分、10分線開始著手,稍微想做些差異化的時候可能使用2分線、3分線、7分線等較少見的K棒周期,然而若跳脫分線框架,當科技進步,電腦效能日新月異,秒線的使用在MC上也已經完全不是問題,也許現今交易的戰場已經不是分線可因應?為了證明這個想法或差異化我們既有的策略,我們開始思考使用秒k來作交易,至於該要設定多少秒呢?

 

J這邊可以提供讀者一個方向,首先看一個例子,3分線表示180秒,若設定為177秒,則因為177/(180-177)=59,所以表示當一般的3分線走了59根K棒之後,因為每一根省下3秒的時間,導致在177秒的K棒設定下,圖上已經畫出了60根K,反之設定成183秒則比原本分線少1根K棒。

 

透過多或少製造1根K棒,也許能讓我們減少一些在整分時敲單的滑價(因一般程式單若是用指標型撰寫將在00秒時敲單),而本篇將延續海龜通道突破策略的精神,稍微小改程式碼成為利用close價突破來進單的指標型策略,以反映秒k收盤價的微小差異在近年來的影響。

 

程式碼修改如下圖。

 

1

 

建立用close所創造的高低區間,回取K棒數(HL)參數讀者可自行嘗試。

進場與出場也以最簡單的方式修改如下圖。

 

2

 

須注意,在撰寫秒線以下層級時,TIME要改為TIME_S才不會錯誤喔!另外本篇利用之前提及的尾盤出場策略1-建立日期表,作最後進場與出場時間調整,以及漲跌幅超過6%的進場限制。

 

在參數相同的情況下,本篇利用最多加碼5口來突顯出3分線與177秒的差異,首先我們先來看3分線的表現如何,回測時間為2007年至今,來回成本單筆設定800元。

 

3

 

再看看177秒的績效圖如下。

 

4

 

可以發現兩者在同樣狀況下,177秒K的回檔略小於3分線,而且獲利大約多了快100萬。再來觀察近年來表現,如下圖所示。

 

5

 

上方的圖是3分線,可以看出近年來已經無法再創新高(上次新高點大約為2011年2月),而下圖177秒K的在2013年9月還有再創新高。

 

經過本篇的實驗證實,也許過往的簡單模型在近年來無法表現得令人滿意,但透過細微的變化,許多邏輯仍然是持續有效的,只是現在交易的戰場或許已經拉到秒K上了,讀者可以再延伸思考透過不同的以往的K棒計算,可能也會有更好的表現。

 

 

2013年12月5日 星期四

尾盤出場策略2-加強判斷

 

一支交易策略可簡單分成進場主邏輯、出場主邏輯,而當沖策略在尾盤必須出場的特性,使得其重要性在出場設計上不容小覷,然而根據 J 幾年來的觀察,似乎許多交易者並不太在乎這點,大多專心於進場與一般停損的設計,而最後出場僅使用指定時間出場,因此本篇延續 尾盤出場策略1-建立日期表,來簡單介紹一些尾盤現象對績效的影響性,提供讀者思考更多在尾盤邏輯設計的一些想法。

 

本篇測試的策略在進場主邏輯部分延續 通道突破策略  一文中所使用的程式碼,讀者可先行參考,然而為了增加交易次數以突顯出尾盤的影響性,本篇改用台指期1分線交易,參數也稍微修改,並配合尾盤出場策略1-建立日期表 所使用的最終出場時間作為初始設計,其出場設計如下圖,讀者可先回憶一下。

 

圖片 1

 

2007年至今交易績效如下(手續費來回共800元)

圖片 2

 

現在,開始進入本篇的尾盤出場邏輯,主要新增的想法是,交易時間以及賺賠對於出場快慢的影響,以及是否該逆勢找好的點出場(例如作多拉高出),或順勢出場(例如下跌後多單出場),讓我們直接看程式碼與績效得到簡單結論。

 

圖片 3

 

從上圖中可發現,若策略處於虧損狀態,且12點50分至13點時是上漲的,則於13點後就盡快出場,如同虧損時找有利的點出場,其改善的績效如下圖。

 

圖片 4

 

獲利增加約10萬,MDD幾乎不變,效果不錯,然而若是條件相反,當策略賺錢早點出場則會如何呢?直接看下圖績效來得到結論。

 

圖片 5

 

可發現獲利明顯減少23萬,MDD幾乎不變,符合虧損時早點讓部位出場,賺錢時讓獲利奔馳的精神,然而讓賺錢的部位一直持有到尾盤就是最好的嗎? J用同樣的手法找到稍微能繼續改善績效的方法,一樣直接來看程式碼。

 

圖片 6

 

其想法主要在思考,若是賺錢的時候,大多數當沖順勢策略應該也是賺錢,而假定多數策略與K棒周期的影響大約都在13:10至13:20分左右出場,因此若行情在此時間轉為與今日當沖走勢反向,也許顯示法人在尾盤作價上並不積極,持有過久也不一定能吃到13:30當沖強制平倉以及現貨收盤後期貨的順勢行情,使得順短期的勢先出場較有優勢,其績效如下。

 

圖片 7

 

獲利上升6萬,MDD續減少,反之此時若改為逆勢出場(即條件3與4對調),績效如下。

 

圖片 8

 

顯示若尾盤趨勢持續順勢,不該提早出場,將大幅減少獲利與增加MDD。

 

最後,透過尾盤簡單的上漲與下跌現象,與交易時間的特色,將有助於進一步改善交易績效,而本篇並非特別要研究其成因為何,只是挑出可能相對有意義的時間去做測試,得出符合一般賺錢精神的結論,賠錢快出,而且逆勢找好機會出效果不錯;賺錢要等轉弱再出,否則持有久一點較有優勢再了解簡單的尾盤狀況後,更進階讀者則可思考如何精進賠錢逆勢出的方法,賺錢順勢出的方法,也許可以找到更明顯改善績效的交易邏輯。

 

 

2013年12月3日 星期二

Average True Range(ATR) 平均真實範圍

 

之前紀錄過觀察行情波動的技術指標,有 歷史波動率 及 動能指標-ADX與Momentum ,此外常見的另一個指標是Average True Range(ATR) 平均真實範圍。目的都是由波動程度來輔助策略,應用在合適的盤勢及避開不合適的盤勢。而不同的計算方法則是各有其依據,每個人能領略並應用的程度也不同,但多認識一下總是好的。

 

定義的連結如 Average True Range - ATR,先計算其中的TR,取以下三者的最大值

  1. 今高-今低

  2. (今高-昨收)的絕對值

  3. (今低-昨收)的絕對值


然後再計算N個TR的簡易平均值

 

ATR定義

 

在說明中有簡單提到,高的行情波動會有高的ATR值,低的行情波動會有低的ATR值。

 

ATR值的計算很簡單,在MULTICHARTS裡也有內建了這個函數可以直接使用,例如下圖,使用AvgTrueRange,一個參數是要多少期間的平均數。

 

mc_atr

 

直接套用指標觀察圖形

 

mc_atr_pic

 

ATR如同其他波動性指標,在很多方面都可以應用,例如

 

  1. 單一指標的高低比較,由設定的門檻判斷波動的高低值。

  2. 長短期的ATR互相比較,判斷近期相對的波動率程度走向。

  3. 將ATR應用在帶狀指標的範圍決定上。

  4. 應用在出場的條件,例如遇上K棒遠大於ATR的區間時,是否適合停損停利。

  5. 也可以應用在停損的設定上,ATR小讓停損小,ATR大讓停損大。

  6. 某些基於K棒強弱度的策略邏輯可以應用ATR過濾不具代表性的K棒。


 

以上提到的各項都各自有測試應用的價值,L自己也有應用到的部份,不過以目前的應用程度來說,還不及ADX的順手,在有不同想法時仍會想到測試使用看看,或許有更多的好用之處,就請朋友們動手使用看看囉~

 

 

2013年11月13日 星期三

歷史波動率策略設計

 

在 歷史波動率 這一篇中紀錄了歷史波動率的計算和指標語法,就可以拿來作為策略訊號的設計或濾網,基礎想法是在於波動率期間的比較,如果短期的波動率小於長期的波動率,表示目前行情較為穩定、黏著、緩慢,也比較像是多頭的環境中表現的狀況。反之,若短期的波動率大於長期的波動率,表示目前行情的波動較快速、急拉急殺,可能有恐慌氣氛,那就像是空頭盤勢了。

 

以上述波動率比較作為濾網,嘗試搭配最根本的均線策略邏輯,市價大於均線作多、市價小於均線作空,設計一個留倉長波段策略來觀察表現,程式碼如下列:

 

CODE

 

 

主要邏輯在第11、12列,如前述,另出場條件設定為市價反向跌/漲破均線時多少點該出場。以上參數也列出來了,讀者可以自行練習邏輯和參數調整。範例策略使用30分線的週期,進出場的價位節錄如下圖。

 

pic

 

可以先預想勝率和盈虧比和強弱處,它就和基本的均線策略一樣,大波段可以獲利,均線黏著時易洗刷,勝率應低於40%,盈虧比應高於2.5,drawdown起碼25萬以上。就以上圖來觀察,搭配波動率作濾網是有效果的,避開了不少次無謂的洗刷。績效報告如下圖 (2005~2013,交易費用800)。

 

績效結果

 

交易分析

 

績效報告中,最大的亮點是盈虧比很高,尤其是空單的表現,表示這個策略在空方勢時可以抱的很緊、很久。pro/DD 和 kelly值也相當不錯,更多的策略評估可以參考 交易策略評估-Kelly formula 、 交易策略評估-獲利風險比 、交易策略評估-損益期間 。

 

以上,是利用歷史波動率作為策略邏輯的應用,參數都是經過最佳化的,另外值得注意的是這個策略2013年表現並不突出,不至虧損,但幾乎無獲利,因此若要當作實戰的交易邏輯還有得思考修改。

 

 

2013年10月9日 星期三

尾盤出場策略1-建立日期表

 

J注意到一般朋友進行策略撰寫的時候,可能較容易頭重腳輕,即非常努力思考進場邏輯的創意,卻容易遺忘尾盤出場的創意其實也影響甚大,因此本篇將介紹一個最基本的尾盤出場的方法作為系列的第一篇。

 

此方法基本上說穿了很簡單,就是當沖不要都只在1330前出場,也許常常會圖個方便而沒有使用這樣的做法,又或是使用當沖保證金的人受限於規定都必須於30分前平倉出場,然而J之後會簡單證明市場是殘酷的,越有錢的人或法人可能因為不會用到如此滿的保證金,策略也相對多元,因此多承擔幾分鐘的風險,確實也有其報酬可拿,以下將示範先從建立結算日期表作為FUNCTION,再於訊號中使用。

 

首先,先選擇新增功能函數的頁面。

 

尾盤出場策略1

 

再鍵入名稱,本例以END OF MONTH縮寫取名,讀者可自行依喜好設定,其他項目可不用調整。

 

尾盤出場策略2

 

將結算日期KEY入如下圖所示,每年做一次,但讀者千萬記得若碰到颱風休假調整日期,須要更改之前所預KEY的日期,才不會發生錯誤。

 

尾盤出場策略3

 

最後加上如下的判斷式,讓本FUNCTION可以在結算當天為1,非結算日為0。

(註: L補充,表列的方法是較完整的方式,另外結算日的判斷也可以寫函數,邏輯是(星期三) && (15號~21號) ,但延後結算日可能需要再稍微修改 )

 

尾盤出場策略4

 

J將先前撰寫的 通道突破原型進場策略 拿來作為測試的基準,首先使用固定時間於1325後出場的方式,程式碼如下。

 

尾盤出場策略5

 

績效如下圖,來回手續費共設定為800,自2005年回測至今,獲利55萬回檔約28萬,每筆交易平均賺319元。

 

尾盤出場策略6

 

尾盤出場策略7

 

現在我們將尾盤出場時間修改如下,在非結算日晚點出場,結算當天維持一樣25分出場。

 

尾盤出場策略8

 

其他參數與回測時間皆不變,績效如下圖所示。

 

尾盤出場策略9

 

尾盤出場策略10

 

可以發現獲利明顯增加35萬,MDD幾乎不太影響,平均每筆獲利增加了約200元,效果相當顯著。

 

這樣簡單的測試期望能提醒讀者,不要認為尾盤的出場幾分鐘沒甚麼差別,也許市場規則確實影響了交易的結果,不要怕麻煩,多花一點時間建立一個結算日期表,也許可以幫助大家多獲得一些報酬,然而本篇的測試相當的基本,實際上EOM還有許多用途,日後J將繼續介紹,讀者也可先行思考。

 

另外此種建立日期表的方式,也可用在交易海外事件上,透過J之前分享的 經濟數據 一文中,讀者可先尋找對市場有較大影響的事件公布日期,建立於FUNCTION中,即可回測,也許當日行情確實比其他日子更值得交易。

 

2013年9月24日 星期二

停損點轉向指標-SAR

 

SAR停損點轉向指標,或稱為拋物線型指標,是 Technical 技術分析  中很常見的一個指標,常用在設定停損點。在 investopedia 的介紹 中如下圖

 

SAR定義


 

它是移動式的跟隨著行情,當反向穿越時就是進/出場點,計算的公式如

 

SARt = SARt-1 + AF * ( EP - SARt-1)

 

其中AF為加速因子(acceleration factor),EP為極值(extreme price)

反轉條件:SARt與當天價格發生交會,即下跌波段時SARt < Hight,上漲波段時SARt > Lowt,即為反轉訊號。此時,SAR0= EP。

 

網路上有篇文章對於SAR指標有蠻詳細的說明,想進一步瞭解SAR可以點進

SAR指標介紹 - 部落格 - 財經知識庫 - MoneyDJ理財網

 

而我們在應用上,也不需要自己重新編寫指標的原始碼,SAR指標在 Multicharts 有內建函數 ParabolicSAR,訊號有 ParabolicSAR LE及 ParabolicSAR SE,兩者都可以直接看原始碼參考或修改。SAR指標可以用在進場或出場訊號,不過單單僅用在進場訊號時表現並不好,原因和一般趨勢型策略相同,在震盪區間時進出次數太多,另外SAR若套用在短時間的K線上也有同樣的問題,太容易翻單了。

 

而讓單一指標發揮效用的最簡易方法就是交配,把不同屬性的指標拿來結合使用,因此我們除了用較長的K線之外,還要增加些過濾的邏輯,建議是能表示趨勢的指標,例如ADX(可參考  動能指標-ADX與Momentum  此篇)。

 

以下提供一個SAR及ADX結合應用的程式範例,主要邏輯是當ADX小於門檻值時,就照著SAR的方向作部位,另外再加上停損停利的設定。另外,這次同樣沒直接顯示參數的數值,請有興趣的朋友自己測試。

 

ADXSAR_noin


 

加上ADX的判斷後可以有效避免區間震盪時的洗刷,在有趨勢時(ADX大於門檻)的波段,不讓訊號翻轉。例如以下的圖示,若無ADX的過濾,那麼高檔的震盪會多了許多無謂的反轉。但反過來說,也就沒翻的那麼快,或許等到ADX轉弱已經回吐獲利一大段,這些就是邏輯設計的取捨了。

 

高檔避免震盪進出


 

這樣的邏輯有以下績效。L所使用的是台指期30分K線,測試時間為2005~2013,費用雙邊設定共800。

 

策略績效


 

獲利風險比 : Profit / Drawdown 值為13.63

 

總交易分析


 

Kelly 值 : 13.3

 

年週期


 

月週期


 

在 損益期間的評估 上,年週期表現穩定,近兩年波動較小,獲利也較小了。而月週期看來是有不短的時間要忍受,整體看來還是正常。

 

損益曲線


 

損益曲線是挺漂亮的。以上是SAR指標的介紹及結合ADX應用,請有興趣的讀者一起動手測看看吧~