因爲 覺得 如果金融市場開放,之後總需要一些金融知識,更好得去個人理財,所以 找了點資料 自學了 股票期權。
最近 沉迷股市 學習期權,所以 學了半斤八兩的我 來寫寫 關於 股票期權 的介紹手冊, 幫助 像我一樣的小白 從 編程 與 數學的角度 瞭解期權。若有哪裏不對,歡迎大佬在評論區留言。
這裏就不寫Python 的繪圖代碼了,詳情請看專欄
股票期權 小白手冊
基本概念
什麼是期權?
- 期 -> 未來,權 -> 權利
- 期權 顧名思義 就是 追求 未來的權利
- 2015年 2月 9日,股票期權(option)入駐了我國證券市場。在中國有兩種期權 50ETF 和 300 ETF。
- 期權也沒有那麼的複雜,和買保險差不多是一個意思。
- 例:張三 買了輛新車,並買入了一份一個月的保險(一個月的期權),如果 他的車在這個月內沒有出問題,那麼他就損失了這一部分保險費,如果這個月 車出了大毛病,那麼他就有權利 去保險公司 所取賠償(在期權內就是有權 不損失保險以外的金額)。
- 在期權裏 期權費(保費)是不退的。
認購期權
- 又稱 看漲期權
- 認購期權(call option),就是上面舉的例子,購買認購期權就是 擁有 未來買入某個東西的權利。如果 這個東西在未來 價格 比你訂的價格低,那麼你就有權利不購買它,你就只損失這一筆 定金。
- 關鍵字:鎖定 買入價
認沽期權
- 又稱 看跌期權
- 認沽期權(put option),和認購相反,就是 在未來擁有賣出的權利。
- 關鍵字:鎖定 賣出價
四種期權類型收益簡單線性圖
買入看漲線性圖(多頭認購)
- 設定 我們 買入 期權價 500元的認購期權,定金100元。(支付100元 約定 一個月後 以500 元 價格 購買它)
- 一個月後 它的價格 變爲 X。(若 X爲 600,那麼我不賺錢 ,若700 我賺一百 , 若 400 我不履行合約 虧定金100 )。
- 設定 因變量 Y 爲 賺的錢, 就可以 畫出:
買入看跌線性圖(多頭認沽)
- 設定 我們 買入 期權價 500元的認沽期權(就是覺得一個月後 會跌),定金100元。(支付100元 約定 一個月後 以500 元 價格 賣出它)
- 一個月後 它的價格 變爲 X。(若 X爲 600,那麼我不履行合約虧一百 ,若700 我不履行合約還虧一百 , 若 400 我履行合約 但不賺錢 )。
- 設定 因變量 Y 爲 賺的錢, 就可以 畫出:
- 那麼 有了買入 那麼 就有賣出 所以 我們 可以由買入 期權 變成賣出期權。
- 也就是 把 買入圖 按x軸 倒一下 畫出空頭圖
賣出看漲線性圖(空頭認購)
- 設定 我們 賣出 期權價 500元的認購期權(就是覺得一個月後 不會漲),收入定金100元。(收入100元 約定 一個月後 以500 元 價格 賣出它),由於賣方沒有權利毀約,所以一個月後必須賣出。
- 一個月後 它的價格 變爲 X。
- 設定 因變量 Y 爲 賺的錢, 就可以 畫出:
賣出看跌線性圖(多頭認沽)
- 設定 我們 賣出 期權價 500元的認沽期權(就是覺得一個月後 不會跌),收入定金100元。(收入100元 約定 一個月後 以500 元 價格 買入它),由於賣方沒有權利毀約,所以一個月後必須賣出。
- 一個月後 它的價格 變爲 X。
- 設定 因變量 Y 爲 賺的錢, 就可以 畫出:
期權線性圖
- 我們學會了 四種期權的簡單構成 那麼就可以畫出所有的圖 進行對比。
- 紅色 爲認購,綠色 爲認沽
- 實線 爲買入,虛線 爲賣出
-
在 圖中 我們可以看到 這屬於 零和博弈,有買入 那麼 就有買出。在不考慮 稅等因素情況下,買入的收益 就是賣出的虧損。
-
所以 期權是一種 即使 市場處於波動情況下 投資方 依然可以盈利的 金融產品。
-
補充說明(歐式期權 與 美式期權):
- 在全球 有兩種 期權 (或三種)
- 歐式期權:一種買方只能到期日當天行使權利 (中國使用的類型)
- 美式期權:一種買方可以在交易期間任何時間都可以行使權利
- (第三種):在到期前指定一段時間可以行使權利
-
您 看到這 基本上了解了 期權的最基本的原理,現實交易肯定不可能這麼的簡單,那麼接下來就 再 聊聊 現實中的 期權的時間價值 和 內在價值吧。
合約要素
實值,虛值與平值
- 實值,虛值與平值 這三要素 理解起來很是簡單:
- 實值:如果我現在行使權利 那我就賺了
- 虛值:如果我現在行使權利 那我就虧了 所以我不會行使權利
- 平值:如果我現在行使權利 不賺也不虧
- 我們用實例 來解釋一下(我用的是 tushare,這是我的推薦碼https://tushare.pro/register?reg=361123):
import pandas as pd
import tushare as tus
pro = tus.pro_api()
# 獲取 期權合約信息
opt_name = pro.opt_basic(exchange='SSE', fields='ts_code,name,exercise_type,list_date,delist_date')
# 選取 當月的合約
opt_name.query('list_date > "20200401" and delist_date < "20200529"')
ts_code | name | exercise_type | list_date | delist_date | |
---|---|---|---|---|---|
925 | 10002475.SH | 華夏上證50ETF期權2005認購3.00 | 歐式 | 20200420 | 20200527 |
926 | 10002476.SH | 華夏上證50ETF期權2005認沽3.00 | 歐式 | 20200420 | 20200527 |
1019 | 10002471.SH | 華夏上證50ETF期權2005認購2.95 | 歐式 | 20200408 | 20200527 |
1020 | 10002472.SH | 華夏上證50ETF期權2005認沽2.95 | 歐式 | 20200408 | 20200527 |
1885 | 10002469.SH | 華夏上證50ETF期權2005認購2.45 | 歐式 | 20200402 | 20200527 |
1886 | 10002470.SH | 華夏上證50ETF期權2005認沽2.45 | 歐式 | 20200402 | 20200527 |
2314 | 10002473.SH | 華泰柏瑞滬深300ETF期權2005認購4.20 | 歐式 | 20200408 | 20200527 |
2315 | 10002474.SH | 華泰柏瑞滬深300ETF期權2005認沽4.20 | 歐式 | 20200408 | 20200527 |
- 介紹一下 上表信息。
- 50 ETF 和 300 ETF 是目前 中國唯二 的 兩個 在證券交易所可交易的期權。
10002475.SH
爲 在 tushare 的編號華夏上證50ETF期權2005認購2.95
的意思是 投資者有權利以2.95元每份 買入 10000份 在2020年05月的 50ETF合約。也就是預期 在 5月 價格 會比 2.95元 高。- 2020年4月17日 收盤價爲 2.793 元。當天的價格如圖:
- 若我們 在 2020年4月17日 以 0.0150元每份 買入
華夏上證50ETF期權2005認購2.95
, 那麼這時候 收盤價 對於行權價 2.95元 就爲虛值,就是說 我現在就行使權利不合算,會虧本。 - 若我們 在 2020年4月17日 以 0.1978元 買入
華夏上證50ETF期權2005認沽2.95
, 那麼這時候 收盤價 對於行權價 2.95 就爲實值,就是說 我現在就行使權利 會賺, 但是 我們還要考慮到買入的成本。
內在價值與時間價值
-
我們通過上面的例子 可以算出 若 0.1978元 買入 2.95元的5月期貨,那麼對於 4月17日那天 收盤價2.793元 就直接行使權利的話 它的 內在價值爲 元。但是我們 又以 0.1978元購入,所以可以得出 它的時間價值爲 元。
-
在其他因素不變的話,距離到期時間越短,它的時間價值就越低。呈拋物線加速衰減。
-
接下來 看一下 認購期權 與 認沽期權 在 2020年04月的數據 (今日爲4月19日 週日)
call295 = pro.opt_daily(ts_code='10002471.SH', start_date='20200408')
call295
ts_code | trade_date | exchange | pre_settle | pre_close | open | high | low | close | settle | vol | amount | oi | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 10002471.SH | 20200417 | SSE | 0.0104 | 0.0104 | 0.0116 | 0.0225 | 0.0116 | 0.0150 | 0.0150 | 3.8711 | 6559168.0 | 51792.0 |
1 | 10002471.SH | 20200416 | SSE | 0.0111 | 0.0111 | 0.0105 | 0.0117 | 0.0091 | 0.0104 | 0.0104 | 1.4148 | 1466280.0 | 39377.0 |
2 | 10002471.SH | 20200415 | SSE | 0.0121 | 0.0121 | 0.0120 | 0.0170 | 0.0107 | 0.0111 | 0.0111 | 1.6649 | 2153384.0 | 34645.0 |
3 | 10002471.SH | 20200414 | SSE | 0.0094 | 0.0094 | 0.0101 | 0.0123 | 0.0081 | 0.0121 | 0.0121 | 1.6154 | 1615393.0 | 28321.0 |
4 | 10002471.SH | 20200413 | SSE | 0.0160 | 0.0160 | 0.0160 | 0.0160 | 0.0089 | 0.0094 | 0.0094 | 1.6560 | 1915005.0 | 23352.0 |
5 | 10002471.SH | 20200410 | SSE | 0.0195 | 0.0195 | 0.0190 | 0.0216 | 0.0158 | 0.0160 | 0.0160 | 1.3566 | 2392633.0 | 17205.0 |
6 | 10002471.SH | 20200409 | SSE | 0.0206 | 0.0206 | 0.0223 | 0.0228 | 0.0183 | 0.0195 | 0.0195 | 1.3723 | 2803389.0 | 12130.0 |
7 | 10002471.SH | 20200408 | SSE | 0.0278 | 0.0278 | 0.0246 | 0.0266 | 0.0206 | 0.0206 | 0.0206 | 0.9021 | 2119503.0 | 5423.0 |
put295 = pro.opt_daily(ts_code='10002472.SH', start_date='20200408')
put295
ts_code | trade_date | exchange | pre_settle | pre_close | open | high | low | close | settle | vol | amount | oi | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 10002472.SH | 20200417 | SSE | 0.2250 | 0.2250 | 0.2079 | 0.2079 | 0.1810 | 0.1978 | 0.1978 | 0.4036 | 7704138.0 | 7258.0 |
1 | 10002472.SH | 20200416 | SSE | 0.2320 | 0.2320 | 0.2396 | 0.2399 | 0.2200 | 0.2250 | 0.2250 | 0.2473 | 5640617.0 | 6228.0 |
2 | 10002472.SH | 20200415 | SSE | 0.2175 | 0.2173 | 0.2185 | 0.2320 | 0.2118 | 0.2320 | 0.2320 | 0.3116 | 6925738.0 | 5288.0 |
3 | 10002472.SH | 20200414 | SSE | 0.2482 | 0.2482 | 0.2382 | 0.2460 | 0.2173 | 0.2173 | 0.2175 | 0.1450 | 3281409.0 | 3741.0 |
4 | 10002472.SH | 20200413 | SSE | 0.2421 | 0.2407 | 0.2475 | 0.2529 | 0.2396 | 0.2482 | 0.2482 | 0.1281 | 3179785.0 | 2868.0 |
5 | 10002472.SH | 20200410 | SSE | 0.2419 | 0.2414 | 0.2415 | 0.2483 | 0.2135 | 0.2407 | 0.2421 | 0.1260 | 2941148.0 | 1855.0 |
6 | 10002472.SH | 20200409 | SSE | 0.2496 | 0.2496 | 0.2421 | 0.2437 | 0.2345 | 0.2414 | 0.2419 | 0.0572 | 1370615.0 | 1278.0 |
7 | 10002472.SH | 20200408 | SSE | 0.2433 | 0.2433 | 0.2481 | 0.2569 | 0.2406 | 0.2496 | 0.2496 | 0.1524 | 3806835.0 | 1044.0 |
- 可以看到 由於認購期權 爲虛值 購入的價格很低。這是因爲 購買 虛值的期權 就像賭博,以小博大。例如,我在 04月17日時 購買了 一億份
華夏上證50ETF期權2005認購2.95
花費 150萬元 定金。若在5月27日時,價格漲到了3.05元 每份,那麼我就相當於 賺了一千萬元。若是沒有比 2.95元高,那麼我就損失 150萬。在虛值交易中,這和槓桿類似。
期權的定義
-
上篇博客介紹了基本的概念。這次就來更深入的理解。
-
先回顧一下各個術語的定義。
-
權利的買方:期權多頭
-
權利的賣方:期權空頭
-
權利是未來買資產:認購期權,看漲期權
-
權利是未來賣資產:認沽期權,看跌期權
-
標的資產:買的是什麼資產 和 多少數量
-
行權價:有權利買賣的價格
-
到期日:合約未來到期的日期
對比 期權多頭與空頭
對比 | 期權多頭 | 期權空頭 |
---|---|---|
義務 | 支付期權費 | 配合多頭行權 |
權利 | 決定是否行權 | 收取期權費 |
最大收益 | 看漲:理論無線 看跌:行權價-期權費 |
期權費 |
最大虧損 | 期權費(100%) | 看漲:理論無線 看跌:行權價-期權費 |
保證金 | 0 | 初始保證金與追加保證金 |
對比 期權與期貨
-
期貨 (Futures)
-
對比 期權與期貨多頭
-
由此可以看出,買入期權 主要是買入它的波動率,只要波動率越大,那麼就越容易賺錢。而期貨不同,它沒有對波動有特別大的偏好,波動越大,代表風險越大。
-
對比 期權與期貨空頭
- 在空頭這張圖 更可以直觀看出,期貨沒有對波動有傾向性偏好。但做期權空頭,說明 投資方 認爲 波動趨近於平穩。
對比 | 期權(Options) | 期貨(Future) |
---|---|---|
合約性質 | 賣方必須履行義務 | 買賣雙方都必須履行合約義務域責任 |
多頭最大收益 | 無線 或 執行價-期權價 |
無線 |
多頭最大損失 | 只限於期權費 | 約定價格 |
空頭最大收益 | 只限於期權費 | 約定價格 |
空頭最大損失 | 無線 或 執行價-期權價 |
無線 |
繳納保證金 | 賣方 | 雙方 |
影響因素 | 漲跌方向、波動率 | 漲跌方向 |
時間損耗 | 有 | 無 |
保證金
-
多頭無需繳納保證金
-
空頭看漲保證金計算(兩者取最大):
-
空頭看跌保證金計算(兩者取最大):
-
例:
- 賣空一手當日結算價爲 40點,行權價爲 2200點的 一個月期 看漲期權,滬深300指數收盤價爲 2150點: 最終繳納的保證金爲 20500元。
- 賣空一手當日結算價爲 72點,行權價爲 2200點的 一個月期 看跌期權,滬深300指數收盤價爲 2150點: 最終繳納的保證金爲 28700元
歐式看漲期權價格曲線
- 運用 Black-Scholes 公式 繪製近似曲線
- 看漲或看跌(c or p)
- 標的資產現價(S0)
- 期權執行價格(K)
- 期權到期時間(t)
- 適用的無風險利率(rf)
- 適用的波動率(sigma)
- 股利信息(本例中使用連續股利率dv)
歐式期權價格曲線
歐式期權看跌價格曲線
- 從上面兩圖中可以看到,時間價值越接近 平值 它的價值越大。越往兩邊 它的價值自然減少。當然在其他因素不變的話,距離到期時間越短,它的時間價值就越低。呈拋物線加速衰減。
期權策略
單期權策略
-
單期權策略就是單買一種期權。
-
看空
- 預期大跌 買看跌
- 預期不漲 賣看漲
-
看多
- 預期大漲 買看漲
- 預期不跌 賣看跌
看空 | 看多 | |
---|---|---|
預期大跌 買看跌 | 預期大漲 買看漲 | 波動率 |
上升 | ||
預期不漲 賣看漲 | 預期不跌 賣看跌 | 波動率 |
下降 |
風險收益
期權多頭 風險收益
- 損失有限 收益理論無限 現實概率低
在何時的概率 | 盈利 | 虧損 |
---|---|---|
合理定價 | 低 | 高 |
期權高估 | 更低 | 更高 |
虛值期權 | 極低 | 極高 |
虛值期權+期權高估 | 極微小 | 極巨大 |
- 期權多頭需要注意的是
- 最大虧損爲 100%
- 波動率下降時可能導致虧損
- 天然存在 時間價值 time decay
- 行權價的選擇
期權空頭 風險收益
-
損失理論無限 收益有限 現實概率高
-
在合理定價時 大概率盈利 小概率虧損
-
需要保證金約束
-
儘管如此 有小概率損失巨大
-
期權空頭需要注意的是:
- 波動率上升可能導致虧損
- time decay 對空頭有利
- 行權價的選擇
-
認購多頭合理定價
- 認購多頭期權高估
- 認購多頭虛值期權
跨式策略
底部跨式
-
同時買入 看漲看跌期權
-
買入相同份額的 看漲看跌期權
-
虧損:期權費
-
盈利:
-
特徵:
- 市場方向中性,波動大時獲利
- 收益無限而風險有限
-
適用情形:
- 預期市場波動大
- 標的資產價格可能出現大的波動
- 預期有重大消息公佈
- 暴跌或暴漲
-
策略變換:
- 頂部跨式策略
- 行權價
- 數量匹配
-
買入不同份額的 看漲看跌期權
頂部跨式策略
- 同時賣出看漲看跌期權
勒式策略
- 因爲跨式 行權價 成本偏高, 所以是對行權價偏高的一種調整
- 買入 兩邊 行權價 偏低的兩個 看漲看跌期權。
- 虧損:期權費
- 盈利:
- 特徵與適用情形:
- 與跨式相似
- 與跨式相比
- 初始成本下降,回報率上升
- 盈虧平衡點區間擴大
牛市價差組合
看漲 牛市價差組合
- 賣出高價看漲 買入低價看漲
- 策略特徵
- 標的上漲時獲利,下跌時虧損
- 風險收益均有限
- 與單買看漲期權相比
- 初期成本下降,最大虧損下降
- 溫和上漲情況下:回報率相對較高
- 但收益空間有限
- 適用情形:預期標的資產價格溫和上漲
- 當期權定價不合理時,會出現上圖虛線的套利機會
看跌牛市價差組合
- 買入低價看跌 賣出高價看跌
- 適用情形:預期標的資產價格溫和上漲
- 與看漲牛市價差相比
- 看漲:初期淨支出,期末現金流回報
- 看跌:初期淨收入,期末現金流回報
- 與單賣看跌相比
- 降低風險 也降低收入
熊市價差組合
看跌熊市價差組合
- 買入高價看跌 賣出低價看跌
- 策略特徵
- 標的下跌時獲利,上漲時虧損
- 風險收益均有限
- 與單買看跌期權相比
- 初期成本下降,最大虧損下降
- 溫和下跌情況下:回報率相對較高
- 但收益空間有限
- 適用情形:預期標的資產價格溫和下跌
- 當期權定價不合理時,會出現上圖虛線的套利機會
看漲熊市價差組合
- 買入高價看漲 賣出低價看漲
- 適用情形:預期標的資產價格溫和上漲
- 與看跌熊市價差相比
- 看跌:初期淨支出,期末現金流回報
- 看漲:初期淨收入,期末現金流回報
- 與單賣看漲相比
- 降低風險 也降低收入
蝶式組合
正向蝶式價差
- 買對稱高低行權價,賣出雙份中行權價
- 策略特徵
- 市場低波動時高回報率
- 風險收益均有限
- 適用情形:預期市場方向中性、低波動率
- 策略變化
- 看跌期權構造 理論上應相同
- 反向蝶式
- 行權價
- 套利
反向蝶式策略
- 賣對稱高低行權價,買雙份中行權價
- 策略特徵
- 市場高波動時高回報率
- 風險收益均有限
- 適用情形:預期市場高波動率
PCP
PCP 平價原理
- Put-Call Parity(PCP)
- 在歐式期權 標的資產不付紅利的情況下
c
看漲期權
p
看跌期權
S
標的資產現價
X
現金
r
無風險利率
T
到期時刻
t
當前時刻
PCP 現貨
-
組合
- 看漲期權 + 現金(行權價的無風險貼現值 )
- 看跌期權 + 標的資產
-
當到期時刻 T 時:
- 當: 組合1價值 組合2價值
- 當: 組合1價值 組合2價值
- 組合1
==
組合2
-
在無套利的情況下 當前t時刻的兩個組合價值也應該相等
- 組合1
==
組合2
正向套利操作 (Forward)
- 賣出看漲期權(),買入看跌期權和股票(),借入所需資金(),最終需還 終值
- 到期時,無論股指高於或低於行權價 ,投資者均以 元賣出手中股票,獲得 ,與手中股票多頭抵消,最終獲得
- 獲利:
- 若扣除 稅費等其他因素 仍然賺錢 那麼 這交易策略現實可行
反向套利操作 (Reversal)
- 買入看漲期權(),賣出看跌期權和股票(),貸出資金(),最終收入 終值
- 到期時,無論股指高於或低於行權價 ,投資者均以 元買入期權股票,獲得 ,與手中股票空頭抵消,最終結果
- 獲利:
- 若扣除 稅費等其他因素 仍然賺錢 那麼 這交易策略現實可行
PCP 期貨套利
F
期貨價格
- PCP 平價組合
- 期貨 交易成本較低 流動性較好
策略構造
保護性看跌策略
- 情形:假如投資者 買入了一份股票 又擔心它會下跌
- 股票多頭 + 虛值或平價看跌期權多頭
- 用 PCP 平價解釋:
- 買入股票 買看跌期權 = 看漲多頭
- 所以構造出了看漲多頭股票
- 策略特徵
- 收益無限 風險有限
- 相對僅持有現貨
- 保留上升空間,保護下跌風險
- 支付成本:盈虧平衡點提高,上漲時相對盈利少
- 適用情形:保守牛市預期
- 用看跌期權多頭保護股票價格下跌風險
備兌看漲策略
-
持有現貨 賣出平價或虛值看漲期權
-
股票 + 平價看漲期權空頭
- 股票 + 虛值看漲期權空頭
-
策略特徵
- 收益有限而風險較大
- 相對僅有現貨
- 下跌風險降低:增加收入;盈虧平衡點下降
- 上升空間受限
-
適用情形
- 增加收入(因各種原因無法出售)
- 約束盈利離場價位
期權風險分析
-
期權價格同時受到 標的價格方向 和 波動率 的影響
-
期權空頭:
- 最大收益爲期權費收入:大概率
- 最大虧損無限或較大:小概率
- 但小概率事件一旦發生,可能虧損嚴重
- 保證金制度的約束(保證金不足需要追加)
-
期權多頭:
- 盈利時彙報率較高,且最大虧損爲期權費收入
- 虧損是大概率事件,且可能虧損 100%
- 無保證金制度約束
- 謹防虛值期權爆炒風險:期權與權證不同
Black-Scholes-Merton 公式
- 歐式定價基準模型
- 無紅利歐式期權定價公式爲例:
c
看漲期權價格
p
看跌期權價格
S
標的資產現價
X
行權價
r
無風險利率
T
到期時刻
t
當前時刻
𝜎
波動率
N()
爲標準正態分佈累積分佈函數
- 用 Python 把這公式寫出來:
import numpy as np
from scipy.stats import norm
class BlackScholes:
def __init__(self, S0, X, r, T, sigma=0.3,t=0):
self.S0 = S0
self.X = X
self.r = r
self.sigma = sigma
self.dT = T-t
def d1(self):
return(np.log(self.S0/self.X)+(self.r+self.sigma**2/2)*(self.dT))/(self.sigma*np.sqrt(self.dT))
def d2(self):
return self.d1()-self.sigma*np.sqrt(self.dT)
def calc(self, call_put):
if call_put in {'c','C','call','Call','CALL'}:
return self.S0 * norm.cdf(self.d1())- \
self.X*np.exp(-self.r*self.dT)*norm.cdf(self.d2())
elif call_put in {'p','P','put','Put','PUT'}:
return self.X*np.exp(-self.r*self.dT)*norm.cdf(-self.d2())- \
self.S0 * norm.cdf(-self.d1())
raise NameError('Must be call or Put!',call_put)
def imp_vol(self,call_put,mktprice):
price = 0
sigma = 0.3
up, low = 1,0
loop = 0
while abs(price-mktprice)>1e-6 and loop<50:
price = BlackScholes(self.S0,self.X,self.r,self.dT,sigma).calc(call_put)
if (price-mktprice)>0:
up = sigma
sigma = (sigma+low)/2
else:
low = sigma
sigma = (sigma+up)/2
loop+=1
return sigma
- 和市場定價不符合因爲它假設
- 市場可複製和無套利
- 可賣空、無稅費、連續交易、證券可分
- 無套利
- 標的資產服從連續的幾何布朗運動
- 標的無跳動
- 波動率爲常數
- 無風險利率爲常數
- 市場可複製和無套利
B-S-M 運用
- 計算隱含的波動率
- 估計希臘字母(偏導)
- 定價基準
隱含波動率
波動率
-
波動率
- 波動率爲期權價格影響的一個重要因素
- 沒有波動,期權就沒有存在的價值
- 不可觀測變量
-
在統計中的對應概念:價格(對數)收益率的年化標準差
天數
第n天的收益率
平均收益率
一年中國交易天數
波動率分類
-
歷史波動率 Historical volatility & 未來波動率 Future Volatility
-
歷史波動率法:
- 基於標的資產已發生的歷史價格數據估計波動率:
- 標準差
- 極差波動率
- 已實現波動率 Realized Volatility (RV)
- 根據歷史波動率預測未來的波動率:
- 預測值 = 歷史值
- GARCH, EWMA
- HAR-RV
- 基於標的資產已發生的歷史價格數據估計波動率:
-
隱含波動率法:
- 從期權價格倒推市場預測未來波動率
- Black-Scholes 隱含波動率
- 無模型隱含波動率 (如 VIX)
- 從期權價格倒推市場預測未來波動率
隱含波動率
-
Implied Volatility
-
隱含波動率偏高 期權價格偏高
-
隱含波動率偏低 期權價格偏低
實例
- 來看一下 具體實例:
-
導入 需要的庫(還是實用 tushare 的數據)
-
以上證 50 ETF 爲例
- 獲取上證 50 ETF 數據
opt_name = pro.opt_basic(exchange='SSE', fields='ts_code,name,exercise_type,list_date,delist_date')
opt_name.head()
ts_code | name | exercise_type | list_date | delist_date | |
---|---|---|---|---|---|
0 | 10000579.SH | 華夏上證50ETF期權1604認購2.15 | 歐式 | 20160225 | 20160427 |
1 | 10000108.SH | 華夏上證50ETF期權1505認購2.65 | 歐式 | 20150326 | 20150527 |
2 | 10000111.SH | 華夏上證50ETF期權1505認沽2.55 | 歐式 | 20150326 | 20150527 |
3 | 10001067.SH | 華夏上證50ETF期權1712認購3.24 | 歐式 | 20171123 | 20171227 |
4 | 10001068.SH | 華夏上證50ETF期權1712認沽3.24 | 歐式 | 20171123 | 20171227 |
- 提取 需要的期權名 到期日期 價格 認購標籤等
- 當然 Tushare 本身帶有 這一系列簡單的提取方式,在上式 修改 fields 所需參數 即可。
# 把 name 裏的數據提取出來
opt_name['new_name']= opt_name['name'].str.extract(r'([\u4e00-\u9fa5]+)') # 提取期權名
opt_name['delist'] = opt_name['name'].str.extract(r'(期權)(\d+)')[1].astype(int) # 期權到期日期
opt_name['type']= opt_name['name'].str.extract(r'(\d+)') # 提取期權類型 300 或 50
opt_name['callput']= opt_name['name'].str.extract(r'(\w\w)(\d+\.\d+)')[0]# 認購或認沽
opt_name['price'] = opt_name['name'].str.extract(r'(\d+\.\d+)').astype(float) # 價格
opt_name.drop(columns=['name'],inplace=True)
opt_name['callput'].replace({'認購':'Call', '認沽':'Put'},inplace=True)
opt_name.head()
ts_code | exercise_type | list_date | delist_date | new_name | delist | type | callput | price | |
---|---|---|---|---|---|---|---|---|---|
0 | 10000579.SH | 歐式 | 20160225 | 20160427 | 華夏上證 | 1604 | 50 | Call | 2.15 |
1 | 10000108.SH | 歐式 | 20150326 | 20150527 | 華夏上證 | 1505 | 50 | Call | 2.65 |
2 | 10000111.SH | 歐式 | 20150326 | 20150527 | 華夏上證 | 1505 | 50 | Put | 2.55 |
3 | 10001067.SH | 歐式 | 20171123 | 20171227 | 華夏上證 | 1712 | 50 | Call | 3.24 |
4 | 10001068.SH | 歐式 | 20171123 | 20171227 | 華夏上證 | 1712 | 50 | Put | 3.24 |
- 以 昨天 2020年 4 月 29 日數據爲例
- 提取 2020年 4 月 29 日期權交易數據
# 找到 4月 29日的期權交易數據
DATE = '20200429'
opt_date = pro.opt_daily(trade_date=DATE,exchange='SSE')
- 合併交易名與交易具體數據
new_date = pd.merge(opt_name,opt_date,on=['ts_code']) # 正在交易的名字和4月29日的數據交集
- 提取 上證2020年06月到期的 50ETF 認購 4月29日 數據
- 並按行權價 排序
call_date_2006 = new_date.query('delist == 2006 and type == "50" and callput == "Call"').sort_values(by='price')
call_date_2006.head(5)
ts_code | exercise_type | list_date | delist_date | new_name | delist | type | callput | price | trade_date | ... | pre_settle | pre_close | open | high | low | close | settle | vol | amount | oi | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
20 | 10002421.SH | 歐式 | 20200320 | 20200624 | 華夏上證 | 2006 | 50 | Call | 2.35 | 20200429 | ... | 0.46 | 0.4327 | 0.4300 | 0.4542 | 0.4300 | 0.4498 | 0.479 | 0.0221 | 985895.0 | 2353.0 |
46 | 10002401.SH | 歐式 | 20200319 | 20200624 | 華夏上證 | 2006 | 50 | Call | 2.40 | 20200429 | ... | 0.41 | 0.3842 | 0.3816 | 0.4050 | 0.3808 | 0.3950 | 0.429 | 0.0043 | 170508.0 | 2079.0 |
47 | 10002402.SH | 歐式 | 20200319 | 20200624 | 華夏上證 | 2006 | 50 | Call | 2.45 | 20200429 | ... | 0.36 | 0.3373 | 0.3362 | 0.3576 | 0.3362 | 0.3549 | 0.379 | 0.0104 | 364896.0 | 1075.0 |
96 | 10002291.SH | 歐式 | 20200204 | 20200624 | 華夏上證 | 2006 | 50 | Call | 2.50 | 20200429 | ... | 0.31 | 0.2909 | 0.2889 | 0.3130 | 0.2864 | 0.3069 | 0.329 | 0.0162 | 493784.0 | 2725.0 |
97 | 10002292.SH | 歐式 | 20200204 | 20200624 | 華夏上證 | 2006 | 50 | Call | 2.55 | 20200429 | ... | 0.26 | 0.2458 | 0.2430 | 0.2673 | 0.2430 | 0.2620 | 0.279 | 0.0127 | 328143.0 | 2058.0 |
5 rows × 21 columns
- 爲了解釋 標的資產現價 與 行權價的關係,繪製圖表
- 當天股票收盤價爲 2.829 元
- 可見 越接近 標的資產現價 它的時間價值或者說 期權價 越高
-
具體行權價與期權價到期收益情況繪圖
- 從之前所學,可知 虛值期權 它的風險是相當高,同時當你買入實值越大的期權時,隨着期權費越高,它和普通股票價格直線越接近。
-
接下來 我們 來看看之前構造的 BlackScholes 定價系統
- 輸入當天價格
current
、行權價call_date_2006['price']
、無風險利率5%
、到期時間40/250=0.16
年、默認波動率30%
- 對比 BS 期權價 與 實際 期權價
- 用 BS 求它的隱含波動率
- 輸入當天價格
繪製期權隱含波動率
- 結合上面的分步繪圖 我們可以繪製出 並對比 當前所有可購買 50EFT 期權的隱含波動率
opt_name = pro.opt_basic(exchange='SSE')
opt_name['type']= opt_name['name'].str.extract(r'(\d+)') # 提取期權類型 300 或 50
opt_name.head(2) # 預覽
ts_code | exchange | name | per_unit | opt_code | opt_type | call_put | exercise_type | exercise_price | s_month | maturity_date | list_price | list_date | delist_date | last_edate | last_ddate | quote_unit | min_price_chg | type | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 10000579.SH | SSE | 華夏上證50ETF期權1604認購2.15 | 10000.0 | OP510050.SH | ETF期權 | C | 歐式 | 2.15 | 201604 | 20160427 | 0.0412 | 20160225 | 20160427 | 20160427 | 20160428 | 人民幣元 | 0.0001 | 50 |
1 | 10000108.SH | SSE | 華夏上證50ETF期權1505認購2.65 | 10000.0 | OP510050.SH | ETF期權 | C | 歐式 | 2.65 | 201505 | 20150527 | 0.1006 | 20150326 | 20150527 | 20150527 | 20150528 | 人民幣元 | 0.0001 | 50 |
# 找到 4月 29日的期權交易數據
DATE = '20200429'
opt_date = pro.opt_daily(trade_date=DATE,exchange='SSE')
new_date = pd.merge(opt_name,opt_date,on=['ts_code'])
- 看跌期權波動率 普遍比 看漲波動率高,說明投資者比較偏愛於購買看跌期權。
希臘字母
-
運用希臘字母 是對期權 比較靜態的敏感分析
-
含義:其他條件不變,(某因素)變化一單位,期權價格大概變化多少?
- 標的資產價格: Delta
- 時間: Theta
- 隱含波動率: Vega T
- 利率: Rho
-
Gamma : 標的價格變動1單位時,Delta 變多少?
波動率 Sigma
- 詳情 請看 隱含波動率
Delta — 標的資產價格
-
標的資產價格變化一單位,期權價格大概變化多少?
-
例:
- Delta = 0.3141 意味着
- 如果指數上漲 10 點,期權價格大概上漲 3.141點
-
-
期權價格曲線切線斜率(動態時變)
-
(無紅利歐式期權) Delta 的4個特徵:
特徵
- 特徵 I
標的價格 | 看漲多頭 | 看漲空頭 | 看跌多頭 | 看跌空頭 |
---|---|---|---|---|
區間 | 符號相反 | 符號相反 | ||
虛值 | ||||
平價 | ||||
實值 | ||||
圖像 |
-
特徵 II
-
PCP 平價原理
-
如圖,可以看出來 他們的Delta 相差1
-
特徵 III
-
快到期時,實值、虛值、和平值期權的Delta 差異比較大
- 剩餘期限比較大的話 時間價值比較大 它的期權價格曲線相對平滑,所以它的切線斜率比較小
看漲 | 看跌 |
---|---|
-
特徵 IV
-
波動率較低時,實值、虛值、和平值期權的Delta 差異比較大
- 原理與特徵 III 相同
看漲 | 看跌 |
---|---|
證券組合的 Delta 值
頭寸 | Delta | 例子(N爲數量) |
---|---|---|
現貨多頭 | 1 | 4單位: |
現貨空頭 | -1 | 3單位: |
期貨多頭 | 1 | 2單位: |
現貨多頭 | -1 | 5單位: |
歐式看漲期權多頭 (無紅利) |
5單位多頭,每單位Delta爲0.5: | |
歐式看漲期權空頭 (無紅利) |
4單位空頭,每單位Delta爲-0.4: | |
歐式看跌期權多頭 (無紅利) |
3單位多頭,每單位Delta爲-0.5: | |
歐式看跌期權空頭 (無紅利) |
2單位空頭,每單位Delta爲0.6: | |
投資組合 |
Delta 中性
- 在投資組合中 讓Delta 爲0 稱 Delta 中性
- 意味着 投資組合對現貨價格變動的一階敏感性爲 0
- 實現:運用同一標的資產的現貨,期貨和期權等進行相互套期保值,使證券組合的值等於0
- 特點:有期權的情況下是動態的,需要不懂調整頭寸以使組合重新處於中性狀態,這種調整稱爲再均衡(Rebalancing)。
Gamma
-
標的價格變動1單位時,Delta 變多少?
-
例:
- Gamma = 0.0056,Delta = 0.3141 意味着
- 如果指數上漲 10 點,Delta大概上升至
- 如果指數下跌 10 點,Delta大概下降至
-
-
期權價格曲線曲度的主要部分
- (無紅利歐式期權)Gamma的4個特徵
特徵
-
特徵 I
-
期權多頭 凹曲面 Convex
- 看漲 Convex up 上凹
- 看跌 Convex down 下凹
-
期權空頭 凸曲面 Concave
- 看漲 Concave down 下凸
- 看跌 Concave up 上凸
看漲 | 看跌 | |
---|---|---|
多頭 | ||
空頭 |
-
特徵 II
-
其他條件相同的歐式期權:看漲Gamma=看跌Gamma
-
特徵 III
-
平價附近期權的Gamma值最大
-
特徵 IV
-
快到期時,實值、虛值、和平值期權的Delta 差異比較大
-
波動率較低時,實值、虛值、和平值期權的Delta 差異比較大
Gamma 關係 | 看漲 | 看跌 |
---|---|---|
期限 | ||
波動率 |
證券組合的 Gamma 值
頭寸 | Gamma | 例子(N爲數量) |
---|---|---|
現貨多頭 | 0 | 4單位: |
現貨空頭 | 0 | 3單位: |
期貨多頭 | 0 | 2單位: |
現貨多頭 | 0 | 5單位: |
歐式看漲期權多頭 (無紅利) |
5單位多頭,每單位 Gamma 爲0.005: | |
歐式看漲期權空頭 (無紅利) |
4單位空頭,每單位 Gamma 爲-0.004: | |
歐式看跌期權多頭 (無紅利) |
3單位多頭,每單位 Gamma 爲0.005: | |
歐式看跌期權空頭 (無紅利) |
2單位空頭,每單位 Gamma 爲-0.006: | |
投資組合 |
Gamma 中性
- 只有期權有 Gamma 值
- 在投資組合中 讓 爲0 稱 中性
- 中性 時爲了消除 中性的誤差,同樣也是動態的概念
- 實現:由於保持 中性只能通過期權頭寸調整獲得,實現中性的結果往往時非中性,因而常常還需要運用標的資產或期貨頭寸進行調整,才能使得證券組合同時實現 中性
Theta — 時間
-
時間變化一天,期權價格大概變化多少?
-
Time 時間
-
例:
- Theta = 1.234 意味着
- 時間每過一天,期權價格大概上漲 1.234點
-
特徵
-
特徵 I
-
期權的 通常爲負:一般來說,隨着到期日的臨近,期權的價格逐漸衰減 (time decay)
-
處於 深度實值狀態的無紅利資產歐式看跌期權和處於實值狀態的標的資產紅利很高的歐式看漲期權, 可能爲正
-
特徵 II
-
剩餘期限越短, (time decay) 速度越快, 負得越多
期權價 | Theta |
---|---|
-
特徵 III
-
與實值、虛值期權相比,平價期權Theta 負值最大
-
Theta 與標的資產
看漲 | 看跌 |
---|---|
-
特徵 IV
-
快到期時,實值、虛值和平價期權Theta 差異最大
- 越快到期 平值的敏感性越高
-
看漲Theta與期限
看漲 | 看跌 |
---|---|
- 時間推移時確定的,沒有風險可言,因此無需 Theta 中性
- Theta 值大小反映了期權購買者隨時間推移所損失的價值,因而Theta 值仍是一個重要的敏感性指標
Vega — 隱含波動率
-
隱含波動率變化一百分點,期權價格大概變化多少?
-
Volatility 隱含波動率
-
例:
- Vega = 1.878 意味着
- 每隱含波動率上升1%,期權價格大概上漲 1.878點
-
特徵
- Vega >0
- (歐式)看漲 Vega = 看跌 Vega
- 平價期權的 Vega 較大
- 剩餘期限越長,Vega 越大
- 例 同樣年化波動率 16% 的1年與2年期權 他們的波動率不一樣:一年 兩年
證券組合的 Vega 值
頭寸 | Vega |
---|---|
現貨多頭 | 0 |
現貨空頭 | 0 |
期貨多頭 | 0 |
現貨多頭 | 0 |
歐式看漲期權多頭 (無紅利) |
|
歐式看漲期權空頭 (無紅利) |
|
歐式看跌期權多頭 (無紅利) |
|
歐式看跌期權空頭 (無紅利) |
|
投資組合 |
Vega 中性
- 只有期權有 Vega 值
- 證券組合 Vega 值 爲零時 稱爲處於 Vega 中性狀態
- Vega 中性是爲了消除 隱含波動率變化 的影響,同時也是動態的概念
- 由於保持 Vega 中性 只能通過期權頭寸調整獲得,實現 Vega 中性的結果往往是 非中性 和 非中性,因而常常還需要運用標的資產、期貨頭寸、期權頭寸進行調整,才能使得組合同時實現 中性、中性和 Vega 中性
Rho — 利率
- Rate 利率
完
- 總算是在假期把它寫完了,錯誤應該還是蠻多的,歡迎在評論區留言。
- 金融類 之後有時間和興趣的話 應該還會寫聯繫 Machine Learning 做股票預測之類的文章。
- 如果有幫助的話 請給我一鍵三連 ~ ~ ~