2015年5月16日 星期六
程式交易利用選擇權避險 – 4
這篇再繼續整理一些選擇哪一種選擇權的觀察。週選的特性是Theta大、Gamma大,也就是時間耗損快、Delta變動也快,而程式交易要搭配的避險選擇權要怎麼選,還是要回過頭看要避險的程式交易是什麼屬性。
持倉越短的中短週期程式單,可能一兩天或一週內的,比較適合使用週選及與程式單同進同出的方式,而持倉越長期的使用週選就有交易成本過高的問題,就比較適合月選及進場後不理的方式,另外月週選也是有價差的,應該照當下的情況選擇合適的選擇權,例如在一個正價差的盤勢,月期貨 > 週選Put-Call Parity > 加權指數,如果這價差很大,那多單要避險時用月選來作Sell Call或Buy Put就稍稍有利一點點。
買賣方也是可以從程式交易本身的特性來搭配,高勝率低盈虧比,就搭配買方;低勝率高盈虧比,就搭配賣方。這樣的好處就是互補,在如何選擇所要搭配的選擇權時,都要記得我們避險的目的是要讓整體組合損益更平滑。
而避險選擇權應當與程式單訊號同進同出或持續持有? L認為要分買賣方,使用買方避險,當程式單損失時,不一定有避險效果,因為必須有一定空間才能顯現避險效果,所以持續持有價外買方(EX. 10點以下)是比較好的選擇,也就是程式單進場時買方一起進場,程式單出場時買方就擺著不管了,一是出場價格極低,二是程式單再次進場仍可使用,三是還有一點點的機會,偶爾出乎意料的行情會賺回來。
使用賣方避險,當程式單損失時,幾乎都有避險效果,當程式單出場時,應同時出場,我們要的避險效果都會有,只是效果大不大要看履約價選擇,一般都是選擇價外2~3檔,並應有30點以上,太少點數的不一定划算,履約價選擇可以利用其它的一些指標來確認,例如市場最大未平倉OI的履約價、加權指數近期區間的上下緣、指數的乖離%數設定這些等等。
以上,是一般情況下的相關選擇想法,下一篇再寫,就台股現象來選擇合適選擇權的整理吧。
2015年4月11日 星期六
程式交易利用選擇權避險 – 3
跳空這件事,是我們想要避險的一大因素,有多少次一覺醒來看到美股大漲大跌,而我們部位是反向時的那種感受,真希望能夠有多一點避險,然後準備開盤被巴。
但是我們怎會知道開盤會跳空大漲大跌呢? 也可以換句話說,我們怎麼知道美股會大漲大跌呢? 除了一些事件因素之外 (數據公布或FOMC會議等等....前文有稍微介紹過,美元與FOMC會議 ),可以多參考 VIX 。
可由網址 http://stockcharts.com/h-sc/ui?s=vix 看到S&P 500 指數期貨的波動程度,如圖。
一般來說,波動率越大,表示盤勢的漲跌幅也會越大,像現在波動率一直掉,那美股的漲跌可能就越小,這樣的話,我們的跳空風險可能也就越小。( 不只跳空,我們的波動率也可能隨著S&P500的VIX跟著變大變小,因素當然是有很多,這只是其中一個。)
再來,我們拿VIX和S&P500期貨價格的走勢來比對看看,如圖。
這是2014/9~2015/2這段期間的比對,很明顯用肉眼就看的出來跌勢時VIX上漲,漲勢時VIX下跌,所以人家都說看VIX就可以看出來市場的氣氛如何,是恐慌還是舒緩。
回到主題,這和選擇權避險有什麼關係?
選擇權的Greeks其中一項重要因素Vega就是波動率,我們真正關心的會影響價格的隱含波動率,很可能會跟著VIX的方向走,那由上圖的關係顯示,假如我們的趨勢程式單能夠跟對空頭盤勢時,期貨是空單,那搭配避險的選擇權應該要選空方波動會趨向大的正Vega,避險要作多而且是正Vega值的是,Buy Call。
另一方面,多頭時趨勢單作多,期貨是多單,搭配的選擇權應該選多方波動會趨向小的負Vega,避險要作空而且是負Vega值的是,Sell Call。
我們再來用實際例子檢視這個想法,為什麼是這個樣子,在空方時期貨作空單,行情真的下去了又急又快,波動率上升,我們的避險單Buy Call可以因為Vega上升而少輸一點,例如急跌兩百點時,Call價格卻掉沒多少或掉不下去,那我們可以有更多彈性來調整避險的Call。
反之,多方趨勢時期作多單,行情慢慢的走上去,波動率下降,我們的避險單Sell Call 可以因為Vega下降而少輸一點,例如今天小漲30點,Call的價格可能只漲一點點或跟本不動,那我們可以有更多彈性來調整避險的Call。
這篇紀錄的是偏重選擇權Vega的特性來搭配程式單的避險,因此要再特別注意,到期日要夠久,Vega才有影響效果,所以別用週選,要用月選較適合,另外,雖然這看起來很合理好用,但也只是眾多因素中的一項而已,換句話說,程式交易利用選擇權避險後面還有好幾篇。
2015年4月3日 星期五
程式交易利用選擇權避險 – 2
先多想想避險是什麼: 我們要的是程式單虧損時能少輸一點,當然我們也要付出一些合理的代價。
等等,好像不只是如此,照以上的定義來作避險,那用小台指來幫大台指避險不就好棒棒了,大台輸時小台賺一點回來,大台贏時小台也必定會損失一些,這不就是理想的避險了嗎? 何必搞複雜的選擇權策略來作避險,還可能越避越險?
看看小台作避險的損益圖如下。
圖右邊表示用小台作大台的避險,這樣的組合可以讓獲利和虧損同比例縮小,而勝率和盈虧比保持不變。這確實是一個避險的好方法,但有多少人會這樣作呢? 這不就是減碼而已,我們想的避險應該要有更好的效果。
是的,要翻一下舊文章了,交易策略評估三項重點中的 交易策略評估-獲利風險比 ,一個組合中若加入不同策略就可能可以提高獲利風險比,使得整體策略品質更好,但是前面說的小台拿來避險後,獲利和風險是同比例減少,也就是獲利風險比是不變的,固定的,而用選擇權來避險則有機會,假如能夠讓獲利不變,風險降低,那獲利風險比就能提升,避險就很有效果了,講白話一點的目標就是,有一個作下去不用賺沒關係,但也不會賠的選擇權策略,拿來作程式交易的避險就會讓 drawdwon縮小。
慢著! 目標為什麼不是用一個會賺的選擇權策略來避險,可以增加整體獲利又可以降低drawdown。嗯,當然是這樣子,但有這種策略很困難,如果選擇權策略那麼會賺還拿來避險作啥? 程式交易不要作了,直接押選擇權不就好了。
回到主題再來看選擇權先區分買賣方拿來作避險的損益圖效果。
上圖買方下圖賣方,損益圖形那麼基本不想描述了。避險就是有一得必有一失,買方用獲利時少賺一點去補貼大賠時的風險,賣方用獲利少賺很多去補貼盤整時的小賠,不過這樣講起來有點不公平,因為這損益圖顯示不出勝率的差別。
圖右邊的獲利風險目標,作買賣方都是一樣的,加上選擇權避險後,希望可以讓組合獲利不變,降低風險。但下面兩項則是大不同,加了買方後的勝率降低,盈虧比增加;加了賣方後的勝率增加,盈虧比減少。
這篇就先到這,下次再續了。
2015年4月2日 星期四
程式交易利用選擇權避險 - 1
前幾篇廢文太多,該是寫點有營養的東西,針對程式交易利用選擇權避險這個主題作多一些分享。
先說好目標程式交易是針對中長期的趨勢策略,如果是短期或當沖的期貨交易對於選擇權避險的需求較小,或有不同作法。而利用選擇權則就是指作Buy方、Sell方、用Call、用Put、或複式合成。
當然期貨+選擇權時就是包含轉換的概念 Future = (Strike) + Call – Put,例如: 期貨作多單 + 避險用 Buy Put = Buy Call,那就先來看看人家所說的,選擇權避險以買一點點權利金作保險的效果吧。
以下是大家的好朋友,台指半年走勢。
不知道各位是不是看了就討厭,近半年往上追就跌,往下殺了又被軋到,波段單難作死了,下圖把一般的趨勢波段策略可能發生Drawdown的區域圈出來。
每一個小框框都是會巴死人的,若你的程式全是中期一兩百點左右的策略,那就GG了,那回到主題,當作多期貨時買一點PUT避險,或作空期貨時買一點CALL避險,會不會比較好?
以像上圖這樣的走勢來說,只會輸更慘,原因是那走勢就仍在一個兩三百點的區間內,程式單翻來翻去的同時,避險單一下買CALL出掉又買PUT出掉,只是賠更多而已。
買一點點的權利金就是比較遠的履約價,當走勢與部位反向時的幅度不夠大,買方權利金甚至可能倒賠,以實例來說,9500買多單時,要買哪裡的PUT? 會買到9300嗎? 那不只20點了,那有人說可以買週選比較便宜,履約價可以買進一點的,嗯,當然是可以,但也可能賠更快就是了,這是之後的一個主題,現在先寫到這。
那這例子就假設買9200PUT好了,10點,當行情走勢跌到9350時,多單停損,此時PUT,就看時間來的快和慢,如果是慢慢跌到9350,那PUT可能還是10點,甚至不到10點也很可能,那就沒有避險效果了。反之,程式9350翻空了,買CALL9600的,如果行情慢慢走的話,當空單輸錢時,CALL還是避不了險。
上述一大段只是說明買方不一定適合趨勢波段策略的避險,我們要來想在什麼情境之下才適合,那就有很多考慮因素,如:
履約價選擇?
到期合約選擇?
與程式單訊號同進同出或持續持有?
是否跟隨市價轉移履約價?
何時轉倉?
部位控制?
小短篇出文章,這個主題大約會寫四篇以上,希望讀友會有建議或討論。
2014年6月27日 星期五
多策略組合的執行
續前篇 多策略組合的觀察 紀錄到多個不同的策略運用可以有效降低 drawdown,同時加總各策略的獲利。
投資標的並不僅限期權,操作股票、債券、外匯或基金等等,都是可以搭配組合的交易,各領域也同樣可以各自分散邏輯策略,只是這邊紀錄以期權為主題商品,我們設計了順勢、逆勢、長短線、再加上選擇權策略所建立成的期權組合。
但是,既然有這樣的優勢,為何操作期權還是困難重重?
這篇要紀錄的是多策略組合的執行,實際交易上碰到的困難。這有點類似健身運動,一樣的知易行難。我們可以輕易的找到許多資料,瞭解期權多策略的設計,瞭解身體各肌群的訓練,也有很多人分享策略組合的規劃,健身減重的計劃,看起來都非常可行。交易系統不夠好、交易成本比人高,也還是有適合的策略,沒人說一定要去健身房,在家作伏地挺身、深蹲,一樣有效果。
只是,常常受不了作重量訓練很累,忍受drawdown很痛苦,然後就開始有了許多理由,原本的規劃開始變來變去,當然最終都是沒什麼成果的。
問題是在於對計劃的瞭解,以及本身的意志力和耐心(耐力),制定計劃時就必須瞭解自己能夠承受的風險,一個投資組合假設預估的年獲利200萬、年風險100萬,但一執行下去可能虧損30萬就開始懷疑策略、虧損50萬開始更動策略、然後…,當然也伴隨許多理由,總之,能有耐心在這個光世代花上一兩季的時間觀察組合表現且能貫徹執行的人真的不多,人人都只想在最短時間內,最好只花幾天,就變成肌肉健美男。
再想想多策略組合的特性,我們希望drawdown降低而分散邏輯,有些盤勢某些策略很擅長,相對某些策略會很難熬,如果策略夠多,那麼每天有些策略賺有些策略賠是很正常的情況,可是我們往往太聰明,希望每個策略都賺,所以又動手調整了,這個希望,正是違背了策略組合設計的初衷,是個不合理的希望,如果你真的知道什麼時候該用那支策略,那還需要作多策略嗎?
另外一個問題是,我們找尋的資料、參考的策略、聽到的方法…全都是教人怎麼贏,一定贏,但是很少有人會講要怎麼輸、怎麼面對輸,總會有一段時間碰到把把都是爛牌的時候,那要怎麼面對? 第一個應該從心態調整。
這是個重要的心態,有些贏有些輸,該贏的要贏,該輸的要輸,我們要求風險的降低,同時也放棄了許多超大獲利的時間,是值得的,因為會平均分配在其它時間的,如果組合作的好的話,口味可能像是白開水,雖然平淡,不過很健康。
題外話,也有人是真的討厭白開水,認為玩大的、殺來殺去才是交易,那其實對他們來說,交易本身就是一個能帶來效用的行為,就是不作就不舒服,輸輸贏贏沒關係,會覺得很有樂趣。不過,對一般人來說,交易要作的長久,還是多喝白開水吧。
《本文與 Bituzi 同步刊登》
多策略組合的觀察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自行計算(由每日的測試損益推算),這部份下篇再紀錄了。
《本文與 Bituzi 同步刊登》
2014年6月7日 星期六
避免過度最佳化
程式交易策略的設計有個大難題,不論是新手或老手都會一直感到困擾的問題是: 我的程式是否過度最佳化了?
以我們現在開發程式交易策略的方式,是將歷史資料作為數據,套用各種不同的邏輯來測試,希望能找到一種通則可以適用在對未來的預測。這樣的方式是利用歸納法找出通則,而通則是表示有一定的機率,也可以當作是我們回測的勝率。
但若將前述各種不同的邏輯條件增加的越來越多,就會越來越像是對數據作細節的描述,可以得到很漂亮的測試,但對未來的預測能力必然不如對過去的好,這很像是考試前把所有的考古題答案背下來,而不是真的瞭解怎麼解答,那當考試時題目稍有改變就不會寫了。
有指標就一定有參數,有參數就一定要作選擇,選擇參數的個數及個別的範圍。還有更大的考量是,要怎麼判斷是否也用了太多指標以致於最佳化了? 或許它真的就是這麼準,也沒什麼不可能。
那怎麼辦?
目前並沒有主動正向的建議或準則說明該使用多少參數或指標個數,只有被動的再去測試,常用的方法是forward backtesting,就是把數據切兩部份,一部份測試合適參數,另一部份作為未知數據來測試結果。假設同一組參數在這兩部份的運作情形差異不大,那很可能表示這組參數是夠穩健的,若在兩部份的差異很大,那好險有先作測試…
這邊說的差異大不大要如何判斷? 可以利用之前談過的交易策略評估,參考連結
交易策略評估-Kelly formula
交易策略評估-獲利風險比
交易策略評估-損益期間
(交流會的朋友知道怎麼從測試報表中,較快速的選擇合適參數了)。
以上,是針對單一策略作forward backtesting來判斷是否過度最佳化,但作了也評估過了,能表示未來績效會和測試時一樣好嗎? 當然,還是不一定的,唯一可以確定的是對這支策略的信心和瞭解更加提昇了,這也是很重要的。
除了forward backtesting之外,避免過度最佳化是從策略組合的角度來設計,簡單的說,就是讓各策略專注。專注在目標上,目標是長波段10%行情、中波段3%行情、當沖策略、極短線策略、震盪盤策略或是針對只作多空單方向的特殊策略等等。
在設計這些策略時,單一的目標要夠明確,例如想設計一個大行情必吃的策略,那小行情就不予理會,或許能作到避開損失就夠好了,千萬不要想連震盪小行情也吃的到,因為這樣很可能又會陷入多重邏輯的陷阱。
以交流會談到的故事來說,動物界舉辦了鐵人三項比賽,項目是飛行、短跑和游泳,老鷹在飛行項目得了第一名,但是短跑和游泳都不行,獵豹在短跑得了第一名,但是另兩項不行,海豚則是游泳第一名,但另外兩項也不行。最後這項比賽的冠軍是一隻鴨子,三項都會一點,雖然都不怎樣。
這故事和程式交易策略有什麼關係? 假如我們希望設計一個任何狀況都適用的策略,什麼行情大小都要吃到,那麼就可能會設計出一個什麼都吃不好的鴨子,而好的作法應該是建立一個團隊,由老鷹、獵豹和海豚組合的超級戰隊。
這和避免過度最佳化又有什麼關係? 當我們專注在特定目標設計策略可以有較簡化的邏輯,同時在組合時又可以有效的截長補短,這個有不有效,主要是指降低整體drawdown,也就是看老鷹、獵豹和海豚彼此合不合,這個戰隊能否發揮綜合效果,這部份下篇再紀錄了。
2014年5月10日 星期六
波段策略應用個股期貨
台指期近年來波動小,作期貨單找方向實在是沒什麼便宜可佔,所以除了台指之外,要平衡整體損益的方法就是找其它商品,作選擇權找時間和波動的利潤、作國外期貨,那是一個更大的世界。
其實國內還有選擇,就是個股期貨。以最大成交量的幾檔,日成交量也有一千口以上,而且這些也都是高價且波動大的標的。目前來說,宏達電、可成、TPK、聯發科,都是優先考慮的標的。
相對台指期來說,這些股票的波動率實在是非常大,因此趨勢單就更有交易機會了。L 使用 歷史波動率策略設計 此篇所介紹的類似策略,屬於中長線的波段。針對以上四檔個股期貨作測試,時間取不長,從2013/7開始,進出的狀況如下圖。
測試出來的績效是很不錯的,整體組合的績效如下。
多空獲利平均,可成、聯發科、宏達電多單獲利,TPK空單獲利。將近一年的時間獲利約85萬,而drawdown 約17萬,這個獲利風險比將近五倍,相當高,當然也是因為這幾支個股都非常有趨勢。
現在是事後來看這四支個股在過去一年的趨勢單獲利很好,並不能以此預期未來獲利狀況,再進一步的研究可能要把現貨資料拿來測試,至少五年十年的,若績效也穩定的話,那對策略的信心就高多了。
不過若是程式單以長線趨勢為主的話,押台指期不如押這幾檔個股有機會,有興趣的朋友也多測試看看囉。
2014年4月9日 星期三
趨勢追隨策略類型3-均線策略
續前篇 Trend Following 趨勢追隨策略類型 以及 趨勢追隨策略類型2-突破 。
最基礎的均線趨勢追隨是每個人都會測試的,差異只在根據每人經驗找出合適的長度及調整,而這個合適的標準主要是以獲利風險比作為判斷。
大致上,越長期的均線可以獲取越大的波段,不容易被掃蕩,但是Drawdown也較大,而且Drawdown時間長。反之,中短期的均線搭配過濾邏輯和停損停利,比較容易可以設計出Drawdown較小的策略,但獲利也就被限制了許多。
此篇紀錄一個長期的均線追隨策略。先作個前提,在設計時要特別注意自己可以忍受的Drawdown,瞭解損益期間的分布,而不是單看測試的勝率和最大獲利數字,甚至可以說,這兩項是相對不重要的,因為長線策略要作的長,就要受的了Drawdown,如果風險大小和期間長短是讓你沒辦法承受,那再漂亮的策略也是無用。另外這類型的策略的勝率偏低,目標是大波段獲利,要求高的盈虧比,遇到振盪期被洗刷,也有人是很快就受不了的,所以測試數據中的連續虧損次數也要注意。
這篇用的跟隨均線的判斷很簡單,均線之上保持多單,之下保持空單,因為一條線容易來回洗刷,所以稍微作個緩衝的通道,以High、Low取平均就有兩條線。問題只在於均線長度如何決定,L自己有個偏好的方式是取短中長三個長度再平均,另外也利用短期的趨勢再作微調。
基本上是一個非多即空的策略,跟到底,但是偶有乖離非常大時可以執行停利,這個非常大,是定義在均線上下10%,夠大了吧,其實遇到的次數很少,所以這個策略在場內的時間比例非常高。
以下是策略的程式碼供參考。
運用在台指期的5分K,這策略使用到的均線參數多了點,不過這是依各人偏好所設計。
實際進出圖形如下。
很明顯的,該被刷就被刷,該吃到就吃到,調整到圖形的進出和心裡所想的接近時,就能夠接受它了。
這個搭配行情看進出是很重要也很花時間的,在最佳化的過程中可以找出很多均線的參數,L看過許多測試數據,會說明多少K線使用多少均線是最好的選擇,那種文章參考參考就好了,沒有那種最佳參數,只有找到適合自己的參數才是最重要的。
過去績效(05~14)如圖。
Drawdown 322000,對這樣的長期策略來說很平常,甚至到40萬也不奇怪。
勝率34.55%,配合盈虧比3.05,也是典型長期策略的數據。
損益期間來看,近年表現都比較差,但我們可以解讀是行情走勢的原因,這兩年有什麼大波段呢?
以一個策略原型來說,這樣的績效是蠻不錯的,若是能夠認同這樣的獲利風險,這其實就是一個可以運用的長線策略,但若覺得風險無法承受,那可以試試什麼情況不須在場內,也就是加上過濾邏輯和停損停利,把Drawdown降低。不過獲利也將會被限制,各自取捨吧。
2014年1月30日 星期四
使用Renko圖形交易所面臨的問題
在交易的圖表設定中,讀者會發現K棒不一定是要畫成蠟燭圖,也可以選擇一些不同邏輯去定義出不同的線圖,例如本篇的RENKO就是一個利用價格去畫的例子,讓我們可以很直觀的觀察價格單純的走勢,減少價格在盤整時的雜訊,然而本篇並不主要介紹RENKO的好處,而是去了解對於使用程式交易的我們,會有甚麼樣的問題,首先透過下圖設定的欄位來了解其原理。
一開始要設定一個單位大小,在目前國內最新的8.5版中另外有提供依照%來設定單位大小的選項,但其道理都是在設定每一根棒子要多長,表示當價格滿足設定的一單位大小,這根棒子就算收盤,開始畫下一根,另外也要同時配合週期的設定,來決定顯示的時間,設定成最小1TICK,就是每個TICK出現若滿足一單位點數的條件,就算完成並且顯示一根棒子,因此如果設定成1分鐘,就需要等待一分鐘過完,滿足多少個單位才一次顯示出來。
最後下面就是一些顯示的設定,一般為了避免隔日跳空的計算錯誤,通常會勾選收盤時中斷,就不會跑出明明是跳空,卻顯示成全部連續棒子的狀況,另外其他則只是用來控制顯示的方式,並不影響計算。
然而以上的邏輯其實對要使用RENKO進行程式交易的我們是有很大的困擾與問題,為了呈現問題的所在,J先寫了一個很簡單的測試程式,程式碼如下。
這個當沖策略設定當棒子收紅,就於下一根開盤做多,如果連兩紅,就下一根多單出場,同時設定SET指令中的STOP,空單則相反,不設定手續費,跑的圖就是最上面那張圖的設定,每四點畫一根棒子,週期使用1TICK,進行盤中即時收報價進出場測試。
從本張交易截圖可以看出,黃線是換日線,左邊是回測與昨天狀況,每一個進場點都在棒子的起畫點,除了SETSTOPLOSS的出場外,都在棒子的收盤(棒子的上下緣)。然而右側的實際上線狀況,一開始的多單進場就沒有落在棒子邊緣,而是在空中或是像第三筆一般在棒子中間,同時第三筆出場也在空中而不在邊緣。
再來看看下2圖的比較,首先第一張是即時上線狀況,第二張則是關掉MC後重開的狀況(形同回測狀況)。
讀者可以很明顯看出來,同一個棒子的狀況,在上線時(上圖)與回測時(下圖)比起來,差異非常大,主要的原因是每根棒子的開盤價位置被修改了,而SETSTOP指令仍有作用,只是因為進場點改變而導致出場點當然也就有所不同。
再來J同一天也同時測試了如果週期改變為10分鐘,單位大小為3點,盤中即時圖形如下。
讀者可以仔細看J標記的部分是第一根9點15的棒子,然而下方座標軸卻顯示了好多個09:15,而每一個進場也都很漂亮的在每根棒子的邊緣,這原因是實際上這些09:15的進場與出場都是在09:15時間一走完時,瞬間跳出來的多次進場與出場,若使用下單機丟單,則是一筆單都不會有,或是進一單在最低點!
最後透過本次實驗,我們得到幾個RENKO使用上的問題,第一是在回測狀態,開盤價的定義是受到收盤價的確立(滿足一單位大小的點數)而得到回測時每根棒子的開盤價。第二是周期的設定會影響棒子多久才瞬間跳出來一次。第三就是目前RENKO是有保留完成那根棒子時的高低點,因此SET指令有效。
綜合以上三點可以了解到,目前RENKO的運算邏輯下,回測與真實落差太大,無法使用RENKO當作DATA1進行交易,但若使用其為DATA2當作指標來使用卻是種可行的作法,因為當成指標時可只採用其確立的CLOSE值運算。以上提供想使用RENKO的讀者一些實驗心得。
2014年1月21日 星期二
趨勢追隨策略類型2-突破
續前篇 Trend Following 趨勢追隨策略類型 。設計趨勢追隨的程式交易策略,首先就是要判斷趨勢,一般常見方法有兩種,第一是均線策略,跟著市價與均線的位置或均線的斜率來判斷趨勢方向,第二就是突破,由基準點開始看盤勢漲跌了多少作為突破,再持續同一方向的趨勢。
這個基準點的設定可能是特定價位或某特定時段所依據,例如特定價位設定上個月結算價,或心裡認為特別重要的價位。特定時段可能設定每日開盤的價格或每週、每月甚至每年開盤價格都可以運用。
而漲跌多少算是突破可以追價? 這就是看前面所設定的週期,越長期的週期應當配合越大的突破價差,例如每季開始的市價設定為基準點,漲跌5%作為突破,在未翻回反方向突破前持續持有直到每季結束,這樣也是個可以測試的策略,可能都比一些奇奇怪怪的指標還會獲利了。
另外一個考慮漲跌價差的設定是波動率,例如最近一段時間波動大,那這個漲跌價差就應該同步放大,真的夠大才去追突破,免得盤整常常洗刷,反之,波動小時,漲跌價差也應該同步縮小,跟著市場作小波段。
這樣跟著波動率所設定漲跌價差,可以利用的方式很多,例如取日的 ATR、利用BBand、或 歷史波動率 等等,此篇就來紀錄應用歷史波動率來設計突破策略。
要考慮的參數有
- 取多少期間的歷史波動率,計算出對應點數
- 由目前市價要漲跌多少比例的對應點數算是突破
程式範例如下:
基準點BP設定為目前市價,計算出對應的波動點數HVp,例如HVp為100點,把它當作目前可能波動的範圍上下區間是100點,而基準點在中心點,那當市價突破基準點加減50點時,就視為是一個趨勢開始,建立方向部位並將新的基準點設為目前市價,以此再續看下一個突破點。
策略表現及指標如圖:
這樣的策略可以有以下績效(10minK,2005~2013)
以一個策略原型來說,這樣的績效是蠻不錯的,問題在於drawdown如何縮小。另外注意這是非多即空的策略,進一步也可以試試什麼情況不須在場內,例如波動非常小時,可能不要有單,或許可以降低些drawdown。也可能是相反的,波動很大時先退出,因為可能大幅drawdown都是在此期間產生。
突破策略百百種,開頭提到的以年月日作基準點的策略也可以慢慢紀錄,另外均線策略也是非常多樣化的,持續調整囉。
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分線是最為接近且獲利表現最好的週期,將兩者比較一下如下表。
可以發現直接用2000口的參數套過去,得出更差的結果,獲利大幅降低,回檔增加一倍。
而為了更完整的測試,現在我們反過來做一次,首先,把五分線的參數一樣最佳化,且參數區間皆完全一致,再一樣透過選擇獲利因子最大的參數來當作5分線最好的表現,最後將這參數不變,直接把k棒設定改為2000口,得到兩者比較的績效如下表所示。
可以發現,兩者除了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來實作這個指標的語法如下
套用台指期行情來看看有沒什麼特殊性可以利用
是不是有什麼線索可尋?
有看出來了嗎?
若有看出來的朋友麻煩分享一下,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收盤價的微小差異在近年來的影響。
程式碼修改如下圖。
建立用close所創造的高低區間,回取K棒數(HL)參數讀者可自行嘗試。
進場與出場也以最簡單的方式修改如下圖。
須注意,在撰寫秒線以下層級時,TIME要改為TIME_S才不會錯誤喔!另外本篇利用之前提及的尾盤出場策略1-建立日期表,作最後進場與出場時間調整,以及漲跌幅超過6%的進場限制。
在參數相同的情況下,本篇利用最多加碼5口來突顯出3分線與177秒的差異,首先我們先來看3分線的表現如何,回測時間為2007年至今,來回成本單筆設定800元。
再看看177秒的績效圖如下。
可以發現兩者在同樣狀況下,177秒K的回檔略小於3分線,而且獲利大約多了快100萬。再來觀察近年來表現,如下圖所示。
上方的圖是3分線,可以看出近年來已經無法再創新高(上次新高點大約為2011年2月),而下圖177秒K的在2013年9月還有再創新高。
經過本篇的實驗證實,也許過往的簡單模型在近年來無法表現得令人滿意,但透過細微的變化,許多邏輯仍然是持續有效的,只是現在交易的戰場或許已經拉到秒K上了,讀者可以再延伸思考透過不同的以往的K棒計算,可能也會有更好的表現。
2013年12月6日 星期五
波段突破策略(with ATR)
紀錄一個常用也好用的邏輯,突破策略。區間突破最常使用在當沖程式裡,不過波段的程式使用起來也不差,基本邏輯就是由開盤向上漲多少要突破作多,向下跌多少要突破做空,很單純,最主要的因素只有這個突破的臨界點是如何決定?
先前曾經紀錄過簡單當沖突破的測試 - 當沖逆勢單進場。其中提到開盤點為準,漲50點作多,跌50點作空,如果沒翻就擺到收盤,這樣的邏輯在近年是無法獲利的。但是波段程式就不一樣了,能獲利。只是突破的區間要思考,不是單純點數或比例就能適用的。
這時 Average True Range(ATR) 平均真實範圍 就是個好用的指標,當行情波動大時,這個區間確認也應該放大,波動小時,則區間也小,因此加上波動性的指標有用處,ATR比其它波動性指標直接方便的是它本身就是價格的表示,而不是比例或無法對應的數字。例如ATR 100點,就是近期日高低點數平均在100點,而開盤後往上50點或往下50點的區間內都很正常,而我們設定的突破邏輯就是市價漲超過50點作多,跌超過50點作空。
搭配觀察指標和策略訊號的程式碼範例如下。
在策略設計的部份只有一個參數,是要決定ATR用多少期間,其中變數TRX是每日的TR值,ATR用來紀錄…ATR,TR的陣列和其中註記//replace AverageArray的部份是因為Multicharts內建的AverageArray用起來不對勁,就自己再寫進策略裡,內容就是把TRX一個個放進TR陣列裡,放到最後一個時順便算一下裡面那些TR的平均值紀錄到ATR。
再詳細一點的紀錄程式,因為ATR在這個例子中使用的是日線層級,但實際運用的K線可能是10min、5min、8min之類的,會要再搭配其它的指標,所以才使用這種Array的方式將TR記錄下來,在新的一天開始時計算一次( date <> date[1] ),然後看是要多少個TR的平均,一個一個放進去,另外特別注意Array第一個位置是0起始,所以for迴圈裡目標值減一,這樣個數才對。
這個Array+For迴圈的方法在使用不同k線層級的指標時蠻好用的,可以多加利用,如果是常coding的朋友可能會覺得一個地方怪怪的,平常都是for i=0 to X,這邊因為i是 Multicharts 的關鍵字所以不能用,常常都要再改成 j….,是特別的習慣。
回到突破邏輯,以ATR所計算的近日高低作為區間,它近期的進出及績效(2005~2013,10min)如下。
以一個不加濾網、不加出場邏輯、未設停損停利的邏輯來說,這樣的績效是蠻不錯的,值得繼續研究開發。
延伸一點的說,區間可以使用其它的波動性指標來調整、或直接用N日高低區間、或布林通道的區間、或參考CDP之類的,都可嘗試看看。這樣的突破邏輯應該是每個人都會測試過的基本款,不過應用時如何決定區間指標和如何搭配濾網就是深入的工夫了。
2013年12月5日 星期四
尾盤出場策略2-加強判斷
一支交易策略可簡單分成進場主邏輯、出場主邏輯,而當沖策略在尾盤必須出場的特性,使得其重要性在出場設計上不容小覷,然而根據 J 幾年來的觀察,似乎許多交易者並不太在乎這點,大多專心於進場與一般停損的設計,而最後出場僅使用指定時間出場,因此本篇延續 尾盤出場策略1-建立日期表,來簡單介紹一些尾盤現象對績效的影響性,提供讀者思考更多在尾盤邏輯設計的一些想法。
本篇測試的策略在進場主邏輯部分延續 通道突破策略 一文中所使用的程式碼,讀者可先行參考,然而為了增加交易次數以突顯出尾盤的影響性,本篇改用台指期1分線交易,參數也稍微修改,並配合尾盤出場策略1-建立日期表 所使用的最終出場時間作為初始設計,其出場設計如下圖,讀者可先回憶一下。
2007年至今交易績效如下(手續費來回共800元)
現在,開始進入本篇的尾盤出場邏輯,主要新增的想法是,交易時間以及賺賠對於出場快慢的影響,以及是否該逆勢找好的點出場(例如作多拉高出),或順勢出場(例如下跌後多單出場),讓我們直接看程式碼與績效得到簡單結論。
從上圖中可發現,若策略處於虧損狀態,且12點50分至13點時是上漲的,則於13點後就盡快出場,如同虧損時找有利的點出場,其改善的績效如下圖。
獲利增加約10萬,MDD幾乎不變,效果不錯,然而若是條件相反,當策略賺錢早點出場則會如何呢?直接看下圖績效來得到結論。
可發現獲利明顯減少23萬,MDD幾乎不變,符合虧損時早點讓部位出場,賺錢時讓獲利奔馳的精神,然而讓賺錢的部位一直持有到尾盤就是最好的嗎? J用同樣的手法找到稍微能繼續改善績效的方法,一樣直接來看程式碼。
其想法主要在思考,若是賺錢的時候,大多數當沖順勢策略應該也是賺錢,而假定多數策略與K棒周期的影響大約都在13:10至13:20分左右出場,因此若行情在此時間轉為與今日當沖走勢反向,也許顯示法人在尾盤作價上並不積極,持有過久也不一定能吃到13:30當沖強制平倉以及現貨收盤後期貨的順勢行情,使得順短期的勢先出場較有優勢,其績效如下。
獲利上升6萬,MDD續減少,反之此時若改為逆勢出場(即條件3與4對調),績效如下。
顯示若尾盤趨勢持續順勢,不該提早出場,將大幅減少獲利與增加MDD。
最後,透過尾盤簡單的上漲與下跌現象,與交易時間的特色,將有助於進一步改善交易績效,而本篇並非特別要研究其成因為何,只是挑出可能相對有意義的時間去做測試,得出符合一般賺錢精神的結論,賠錢快出,而且逆勢找好機會出效果不錯;賺錢要等轉弱再出,否則持有久一點較有優勢。再了解簡單的尾盤狀況後,更進階讀者則可思考如何精進賠錢逆勢出的方法,賺錢順勢出的方法,也許可以找到更明顯改善績效的交易邏輯。