2017年8月8日 星期二
台指閃崩
8/3開盤沒多久的台指閃崩,在那短短的時間裡如果中停損或翻空是會損失慘重的,這情況非常少見,但運氣不好出一次可能就讓整年獲利消失,而在系統中需要作幾項事情可以避免這次的損傷。
最單純就是別用市價下單,使用較大讓點的限價單,如果有自己的下單機可以輕鬆作好這個設定。也可區分進場單或是停損單,停損單讓的滑價點數應該設定更大。
但這作法是比較消極的,如果要完整的避免這種風險,需要的是選擇權,買方。以台指來說,隨時保有深價外的Call及Put作保險,只要買價格一點兩點的就夠用了,週選月選都可以,當出現閃崩時完全不用擔心,選擇權就等同期指的速度。
在程式的設計上,也可以更有彈性,比如價格突然波動3%以上時,就不要作動作,因為你知道有外部的選擇權會cover這件事。
當然一直買這種保險是要成本,看各人部位不同,需要衡量所需口數,也許每個月都需要幾百或千元,但閃崩發生時一口大台可能就要損失20萬,值不值得呢?
況且,如果某天不是閃崩,是真的崩,那會很慶幸有買保險。
2015年7月2日 星期四
資金管理小思考
對策略研究了那麼多,資金管理倒是很少想過,這篇文章紀錄一個小範例給讀友思考。
有一支策略,贏時獲利25%,輸時虧損20%,假設勝率正好50%,試問此策略是否可行?
這簡單,50%*1.25+50%*0.8=1.025 ,大於1,可行!.....吧? 來實際作看看。
將策略套用標的A股票,期初股價100元,第一期後上漲25%,成為125元,第二期下跌20%,成為100元,兩期過後等於沒賺沒賠。
將策略套用標的B股票,期初股價也是100元,第一期下跌20%,成為80元,第二期上漲25%,成為100元,兩期過後也等於沒賺沒賠。
奇怪,明明是正期望值的策略,單一支標的過了幾期,或加上分散標的,似乎都賺不到錢。
但是加上一個小技巧就可以賺錢了,就是再平衡。
同樣的上述兩標的A和B,我們初始資金有20000元,平均投資A股和B股,可以把A股和B股各買100股,到了第一期後,A股125元*100股=有12500元,B股80元*100股=有8000元,總獲利=12500+8000-20000=500元,把500元放口袋裡,20000元繼續平均投資A股和B股,此時10000元買A股=10000/125=80股,10000元買B股=10000/80=125股,到了第二期後,A股100元*80股=有8000元,B股100元*125股=有12500元,總獲利=8000+12500-20000=500元,再把500元放口袋裡.......
同樣的情境下,A股和B股都回到100元,等於初始價格,不過我們口袋裡有多了1000元。
可以想想多重策略的管理是不是也能如此作呢?
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年11月21日 星期五
選舉前一週與選擇權操作
下週就是選舉前一週了,之前有參加過分享會的朋友,如果有印象的話,可以參考事件前的選擇權操作法。
重點是選前一週long Vol,直到選前一天收盤前再short Vol,可以利用月選和週選價差來作這兩件事,策略的來龍去脈和操作細節在這邊就不多說了,這樣的操作法勝算頗高且風險有限,機會不多,這週好好計劃選擇權的策略吧~
若讀友有興趣想深入瞭解的,可以mail來詢問,不過為了分享會朋友的權益,套一句好話來說,知識是有價值的。
2014年9月14日 星期日
程式交易與選擇權避險
大部份的程式交易都是趨勢型,有波段行情發生時能夠大賺,但是區間震盪的行情則會不斷的虧損,而在虧損時期要怎麼應對是這篇的主題。
遇到虧損時最容易想東想西,而最不該作的事最常去作,就是自己動手去調程式部位,這通常都沒什麼好結果,作程式的人,要謹記在心,程式部位是神聖不可侵犯的,有什麼問題,盤後再修改測試,別在盤中手癢。
而這個修改測試要怎麼作,是否必要改,就要好好想了,因為虧損是正常的,當虧損是在預期的範圍內,那不該改,若很想改,或許該改的是自己的心態,是不是不夠瞭解程式和它的表現狀況。
確定改要怎麼作,我們希望可以在震盪時降低虧損,首先是很常參考的逆勢單策略,把逆勢單加入投資組合裡,佔有小部份的比例,目標是讓整體組合在區間震盪時少輸一點,當然在大賺時應該也會少贏一點點,達到較平穩的目的。
但是逆勢單要寫的好並不簡單,光是要在長期的回測能夠獲利就是一個挑戰,於是標準不能看太高,別賠就好,只要不賺不賠,就能夠對整體策略組合有幫助,能夠降低drawdown。
而效果比逆勢單好的是利用選擇權避險,一個區間,假設就陣子的9200~9600,不停洗刷時,趨勢單虧損哭哭,逆勢單也不一定能獲利,但是選擇權有策略可以降低損失。當然選擇權也不是簡單的東西,而且回測也不容易,L想要紀錄的是實際應用的一些想法。
前提是很重要的,程式單為主,選擇權避險為輔。
目標是很重要的,程式單輸錢時,選擇權加進去可以少輸一點,反之,程式單贏錢時,選擇權會小賠或沒賺賠。
如此強調的原因是,選擇權本身就有很多策略,但把它當作獲利主軸和當作避險角色時,兩者想法是不同的概念。在這邊,需要專注在我們的前提和目標。
以下,都是針對台指市場的交易為例。首先,要確認時機,要利用選擇權避險的時機是特定的還是長駐的? 沒有標準方案,視程式交易特性,如果是有長波段單,或許長駐搭配會適合,若大部份是短單或經常無單,或許特定時間或極短期較好。
再來就看選擇權避險方式,就以這段期間9200~9600上下洗刷的區間為例,假如程式單是在9300點跌破時翻空的情況下,避險方式主要有下面幾種,我們就來看看如何搭配以及優缺點。
- Buy call
- Sell put
- Buy call + Buy put
- Sell call + Sell put
第一種,Buy call 可以擋住急拉時的風險,但是經常會歸零,如果是手動作避險的人,好處是不用去理它,不需要擔心太多,因為風險可以完全鎖住。要不要再作成多頭價差,上面再sell call? L是覺得有點多餘,因為我們目標是避險,上面再多作一個就沒辦法完全鎖住。強調again,經常歸零,買便宜的效果差,買貴的又很花成本,這是另一個要深入的主題。
第二種,Sell put可以增加收入,持有空單再去sell put就是等於sell call,只是履約價較低的sell call,我們程式單原本最大的利基就是能大賺一波,行情走越久我們就抱越久賺越多,但是加了sell put之後,作對的時候會少賺很多,作錯的時候也只是增加一點收入。
為什麼說是一點呢? 因為一般情況下,如果行情馬上反轉,空單被軋,以9300空單被軋到9400或9500時幾乎就停損翻多了,那這個sell put在翻多時也要出場了,這樣避險能賺多少? 當然,這勝率是高的,只是賺賠比需要多加考慮,也要思考自己的程式單是否適合,以單純sell方來說,L的經驗是拿到”加碼”的應用比較好一點。就是空單時想加碼,就同時作sell call,這是另一個要深入的主題,(這句好像重覆再用,為以後鋪梗)。
以上兩種是單腳,與程式單配合,如果程式單反轉時,這個選擇權部位也需要反轉,後兩種則不一定,而且很有趣。
第三第四種,雙buy和雙sell,先想想本質的差異,delta我們確定是要偏正的(初始時),因為是要拿來作期貨空單的避險,而雙buy是long gamma付theta,雙sell 是short gamma 收theta,也就是說,我們需要先確定想要和時間或趨勢作朋友?想不出來的話,不如反著想,不想要和時間或趨勢的哪個作敵人?
當你很害怕程式單被跳來跳去的行情巴的亂七八糟,早上急拉衝高讓空單停損翻多,午盤又下跌又翻空,抱著空單收盤後又看到美股一直漲,覺得明天起床又要面對虧損,這樣的情況下,你害怕的是波動劇烈,肯定作雙buy是好選擇,但不是雙buy了就沒事不管它,可以不管,但要想想,如果9300的期貨空單,搭配我們依區間9200~9600的想法,去buy 9600 call及buy 9200 put,後續要怎麼進出,需要考量一點,你認為9200或9600會不會破?
如果會,就不要管它,但是如果沒破,洗來洗去又回到9300,那完全沒避到險還多輸雙buy權利金,怎麼辦? 如果覺得不會破,但是洗刷又很劇烈,雙buy無誤,但是要管要調,當行情從9300漲到9400時,因為雙buy是long gamma,所以delta會從假設中立到偏多,這樣我們就再把它中立,就是空期貨。空了之後,行情真的又洗回9300,delta又會偏空,那再中立,就是買期貨,以此要訣反之亦然,洗的越快越嚴重,賺的越多,重點是,真的破了9600或9200,也不會輸。
另一方面,假如行情就是不太動,好長一段時間都是在9200~9600了,程式單賺不到錢,偶爾輸輸,也不是很痛,或許就適合與時間當朋友,雙sell收theta。這在台股是特別有利,因為我們的官股行庫都是排球隊的,指數跳上去就往下殺球,指數掉下去就撲去救球,區間操作超級明顯,而且作的還真厲害。我們若作雙sell時,官股行庫是很強的隊友,就假設sell 9200 put 和sell 9600 call,或者是從最大未平倉的合約來選履約價也好,如果這個區間一直沒走出去,這個雙sell就能帶來一些獲利。
以上四種選擇權避險方式只是大致介紹,實際上行情的路徑、波動程度、時間的拿捏、履約價選擇,都是重要因素,這些是另外好幾個要深入的主題。
2014年7月18日 星期五
指數分配與選擇權價差策略

延續幣圖誌上,牧大的分享 期貨報酬率 v.s. 對數常態分配? (R實務篇) 此篇,
我們瞭解市場漲跌的分配是尖頭肥尾的,白話文也就是沒啥漲跌的日子非常多,很大漲跌的日子也比想像多。
而依據這樣的特性,在選擇權市場的交易上,我們很自然的想到,雙SELL價平的選擇權賺取低波動的日子,再雙BUY兩倍價外兩檔或再遠的履約價來賺取大波動的日子,這樣組合的價差交易實質是買方部位,風險有限,獲利無限,而且收的權利金還會比買方花費的權利金多。
損益如上圖顯示,沒啥波動的中間區域是獲利的,向兩邊越遠的獲利也越大,會虧損的區域僅在兩邊小漲小跌的部份,很符合前篇市場漲跌的分配的觀察結果,所以若拿來操作,應該是很好的策略………吧?
這樣的策略能不能獲利? L認為”應該不會”。
說”應該”的原因是沒有去完整回測過,若要作回測,方式是模擬每日收盤前,將前日部位平倉,然後價平CALL和PUT各賣出一口,價外二或三檔的CALL和PUT各買進兩口,這個履約價的選擇差別就像上圖一樣會是不同的”W”,日復一日這樣測試得結果。
可想而知這樣作的交易費用是很高的,每日一單位的操作就要新倉賣兩口買四口,平倉買兩口賣四口,或許,以週的頻率來作一次會好很多,而且週的指數報酬率分配,”應該”也類似日的分配一樣是尖頭肥尾。以下我們先排除掉交易成本的影響,單看這個策略是否有獲利能力。
說”不會”的原因是選擇權市場本來就是這樣的分配,我們從買賣兩方獨立出來看,作買方的人買兩邊價外的CALL或PUT,權利金的價格低,若有大行情的出現會獲利數倍的可能,就像前篇20倍速的選擇權提到的一樣。而不論是主動投機或作避險,對買方來說,價外的履約價遠比價內的履約價更有需求,很自然的,越多人想買,這些價外的選擇權就會被買起來變貴,比價平價內的貴,要注意的是,這些價外的選擇權價格是低的,但是比較貴。
另一邊,作賣方策略會怎麼選擇履約價? 這因素很多,如果我們先簡化要以時間價值最大的因素作為第一考量,那價平的時間價值是最多的,價內外兩三檔的時間價值就有點少,再更價內外三四檔以上的履約價已經沒什麼時間價值,賣深價內外的只能收一點點權利金,所以從時間價值這個因素來看,價平的履約價是最適合賣方的,也因此,越多人想賣,這個價平履約價的權利金就會被越賣越便宜,要注意的是,價平選擇權價格是比價外高的,但是比較便宜。
以上所說的貴和便宜,其實就是隱含波動率的差別,只是L想用白話一點的方式來紀錄這些差別,簡單的說,價平履約價的隱含波動率會比較低(便宜),越往價外履約價的隱含波動率會比較高(貴),如果把所有履約價的隱含波動率排列,就是波動率微笑曲線了,如下圖。

波動率微笑曲線有一些應用,例如右方越高,可能表示市場越貪婪,左方越高,可能表示市場越恐懼,又或者微笑並不是很好看,部份平部份斜,關於波動率微笑曲線GOOGLE一下可以查到很多資料,上一段以買賣方角度來解釋波動率微笑的成因只是其中一種說法,還有一些解釋可以再找資料研讀,這邊先回到開始的問題,那價差策略到底可不可行。
由前面的說明可以瞭解,這個策略是去賣比較便宜的價平選擇權,然後又去買比較貴的價外選擇權,市場上本來就是這樣的傾向了,所有選擇權市價都是當下的均衡點,當我們這個策略作進去市場後,能夠獲利只有兩種可能,第一,未來的波動比現況波動的預期更低,也就是尖頭更尖,我們策略的賣方可以獲利。第二,未來的波動比現況波動的預期更大,也就是肥尾更肥,那我們策略的買方可以獲利。
那所以到底能不能獲利? 不一定,除非我們能預期以上兩種可能會出現再作吧,如果像傻瓜投資法一樣一直作下去,L會預期這長期的表現是沒賺沒賠,但會一直付出交易費用,是不是如此,或許哪天心血來潮再作測試了。

《本文與 Bituzi 同步刊登》
2014年5月30日 星期五
期權價格關係 put-call parity 2
續前篇 期權套利 & put-call parity 介紹了選擇權與期貨價格的關係,這篇再繼續紀錄深入一點的觀察。
因為選擇權與期貨的價格有互相轉換的關係,所以彼此影響是很緊密的,在現在市場非常有效率的情況下,我們可以單從選擇權的報價來瞭解目前市況,而且若是要對選擇權策略作研究和交易,必須要對這些特性掌握到非常熟悉。
以下紀錄由下圖價格來作範例

從選擇權看期貨價格
看價平履約價9100的CALL和PUT,成交價是89及57,如果心算很好的話,不用看期貨報價也知道現在的價格約在9132,算法就是以PutCall Parity來算,9100+89-57。
再來分別看委買賣的價格,
若要合成一個買進期貨,就是buy call + sell put,買90點的call + 賣57點的put,會組成9133的期貨多單(9100+90-57)。
若要合成一個賣出期貨,就是 sell call + buy put,賣89點的call + 買58點的put,會組成9131的期貨空單(9100+89-58)。
因為市場很有效率,所以報價會是 合成買進期貨 (9133) > 期貨市價 (9132) > 合成賣出期貨 (9131) ,不然就會有套利空間。
從期貨看選擇權價格
期貨在9132的位置,
9100的CALL是價內,時間價值是89-32=57點,
9100的PUT是價外,時間價值就是成交價57點,
時間價值由到期時間及波動率這兩個因素影響,也是作選擇權策略很重要的觀察價格,同個履約價的CALL和PUT所計算的時間價值是一樣的,所以波動率也是一樣的,如果不一樣時,也就是有套利空間。
這個特性也有可以利用的地方,在計算較價內的CALL和PUT時,因為沒有成交量,或是買賣價差掛很遠,又想要知道隱含波動率時,就可以利用另一邊來替代,例如8600的CALL很久沒成交,買賣價掛很遠,要去算它理論價時,就直接拿8600的PUT的隱含波動率來算,因為8600的PUT是價外PUT又有成交量很容易算。
選擇權與期貨的轉換
也是由PutCall Parity來反推,由上面合成期貨的例子再延伸,可以知道期貨、CALL和PUT三個,知道兩個就可以推出另一個,所以有以下共六種的轉換。
(F=期貨,B=買,S=賣)
BF = BC + SP
SF = SC + BP
BC = BP + BF
SC = SP + SF
BP = BC + SF
SP = SC + BF
再多補充紀錄,現在選擇權造市非常緊密,所以市場才能有這樣好的流動性,關於造市的機制和辦法可以到期交所網站瞭解,位置是交易制度的連結內如圖。

多瞭解一些關於市場造市制度及交易者也是蠻好的,其中造市辦法會規定造市者當月回應報價請求之報價比率、有效報價累計時間及造市量,達成目標時可以減免其當月應繳之交易經手費、結算服務費,讓造市者成本更降低。
以上所紀錄到的這些價格和關係若一直看、經常看,就會感受到整體期貨和選擇權價格的連動,也可以對時間價值和波動率有直覺的反應,這對選擇權操作會有更深入的理解。
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降低。不過獲利也將會被限制,各自取捨吧。
標籤:
台指期,
交易策略,
期權交易方法,
程式交易,
Multicharts
2014年3月14日 星期五
價格波動率與買賣方策略
先前紀錄了幾篇關於波動率及買賣方策略的文章,以及波動率在程式交易上的應用例子。如以下
歷史波動率、隱含波動率 (with EXCEL VBA、C#)、歷史波動率策略設計、台指選擇權結算買賣方損益,不過還並未紀錄操作實務上的重點,這篇再繼續作延伸。
選擇作買方或賣方有很多考慮因素,波動率是其中很重要的因素之一,如果對未來預期波動程度會變大,則作買方有利,如果預期波動程度變小,則作賣方有利。這樣的解釋其實並不夠清楚,而且是有前提的,在持倉的所有期間。
舉個例子說,吳波判斷未來台指期價格波動會加大,決定進行買方策略,假設價平的履約價是8000,則同時買進8000的CALL及8000的PUT,經過一個月漲漲跌跌,最後又回到8000結算,但是吳波最後卻還是獲利,這只有一種可能,在這個月的期間內價格波動確實超過當初他買進時的水準,而且吳波有進行動態調整。
這個動態調整是這樣的,在8000點進場後,市場波動確實加大,很快下跌到7900點時,這比吳波認為的波動來的快,而現在總部位DELTA變成 -1,吳波就買進一口期貨,使總部位DELTA變成0,然後,又下跌到7800,總部位(含加進的一口期貨)又變成 -1,這時吳波又買進一口期貨,然後市場回到7900,總部位DELTA變成 1,這時又賣出一口,之後市場又回到8000,總部位DELTA又變成 1,這時又賣出一口。雖然指數又回到8000,但是期貨買進7900及7800,賣出7900及8000,這個調整的部份就獲利不少。
而後指數往上了,到8200時賣出期貨以平衡DELTA,越往上越賣,往回跌就買回來,所以吳波是被動式買低賣高,總結下來調整的期貨獲利比買方部位的虧損要多。
反過來說,賣出兩邊選擇權在8000,就算最後結算正好在8000點,也不見得會獲利,因為期間內可能漲到8300、8500,可能跌到7800、7700之類的,只要超過預期的波動(也可以說是賣方所能容忍的價位程度),那這個賣方投資人必須在8300買進期貨,在7700賣出期貨,為了保護(避險)被迫買高賣低,最後這個避險的成本超過了選擇權賣方的獲利。
以上數據僅作舉例,若熟悉選擇權跨式部位的損益及GREEKS變動可以很輕易瞭解要說明的內容。另外,避險在例子中是用期貨執行,實際上的選項很多,例如部位平倉、用不同的履約價、搭配不同的買賣方,那就是要繼續看各種價差交易了。
其中更大的學問是如何決定調整的時機,如果在建立前就有預期的波動水準,當到達時很自然就要進行調整,或者是以總部位的DELTA來進行調整,和前面所述的例子一樣,另外一種方式則是依照時間來作DELTA中立,例如每天、每週之類的,時間到就調整一次。
回到開頭所先講的結論,如果對未來預期波動程度會變大,這個未來預期是最重點考量,若要以價格波動程度作為選擇買賣方策略最重要的因素,要小心目前現狀波動率給人先入為主的觀念,因為市場上的價格已經作了反應,例如我們知道現在日經波動程度很大,常常一天2%、3%在跑,那麼作買方再來調整會很好作,這就錯了,那要作買方的權利金是很貴的,除非波動再放大、更大,才能夠獲利。
此文緣由朋友問到外資部位總是買方一大堆,這種盤整區間行情不是賠死了嗎? L只能回說不一定,要看調整的好不好,不是只由買賣方就可判斷損益的。以上,供有同樣疑問的朋友參考囉。
2014年1月21日 星期二
趨勢追隨策略類型2-突破
續前篇 Trend Following 趨勢追隨策略類型 。設計趨勢追隨的程式交易策略,首先就是要判斷趨勢,一般常見方法有兩種,第一是均線策略,跟著市價與均線的位置或均線的斜率來判斷趨勢方向,第二就是突破,由基準點開始看盤勢漲跌了多少作為突破,再持續同一方向的趨勢。
這個基準點的設定可能是特定價位或某特定時段所依據,例如特定價位設定上個月結算價,或心裡認為特別重要的價位。特定時段可能設定每日開盤的價格或每週、每月甚至每年開盤價格都可以運用。
而漲跌多少算是突破可以追價? 這就是看前面所設定的週期,越長期的週期應當配合越大的突破價差,例如每季開始的市價設定為基準點,漲跌5%作為突破,在未翻回反方向突破前持續持有直到每季結束,這樣也是個可以測試的策略,可能都比一些奇奇怪怪的指標還會獲利了。
另外一個考慮漲跌價差的設定是波動率,例如最近一段時間波動大,那這個漲跌價差就應該同步放大,真的夠大才去追突破,免得盤整常常洗刷,反之,波動小時,漲跌價差也應該同步縮小,跟著市場作小波段。
這樣跟著波動率所設定漲跌價差,可以利用的方式很多,例如取日的 ATR、利用BBand、或 歷史波動率 等等,此篇就來紀錄應用歷史波動率來設計突破策略。
要考慮的參數有
- 取多少期間的歷史波動率,計算出對應點數
- 由目前市價要漲跌多少比例的對應點數算是突破
程式範例如下:

基準點BP設定為目前市價,計算出對應的波動點數HVp,例如HVp為100點,把它當作目前可能波動的範圍上下區間是100點,而基準點在中心點,那當市價突破基準點加減50點時,就視為是一個趨勢開始,建立方向部位並將新的基準點設為目前市價,以此再續看下一個突破點。
策略表現及指標如圖:

這樣的策略可以有以下績效(10minK,2005~2013)


以一個策略原型來說,這樣的績效是蠻不錯的,問題在於drawdown如何縮小。另外注意這是非多即空的策略,進一步也可以試試什麼情況不須在場內,例如波動非常小時,可能不要有單,或許可以降低些drawdown。也可能是相反的,波動很大時先退出,因為可能大幅drawdown都是在此期間產生。
突破策略百百種,開頭提到的以年月日作基準點的策略也可以慢慢紀錄,另外均線策略也是非常多樣化的,持續調整囉。
2013年12月31日 星期二
籌碼分析-法人期貨未平倉
籌碼分析是期權交易方法中的一種,其中最常聽到的是由期交所每日公布法人期貨未平倉資料,用以判斷法人的方向,這算是一個顯學吧,每日期貨商的分析報告和分析師幾乎都會引用這項資料,也有許多書籍、程式交易、甚至一些論文都在研究法人未平倉部位和台指走勢的相關性,不過,L不覺得能夠盡信或使用,可能要換個方式說,L還未找到能夠應用它的並可認同的策略,即使它回測是會獲利的。
最初的認識是由程式回測而來,曾有試過外資未平倉部位加上均線邏輯,最讓人疑惑的就是大跌段2008年時,外資期貨多單從五千多點抱到四千點,這怎麼能用呢? 有多少人可以承受這樣的回檔? 就算抱過那兩三個月後開始大賺,也是一場空,因為都被抬出場了。這是其一,再來看看以今日(2013/12/30)為例。
前一個交易日(2013/12/27)的外資期貨未平倉如圖

今日(2013/12/30)的外資期貨未平倉如圖

這一陣子外資一路是空單,慢慢降低,指數則是由盤整區8400震盪到今日收盤8625,但如果說外資是被軋空的話就太不負責任了,因為那是錯的。今日的行情是上漲82點,價位如圖。

假設27日的期貨留倉-881口在今日全數未動,那今日損益則是82點*200*-881口=-14,448,400,但是選擇權呢,是賺的。
前一個交易日(2013/12/27)的外資選擇權未平倉如圖

今日(2013/12/30)的外資選擇權未平倉如圖

買權最後一欄契約金額464,689,000 減前日金額389,659,000再加今日權利金收回的金額5,490,000 = 80,520,000
而賣權最後一欄契約金額201,020,000 減前日金額226,178,000再減今日權利金繼續投入的金額18,304,000 = -43,462,000
則買賣權合計80,520,000 – 43,462,000 =權利金今日獲利 35,410,000
期貨與選擇權合計則是 -14,448,400 + 35,410,000 = 20,961,600
所以,今日台指上漲82點,外資部位是獲利約2100萬,反過來說,如果作期貨在今天要賺到這個獲利需要作多幾口台指呢? 20961600 / 82 / 200 = 約 1278 口,這是一個可以拿來約當期貨總部位的DELTA,BUT,只在這個盤後時間點有效,因為明天一開盤,選擇權部位會因為THETA變化、會隨著行情變化GAMMA和DELTA、權利金變化更跟著VEGA變化,所以也不曉得會變到哪裡去。
若是想要很粗估選擇權的DELTA,就繼續來算算,首先粗估,買權總付出權利金464,689,000 / 口數92,743 = 每口平均是5010.5 元,也就是約100點的CALL,那現在市場上100點的CALL最接近的是8500(148點)和8600(79點)之間,對應的DELTA約是8500(0.795)和8600(0.576),已經是價平靠價內了,目標是100點,那再插補法算一下對應的DETLA位置,然後再乘92743口,得到粗估的買權DELTA…然後再算賣權的…以下省略
這個東西已經非常粗略的估計,不知能代表多少真實狀況,因為完全不曉得履約價的分配,而且還有不同月份,除非那麼厲害再把今日總權利金變化對應行情和各履約價的OI變化量這兩個因素再加進去好好算一算,或許,只是或許能夠得到比較接近的部位狀況。
問題是,期貨有了,假設選擇權也能算的出來粗估的,還是沒辦法知道法人部位偏空還是偏多,因為摩台是不需揭露的,而且以未平倉部位來看,台指現在才58465口,但摩台是219033口,就算合約價值比除下去也有約12萬多口,這比台指還大的太多了,怎能知摩台在外資部位是什麼比例? 什麼部位? 所以當然不知外資總期權部位是偏多偏空呢?

小結論:
- 期貨偏多不代表作多,至少加看選擇權部位
- 期貨加選擇權總共偏多也不代表作多,因為摩台部位不知道
- 以不知道的假設方向作回測的結果,即使是可獲利的也難以信服
- 分析師和研究員的未平倉參考分析其實是作報告而已,有時準有時不準,不過至少有東西寫
以上,紀錄目前的心得,或許有更好的方式判斷這些資料,只是目前還未有好方法,繼續觀察囉~
2013年12月26日 星期四
Trend Following 趨勢追隨策略類型
Trend Following趨勢追隨是 期權交易分類 裡最基本的一個策略,這也是每個人都知曉的策略。目前(2013/12)在 isag 裡列出的611檔CTA中,有311檔的策略類型完全或部份是Trend Following,是所有列出的策略類型中最多的一種。
Trend Following基本的邏輯就是利用技術指標判斷趨勢方向,然後持有跟隨,這些指標都是一般常見的例如moving average、MACD、breakout X days等等,它的特性就是在趨勢市場獲利,不論是漲勢或跌勢,而在震盪盤整期虧損,因為常常碰到停損或轉向。
在這些Trend Following類型的CTA裡要找表現很好的有很多,要找到表現很差甚至破了MaxDD的也不少。可見要作的好也不是容易的事,就像我們大家一群人,就算用同一條線作為主要邏輯,最後結果也會是天差地遠。

L記得朋友說過程式交易不就可以解決這些問題了,一樣的策略給誰作都一樣,其實L心裡想的是,不論誰作都會不一樣,但要解釋很花時間。會變成這樣的原因非常多,資金不同、環境不同、個性不同、容忍風險程度不同、執行能力、保持紀律的能力等等,不適合的人用策略兩三次交易就用不下去,兩三天就想換了,那這樣就算策略在中長期可以獲利根本就不重要了。
程式交易可以解決一部份問題,但設計的策略、資金運用、風險控制等等還是離不開交易策略的本質,這些都是關於 交易心理與經驗 的影響,這也是交易員不會停止的課題,而且它的重要性是比其它分類(交易方法、系統建置、程式交易策略)還更重要,畢竟你設計出來的東西是來自於你怎麼想的。
回到Trend Following的特性,需要再特別強調當行情出現時絕對、必須要能獲利。不論你是自己作單、幫親友操作、在公司作交易員,都一樣,假設操作台指期碰到一波400~800點行情時,你的策略卻賺不到錢,那是很糟糕的事情,不管你有什麼理由,別人都會認為你的策略不行,如果小漲小跌沒賺錢,大漲大跌又賺不到錢,那還要作什麼交易?
當然不是說策略只有Trend Following這一種,只是在對應盤勢上,當有行情出現時,一般人會給予更高的期望,這可能也是普遍把Trend Following作為基本策略的原因之一。
設計Trend Following類型的交易策略有幾個主題
- 要選用什麼指標作判斷? 前述的moving average、MACD、breakout X days會一一測試介紹。
- 要選用多長的期間? 其實也等於你的目標波段要多少點?
- 如何有效避免震盪洗刷的次數?
- 對應程式交易策略的標準如何?
以上,再慢慢紀錄了
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年11月8日 星期五
隱含波動率 (with EXCEL VBA、C#)
延續前兩篇 (選擇權評價-BS MODEL (with Excel) 、歷史波動率 )的內容,這篇要來紀錄隱含波動率了。
隱含波動率(implied volatility, iv)是以選擇權市價所倒推回它處在多少的波動率之上, 可以表示市場對於指數波動的看法,這也是重要的選擇權交易策略。而要計算它的方法也有很簡單易懂的,就是去試。
假設要計算一個市價100的選擇權商品的iv,如同前篇紀錄的,我們已經有了選擇權評價的公式,先設定一組高低點(如1和0),取高低點的中位(0.5),把0.5代入選擇權評價的公式,假設得到150,比市價100高,表示0.5太高了,將剛剛的高點1改為0.5,再取高低點的中位(0.25),再算價格再和市價比,就這樣一直比到高低點的差距很小,就得到iv了。
剛剛這段計算的例子寫成程式,以VBA為例就如下:
Function civ(S, K, T, R, Target)
high = 1
low = 0
Do While (high - low) > 0.00001
If PriceC(S, K, T, R, (high + low) / 2) > Target Then
high = (high + low) / 2
Else
low = (high + low) / 2
End If
Loop
civ = (high + low) / 2
End Function
Function piv(S, K, T, R, Target)
high = 1
low = 0
Do While (high - low) > 0.00001
If PriceP(S, K, T, R, (high + low) / 2) > Target Then
high = (high + low) / 2
Else
low = (high + low) / 2
End If
Loop
piv = (high + low) / 2
End Function
Function d1(S, K, T, R, V)
d1 = (Log(S / K) + (R * T) + (V ^ 2 * T / 2)) / (V * Sqr(T))
End Function
Function d2(S, K, T, R, V)
d2 = d1(S, K, T, R, V) - V * Sqr(T)
End Function
Function PriceC(S, K, T, R, V)
PriceC = S * Application.NormSDist(d1(S, K, T, R, V)) - K * Exp(-(R * T)) * Application.NormSDist(d2(S, K, T, R, V))
End Function
Function PriceP(S, K, T, R, V)
PriceP = K * Exp(-R * T) * Application.NormSDist(-d2(S, K, T, R, V)) - S * Application.NormSDist(-d1(S, K, T, R, V))
End Function
其中civ計算call的iv,piv計算put的iv,用到的Function之前有介紹過。
變數名稱
S 現貨價格,我們拿來算台指選的話,就拿台指期市價當作S
K 履約價格
T 距離到期日的時間,要年化
R 年利率
V 年化波動率
Target 標的選擇權的市價
同樣的程式用c#寫,也在這篇紀錄一下。
class Option
{
public double CallPrice;
public double PutPrice;
public void Price(double S, double K, double R, double T, double V)
{
double a = Math.Log(S / K);
double b_call = (R + 0.5 * Math.Pow(V, 2)) * T;
double b_put = (R - 0.5 * Math.Pow(V, 2)) * T;
double c = V * Math.Sqrt(T);
double d1 = (a + b_call) / c;
double d2 = (a + b_put) / c;
CallPrice = S * ND(d1) - K * Math.Exp(-R * T) * ND(d2);
PutPrice = K * Math.Exp(-R * T) * ND(-d2) - S * ND(-d1);
}
public double PriceC(double S, double K, double R, double T, double V)
{
double a = Math.Log(S / K);
double b_call = (R + 0.5 * Math.Pow(V, 2)) * T;
double b_put = (R - 0.5 * Math.Pow(V, 2)) * T;
double c = V * Math.Sqrt(T);
double d1 = (a + b_call) / c;
double d2 = (a + b_put) / c;
CallPrice = S * ND(d1) - K * Math.Exp(-R * T) * ND(d2);
return CallPrice;
}
public double PriceP(double S, double K, double R, double T, double V)
{
double a = Math.Log(S / K);
double b_call = (R + 0.5 * Math.Pow(V, 2)) * T;
double b_put = (R - 0.5 * Math.Pow(V, 2)) * T;
double c = V * Math.Sqrt(T);
double d1 = (a + b_call) / c;
double d2 = (a + b_put) / c;
PutPrice = K * Math.Exp(-R * T) * ND(-d2) - S * ND(-d1);
return PutPrice;
}
public double ND(double d)
{
double L = 0.0;
double K = 0.0;
double dD = 0.0;
const double a1 = 0.31938153;
const double a2 = -0.356563782;
const double a3 = 1.781477937;
const double a4 = -1.821255978;
const double a5 = 1.330274429;
L = Math.Abs(d);
K = 1.0 / (1.0 + 0.2316419 * L);
dD = 1.0 - 1.0 / Math.Sqrt(2 * Convert.ToDouble(Math.PI)) * Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K * K + a3 * Math.Pow(K, 3.0) + a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0));
if (d < 0) {return 1.0 - dD;}else{return dD;}
}
public double d1(double S, double K, double R, double T, double V)
{
double a = Math.Log(S / K);
double b_call = (R + 0.5 * Math.Pow(V, 2)) * T;
double c = V * Math.Sqrt(T);
double d1 = (a + b_call) / c;
return d1;
}
public double civ(double S, double K, double R, double T, double Target)
{
double high = 1;
double low = 0;
while ((high - low) > 0.00001)
{
if (PriceC(S, K, R, T, (high + low) / 2) > Target) { high = (high + low) / 2; }
else {low = (high + low) / 2;}
}
double civ = (high + low) / 2;
return civ;
}
public double piv(double S, double K, double R, double T, double Target)
{
double high = 1;
double low = 0;
while ((high - low) > 0.00001)
{
if (PriceP(S, K, R, T, (high + low) / 2) > Target)
{high = (high + low) / 2;} else {low = (high + low) / 2;}
}
double piv = (high + low) / 2;
return piv;
}
}
上面是一個class,直接加入類別就可以使用了,呼叫 Price(...) 後,可以拿屬性 CallPrice 和 PutPrice來用,或是分別呼叫PriceC(...) 或 PriceP(...) ,計算civ和piv一樣,可以直接得到回傳值iv。跟VBA不同的是,C#要多寫一個常態分配的函數ND。
有了這些,就可以計算出隱含波動率,運用上就看各人解讀了,之後再繼續紀錄。
(註: 範例程式是 L 參考網路上程式後自己撰寫的,讀者可自由複製使用,但程式碼轉載請註明出處 。)
2013年10月23日 星期三
歷史波動率
接續前篇 選擇權評價-BS MODEL (with Excel) ,波動率主要有歷史波動率和隱含波動率兩種,此篇要先要紀錄的是歷史波動率。以 L 自己的交易心得來比喻波動率的話,瞭解波動率之前,看期權交易是方向和時間這二維的平面,瞭解波動率之後,看市場和策略像是立體的三維,方向、時間和波動。
在使用上,這個值不只對選擇權交易很重要,波動率本身就是選擇權評價重要的一個因素,不瞭解它的話,幾乎可以說別玩了。對於期貨交易也非常有參考價值,在期貨程式交易方面,也可以是不錯的濾網,甚至作為主要邏輯也可以。
歷史波動率的計算方法是: 一段期間內的收盤價計算的年化報酬率標準差,這句話不像中文,但其實不會很複雜,拿EXCEL作簡單的五日波動率範例,如下圖。

步驟是
- 列出日期和收盤價
- 把收盤價取Log,紀錄在C欄,例如C7的公式是=LN(B7)
- 計算報酬率,就是Log相減,例如D7的公式是=C7-C6
- 計算五日標準差,例如E7的公式是=STDEV(D3:D7)
- 將標準差年化,例如F7的公式是=E7*SQRT(252)
這樣就計算好了,剛好可以看到這五日台指的歷史波動率算出來只有5.09%,真是低的可怕。
再來補充在Multicharts把歷史波動率寫成指標的語法,如下圖。

計算就和上列的步驟一樣,這個指標可以算兩個期間的歷史波動率,參數是20和60,畫出來的圖如下。

有了圖就可以觀察行情和波動率的走勢,一般來說,多頭時波動率低,空頭時波動率高。或是換個角度說,波動率高行情大,波動低行情小。以這樣的特性來說,就可以作為濾網和交易邏輯了。
深入一點的再紀錄,以上兩個範例計算最近的台指,五日是5.09%,二十日11.97%,表示台指波動是壓縮中(而且壓的很小),那這個波動率的數值意義是什麼?
以波動率10%來舉例,這是年化的(計算中有乘一個根號252),假設台指現在8400點,10%是840點,表示一年之後台指在7560~9240點(8400加減840點)的機率大約是68%,這個時間和空間可能比較沒概念。來算一個月的試試,10%是年化的,月的就再除根號12,等於2.89%,等於8400*2.89%=242點,表示一個月之後的台指在8158~8642點的機率是68%。那麼,假設你覺得台指的波動應該會大於這個幅度時,就應該作多波動率。
以上所述,要再嚴謹一點的說,68%就是正負一個標準差的常態分配下的機率,實際上指數分配並不是常態分配,這是另一個要深入的主題。要簡單明瞭的說,波動率越大就是波動大,比較會有行情,K線也可能比較大根,這樣就好了。
最後再整理一下,之後要繼續紀錄的是波動率在下列幾項的應用
- 作為程式的濾網
- 作為主要交易邏輯的測試 ( 歷史波動率策略設計 )
- 選擇權與隱含波動率 (隱含波動率 (with EXCEL VBA、C#) )
2013年7月26日 星期五
Technical 技術分析
在 期權交易分類 這篇文章裡,技術分析是非常大的一塊重點,每個市場上的投資人都會聽過各式各樣的技術指標,聽分析師講的頭頭是道。或許有的指標可以得心應手,但也常碰到失靈的時候,技術指標有的聽起來很奇怪,但是也沒辦法否定它的存在。總是會有人宣稱他的指標如何戰勝市場,吸引一波波投資人相繼跟隨研究。
這些事情不是L可以講的清楚的,全世界最頂尖的交易員和學者早就爭論許久,技術分析,到底有沒有用?
如果沒用,為什麼那麼多人在用?是不是我不會用?
如果有用,要怎麼用?用什麼?什麼時候用?
建議可以先參考WIKI對技術分析的解釋,中英文兩篇,內容有些不同。
WIKI-Technical analysis
WIKI-技術分析
和其他交易方法一樣,能夠瞭解它才可能用的久、用的順。很多人第一步就踏錯了,看到琳瑯滿目的技術分析書籍就急著拿來當武器上戰場,聽到分析師或朋友信心十足的技術分析就跟隨使用,這都不是長久之計,是碰運氣。其實在尋找和嘗試各種指標之前,先想想它為什麼會有用?是否適合自己用?絕不輕信其它人或老師片面之詞,也絕不盲目跟隨,我們要作的是先驗證,再學習使用,然後再實際應用。
所以我們才要看這些資料,首先,技術分析依據下面三個基本原則:
- 價格反應一切資訊 (Market action discounts everything)
- 價格是有趨勢的 (Prices move in trends)
- 歷史會重覆它自己 (History repeats itself)
你相信這些原則嗎?例如History repeats itself,這是名言,是格言,但不一定總是正確,就算在某些領域和經驗告訴我們是正確的,在投資市場也不一定正確。如果你不相信它,又怎麼能期待以前有用的指標,這次進場也會一樣地有用?反之,如果你相信它,它又表現的不好時,那怎麼調適?
很可能你自己也不曉得自己是否相信這些原則,所以我們才要驗證,驗證各種技術指標在各種市場的表現,模擬我們在每次進場該有多少的期待,表現不好的機率有多少?有多不好?最好最壞是如何? 然後我們再去運用它,再繼續深入瞭解調整它。
這個它,有可能是以下任一種指標,或是兩種以上指標的交配組合。這像是武林中各門各派的功夫目錄,我們就來開始一個一個調查驗證,用回溯測試的方法,用策略評估的原則,尋找適合自己的降龍十八掌。
Concepts
- Average true range – averaged daily trading range, adjusted for price gaps ( Average True Range(ATR) 平均真實範圍 )
- Breakout – the concept whereby prices forcefully penetrate an area of prior support or resistance, usually, but not always, accompanied by an increase in volume. ( 通道突破策略 、波段突破策略(with ATR) )
- Chart pattern – distinctive pattern created by the movement of security prices on a chart
- Cycles – time targets for potential change in price action (price only moves up, down, or sideways)
- Dead cat bounce – the phenomenon whereby a spectacular decline in the price of a stock is immediately followed by a moderate and temporary rise before resuming its downward movement
- Elliott wave principle and the golden ratio to calculate successive price movements and retracements
- Fibonacci ratios – used as a guide to determine support and resistance
- Momentum – the rate of price change ( Momentum 市場動能 )
- Point and figure analysis – A priced-based analytical approach employing numerical filters which may incorporate time references, though ignores time entirely in its construction
- Resistance – a price level that may prompt a net increase of selling activity
- Support – a price level that may prompt a net increase of buying activity
- Trending – the phenomenon by which price movement tends to persist in one direction for an extended period of time
2013年7月9日 星期二
台指選擇權結算買賣方損益
此篇想要紀錄台指選擇權買方賣方在過去的表現。交易模式很簡單,每次近月合約一開倉後就進場,然後就都不動一直放給它結算,這樣的交易方法,各位可以先想看看,在台指選擇權這麼多年是作買方有利還是作賣方有利?
仔細說一下回溯測試的規則,以下圖為例,例如2005/2/17日是結算日,下一個交易日2005/2/18的收盤時進場,履約價選擇價平6100,作買方就是6100的call和6100的put各買一口,分別是101點和86點,結果這個月到結算,買方輸了98點。

L作的測試期間是2005/1 ~ 2013/5,在這101個月的期間裡,不算交易費用,光是以策略的損益作累積,結果買方累積損益是 237點!! 也就是說,不是買方有利,也不是賣方有利,在期間夠長的情況下,買賣方是勢均力敵的。
以下是買方月損益和累積損益圖。

以下是買賣方月損益的基本統計資料,買方最大獲利881點、最大損失503點,在101個月中贏了44次,平均贏一次賺246點,平均輸一次189點。可以看出意料之中的買方獲利月份少,但賺賠比高。賣方獲利月份多,但賺賠比低。

以下是各月份買方損益。
訂閱:
文章 (Atom)