PTT推薦

[心得] 美股選擇權估值網站開發

看板Stock標題[心得] 美股選擇權估值網站開發作者
zmcx16
(zmcx16)
時間推噓14 推:15 噓:1 →:2

部落格完整文章:
https://blog.zmcx16.moe/2022/01/blog-post.html

最近在重新研究美股選擇權, 思考了一下大概有以下幾種作法:

1. 短線買賣合約賺差價
-> 短線投機成分太重, 加上對身心都不太好, 自己想像了下也覺得不適合自己, 故不考慮。

2. 尋找套利機會
-> 難度很高, 要有高規格的設備去即時掃描所有市場, 就算真的找到有套利機會的標
的, 自己的資本額也完全不足以賺到錢, 再加上交易成本等等, 基本上也是完全不用考慮了...。

3. 搭配現股做避險或加碼操作, 做中長線投資
-> 感覺最適合自己, 不過以前自己這樣做成效不彰, 必須要想辦法改進自己的策略。

4. 尋找市價跟估值乖離過大的合約交易, 只要不是黑天鵝事件等級, 在均值回歸下長久下來應該能賺錢
-> 這個感覺也有研究的價值, 不過如果只是找乖離過大標的, 在不考慮公司基本面的
話, 就只是單純的做交易而不是當股東, 風險控管部分得更確實, 而且某方面來說可能會搞成像方案1, 如果要做這塊必須更小心謹慎。


這樣看來能玩的就是3&4了, 如果要做這兩塊, 最重要的就是針對選擇權做估值, 估算目前市場上的選擇權合約, 相對於標的價格到底是貴還是便宜, 如果合約市價比合理價貴,我們就可以賣出合約賺權利金; 相反的如果合約市價比合理價便宜, 那我們就可以買進合約, 賭賭看能不能履約賺到標的價差。 至於合理價要如何計算得出, 就可以靠選擇權估價模型, 而最具代表性的有以下三種:

1. Black-Scholes Model
套入數學公式就能計算出合約理論價格, 公式太複雜恕小弟不解釋(我有看沒懂, 頂多知道參數代表的意義而已, 為什麼公式長這樣我也霧煞煞)

2. Monte Carlo Simulation
對標的價格的變化做隨機模擬, 在假設符合常態分佈的情況下進一步推算出合約價格。
公式其實我也是看不懂, 只懂概念而已。

3. Binomial Tree (二元數, 二項式定理)
從估值日開始建樹, 每次的分支都是一個時間的價格的變化(波動率), 持續建樹直到節點到行權日為止。 也是這三種模型中唯一可以計算美式賣權的模型。



現在知道有三種代表性的模型, 再來要做的, 就是對美股市面上所有的選擇權合約做估
值, 這塊當然不可能靠人工計算, 包含抓市場資料以及計算估值, 都打算直接透過程式處理, 幸好三種估值模型網路上有一堆程式碼了, 抓Yahoo財經資料的library也有, 我只要專心串起來做整合就好, 做好的成果如下:

Github:
https://github.com/zmcx16/Norn-Finance-API-Server

程式寫成Web API Server的形式, 這樣之後可以直接串我寫的其他網站, 目前提供四種
API:

[GET] /stock/history
[GET] /option/quote
[GET] /option/quote-valuation
[Websocket] /option/quote-valuation
Open API文件: https://norn-finance.zmcx16.moe/docs

第一個API是取得個股歷史股價, 這個API我主要拿來計算個股的歷史波動率, 第二個API則是取得美股個股的期權鏈, 也就是個股的所有選擇權合約, 前兩個API就只是直接抓
Yahoo財經的資料, 而第三個API則是取得選擇權的合約以及估值結果, 只要輸入個股代號就會幫你抓該個股的所有合約以及針對每一份合約算出上述三種模型的合理估值。 至於為什麼還有第四個Websocket API, 原因是這個網站我是架在Heroku當免費server用, 可是卻因為選擇權估值模型計算太久採到Heroku 30秒timeout的雷, 為了workaround才開的API, 有興趣的人可以看這篇文章:
https://blog.zmcx16.moe/2022/01/heroku30request-timeout-workaround.html



另外網站前端的部分則是直接在Norn-Stockscreener多開一個選擇權估值頁面:
https://norn-stockscreener.zmcx16.moe/options/

這頁面提供兩種模式:

1. 美股個股盤後選擇權估值
2. 查詢&計算個股選擇權估值

https://i.imgur.com/ijTxhFO.png

圖 美股選擇權估值網站開發

https://i.imgur.com/qYID5Ku.png
圖 美股選擇權估值網站開發


上面的表格是Calls, 下面的表格是Puts, 以(1.) 美股個股盤後選擇權估值來說, 就是收盤後掃全部美股的期權鏈資料, 在分別計算上面提到的三種選擇權估值模型.....是很想這麼做, 可惜做不到..., 原因在於美股有幾千甚至一萬多檔個股, 然後每檔個股的選擇權合約數量又會隨著行權日跟行權價格的組合成倍數成長, 以AAPL來說, 光是一個月內的近月選擇權就有幾百檔合約, 要去爬這些資料並計算估值, 跑沒多久就會被Yahoo財經
ban IP, 更不用說還需要龐大的電腦運算資源跑估值模型(Black-Scholes Model只需要一行公式就能算出, 可是Monte Carlo Simulation & Binomial Tree得跑超久...), 所以只能加上一些限制條件, 只針對比較有用的合約跑估值就好, 我目前是只針對以下的個股選擇權跑估值模型:

1. 標的(個股)市值超過500萬鎂

2. 近月選擇權 (近45日內行權)

3. 最小成交量 >= 10

4. 最近一次交易日 (3天內)

這樣過濾後就能只針對比較有機會交易 & 流動性風險也較低的合約做估值, 不過即便如此, 符合這些條件的合約做完估值後還是一大把, 我必須得讓程式自動挑出我感興趣的合約, 所以又針對這些已經做完估值的合約, 計算估值後的價格以及目前市場價格的乖離率(Bias), 乖離率越大代表市場價格跟理論價格差異越大, 在均值回歸下獲利的可能性也較大。 以我目前想交易的策略來說, 我主要針對下面兩種情況做過濾:

1. Valuation Bias: last price > 0.1; premium > 100% (合約現價被嚴重低估)

last price > 0.1 代表最近一次交易的權利金價格超過0.1元, 畢竟權利金要是更低, 光是交易手續費就不划算了, 在加上權利金低於0.1塊八成也很難交易成功(除非有地上的鈔票可撿), premium > 100%表示理論價格大於目前市價100%以上, 代表現在合約價格是被嚴重低估的, 如果我們buy call或buy put, 那獲利的機率可能會比較高。



2. Valuation Bias: last price > 0.1; discount > 50% (合約現價被嚴重高估)

一樣last price > 0.1 , 而discount > 50%表示現在合約價格跟理論價格比至少打折超過50%以上, 代表現在的合約價格是被嚴重高估的, 如果我們sell call或sell put, 那獲利的機率可能會比較高。



3. Self Query

其實就是打上面提到的/option/quote-valuation API, 即時查詢&計算個股的選擇權合約以及三種模型的理論估值, 不過因為是用免費的伺服器, 計算估值模型又要花很多運算資源, 如果是像AAPL那種超多行權價以及行權日的合約, 就得跑超久, 如果真的需要做大量查詢或是常常失敗, 上面也有提供程式原始碼, 可以自己架個Server用自己的環境跑API。



說明就先到這邊, 接著來試著使用看看吧, 首先我想找合約現價被嚴重低估的call或put合約, 表格的Valuation (Avg) 是三種估值模型計算後的平均合約價, Bias (Price) 則是上述價格跟合約最後成交價(Last Price)的乖離程度。 從下圖可以看到, 針對Bias排序後, ARNA行權價100元, 行權日2/18的合約, Bias竟然有70倍。 看一下合約市價只有
0.1元, 可是理論估值卻是7.19元, 的確是超過70倍沒錯:

https://i.imgur.com/kR88jJW.png

圖 美股選擇權估值網站開發

可是這樣就代表真的是超划算的賺錢機會嗎? 這可不一定, 我們可以看看合約標的ARNA的股價走勢看看:

https://i.imgur.com/wT8GHYs.png

圖 美股選擇權估值網站開發

可以看到, ARNA在12/13後忽然暴漲80%以上, Google了一下原因是這則新聞:

輝瑞收購喜訊加持 Arena Pharmaceuticals
美國生技公司 Arena Pharmaceuticals 周一(13 日)傳出輝瑞同意以 67 億美元收購喜訊,換算每股收購報價為 100 美元,為上周五收盤價的 2 倍,盤中股價應聲大漲近 80%,接續盤前漲勢。

如果對選擇權估值模型的公式還有印象的話, 其中有一項最重要的參數為"波動率", 選擇權簡單一句話解釋, 就是買合約的有行權的權利, 賣合約的有履約的義務, 最終還是在賭會不會行權, 行權時的價差有多大。 而估值模型的所有輸入參數中, 波動率是最重要且未知的參數, 波動率大就代表行權的可能性大, 波動率小則相反, 所以波動率越大, 合約價格就會越貴; 相反若波動率越小則越便宜。

But, 雖然你提供的未來波動率參數越準確, 則估值模型計算出的合約價格就越精確, 可是未來是不可知的, 我上面跑估值模型是直接計算標的過去一年的波動率, 所以遇到上述情況, 可以預期提供給模型的波動率是嚴重高於未來波動率的, 所以這個估值並不可信,不能單純看這個乖離率去買進買權。

繼續往下看, 那些乖離率極高的, 幾乎也都是上述這種情況, 所以還是得一個一個過濾,把這些雜訊濾除掉, 不過靠這表格至少已經從恆河沙數的合約過濾到剩92筆合約。

再往下找, 看到有一檔FAF:

https://i.imgur.com/eB0x8XM.png

圖 美股選擇權估值網站開發

https://i.imgur.com/RAeVFPE.png
圖 美股選擇權估值網站開發

標的現價73.64, 行權價75.00, 離行權只差1.85%價差, 而合約現價只有0.25, 估值價則是1.08, 乖離率3.33倍, 其實不看乖離率就覺得這合約超便宜, 會這麼便宜應該是這幾天大跌, 市場情緒是覺得這檔會繼續下跌吧, 可是如果止跌了可以預期會獲利頗豐, 要賭我也會想賭這種的。



再來試著找合約現價被嚴重高估的合約吧, 看表格符合條件的call合約有3304筆, put合約有2221筆, 因為是當賣方, 最好結果也就合約到期不用行權, 所以乖離率最高就等於
1, 也就是合約其實完全沒價值(即便還沒到期也一樣):

https://i.imgur.com/fFsRt0i.png

圖 美股選擇權估值網站開發

看表格一排的AMZN(Amazon), 來看看AMZN到底發生了什麼事:

https://i.imgur.com/msVwcG7.png

圖 美股選擇權估值網站開發

這樣看就很清楚了, 因為最近美股大跌, AMZN近一年的波動率其實不大, 可是最近這兩根大跌破讓股價大跌, 上面表格的行權價看起來都不太可能行權了, 所以合約市價極低。不過因為AMZN過去的歷史波動率低, 而我的估值模型又是直接套用歷史波動率, 所以估值模型計算出來這合約根本不可能行權, 合約價格直接給0, 所以才會乖離率為1。

這個問題其實有點麻煩, 照理說估值模型如果算出合約價為0, 那我們應該可以爽爽的賣合約爽賺權利金, 可是合約市價現在也跟屎沒兩樣, 就算比0好也不代表一定要賣合約,
畢竟過去的波動率不代表未來的波動率, 模型就算真的運氣好用歷史波動率給你算很準,也都還是機率問題, 沒有確定的答案, 來個肥尾效應就輸到脫褲了。

會有3000多檔符合條件的合約, 應該有一大半都是上述這種情況, 這邊改一下表格的過濾條件, Valuation (Avg) > 0.05, 並且不看AMZN, 排序下來找到ALGN, 標的現價462.78,行權價570.00, 離行權差23.17%價差, 合約現價6.77元, 可是估值只有0.06元, 乖離率高達0.99。

https://i.imgur.com/c7CI6Dm.png

圖 美股選擇權估值網站開發

離行權日只剩兩週, 照理說兩週要漲23%感覺很有難度, 感覺這權利金應該很好賺, 來看下ALGN股價走勢:

https://i.imgur.com/9NHBEs3.png

圖 美股選擇權估值網站開發

原因跟AMZN一樣是最近暴跌, 不過看起來比AMZN還要有賺頭(合約跟行權價差有1.18%, 兩個禮拜賺1.18%算很不錯), 不過問題是裸賣空是很危險的, 要是來個V轉就會為了賺1.18%賠十幾二十%都說不準, 真的要玩也得做好避險才行...。

另外選擇權估值也只是用理論估值跟標的物當下相比, 理論價跟市價乖離率差多少, 就算乖離率落差很大, 搞不好明天標的物大漲或大跌就又整個不一樣了, 所以在買賣選擇權
時, 我第一個看的還是標的物的現況, 在決定要不要買賣選擇權, 像是這幾天美股漲跌幅都蠻大的, 我有趁低檔撿了不少Sell Put Intel(INTC)以及美國鋼鐵(X), 畢竟真的跌到這麼低, 對我來說行權就真的是撿到大便宜, 沒行權就爽賺權利金(至於為什麼不直接買現貨, 因為現金用完了, 到時候行權我就當開小槓桿提早加碼~), 而到底要交易哪個合
約, 我就可以直接跑估值模型看, 看哪檔合約乖離率最高最值得交易:

https://i.imgur.com/3oA9H0T.png

圖 美股選擇權估值網站開發

上面會有NaN是因為已經1/28行權日到期了, 在過半天查詢應該就不會再查到這些合約,
而之後用乖離率排列下來看, 2/18 37.5賣權乖離率最高, 不過其實前幾名估值模型跑出來幾乎都沒價值, 我就選2/18 40賣權, 能多賺些權利金就多賺些, 不過這也是因為昨天INTEL這麼大一根下跌才會乖離率這麼高, 用歷史波動率計算估值畢竟是過去資料, 要是INTEL後續再來幾根這麼大根下跌, 那用歷史波動率算估值模型基本上就慘了, 基本上還是賭博啦~。

這次分享大概就到這邊結束, 部落格文章後面會講估值模型的歷史波動率計算, 以及一些開發歷程踩的雷, 有興趣的話可以直接看部落格文章。 如果有什麼錯誤或建議, 歡迎一起討論~。

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.204.25.12 (臺灣)
PTT 網址

lorenzero 01/28 16:33推一個

Homeparty 01/28 16:41

jc761128 01/28 16:47好猛..

IanLi 01/28 16:47這太認真了,若真的要玩到國外自營部門吧

illegalmad 01/28 16:50專業

sonyc503 01/28 16:52推研究 但不適合一般人 今年很難 Fed政策面影響太多

goenitz8 01/28 17:06那三組方法都是一樣,1.SDE轉熱方程解出公式解,2.

goenitz8 01/28 17:06是SDE直接模擬,3.近似解,分割越多越接近理論值

sheng76314 01/28 18:38m01有一個選擇權神人 要找一下

sde7w9xzo 01/28 19:49如果你的程式估價遠大於市價,那你會大量買入嗎

totqoq 01/28 21:02大大必推

XDDDpupu556601/28 22:59推個

billiechick 01/28 23:44

noreasonkon 01/29 00:26push op很有意思

fkfcu 01/29 11:18

mixegg321 01/29 11:43

wssw123 01/29 21:17

Petrovsky 02/02 16:03推 z大真是神