平價(jià):從公式推導(dǎo)到Python驗(yàn)證)
1. 從零拆解PCP平價(jià)編程視角下的期權(quán)定價(jià)核心邏輯1.1 為什么一個(gè)寫(xiě)代碼的人要關(guān)心“平價(jià)關(guān)系”我最早接觸期權(quán)的時(shí)候滿(mǎn)腦子都是“波動(dòng)率”“希臘字母”“隱含分布”這些聽(tīng)起來(lái)很唬人的詞結(jié)果第一次看到PCPPut-Call Parity看漲看跌期權(quán)平價(jià)關(guān)系的公式時(shí)第一反應(yīng)是這不就是個(gè)恒等式嗎有什么好講的。后來(lái)真金白銀踩過(guò)坑才明白這個(gè)看似簡(jiǎn)單的等式其實(shí)是整個(gè)期權(quán)定價(jià)體系的“地基”——它不依賴(lài)任何復(fù)雜的隨機(jī)過(guò)程假設(shè)純粹由無(wú)套利原理推導(dǎo)出來(lái)是連接看漲期權(quán)、看跌期權(quán)、標(biāo)的資產(chǎn)和債券四條腿的橋梁。對(duì)于有編程背景但金融零基礎(chǔ)的朋友來(lái)說(shuō)PCP平價(jià)是一個(gè)絕佳的切入點(diǎn)。為什么因?yàn)樗銐蚝?jiǎn)單一個(gè)等式就能說(shuō)清楚又足夠深刻能讓你理解期權(quán)市場(chǎng)最底層的定價(jià)邏輯。更重要的是它可以直接用代碼驗(yàn)證——你不需要成為金融科班出身只要會(huì)寫(xiě)幾行Python拉一組期權(quán)鏈數(shù)據(jù)就能親手驗(yàn)證這個(gè)關(guān)系是否成立甚至從中發(fā)現(xiàn)套利機(jī)會(huì)。這篇文章我會(huì)從編程小白的視角出發(fā)把PCP平價(jià)拆解成可理解、可計(jì)算、可驗(yàn)證的模塊。你會(huì)看到這個(gè)等式到底在說(shuō)什么、它的數(shù)學(xué)推導(dǎo)為什么成立、用代碼怎么驗(yàn)證、實(shí)際市場(chǎng)中為什么會(huì)有偏差、以及一個(gè)程序員做期權(quán)分析時(shí)最容易踩的坑。全程不堆砌金融術(shù)語(yǔ)能用生活例子說(shuō)清楚的絕不用公式嚇人。1.2 PCP平價(jià)到底在講什么一個(gè)“復(fù)制”的故事先拋開(kāi)公式用最直白的話(huà)說(shuō)PCP平價(jià)講的是——買(mǎi)一張看漲期權(quán)加上賣(mài)一張看跌期權(quán)和直接買(mǎi)一份標(biāo)的資產(chǎn)加上借錢(qián)這兩件事的到期收益是一模一樣的。你可以這樣理解假設(shè)你看好某只股票有兩種方式表達(dá)這個(gè)觀點(diǎn)。第一種你買(mǎi)入看漲期權(quán)有權(quán)以行權(quán)價(jià)K買(mǎi)入同時(shí)賣(mài)出看跌期權(quán)有義務(wù)以行權(quán)價(jià)K買(mǎi)入。第二種你直接買(mǎi)入股票同時(shí)借一筆錢(qián)到期要還K。到期時(shí)無(wú)論股價(jià)怎么變這兩種組合的盈虧完全一致。既然到期收益一樣那它們現(xiàn)在的成本也必須一樣否則就存在無(wú)風(fēng)險(xiǎn)套利——這就是PCP平價(jià)的核心邏輯。用公式表達(dá)就是C - P S - K × e^(-rT)其中C是看漲期權(quán)價(jià)格P是看跌期權(quán)價(jià)格S是標(biāo)的資產(chǎn)現(xiàn)價(jià)K是行權(quán)價(jià)r是無(wú)風(fēng)險(xiǎn)利率T是到期時(shí)間。左邊是“看漲減看跌”右邊是“股票減債券”。這個(gè)等式就是PCP平價(jià)。對(duì)于程序員來(lái)說(shuō)這個(gè)公式最友好的地方在于它沒(méi)有隨機(jī)微分方程沒(méi)有伊藤引理沒(méi)有偏微分方程。它就是一個(gè)代數(shù)關(guān)系你甚至可以用Excel拉個(gè)表驗(yàn)證。但它的威力在于一旦這個(gè)等式不成立你就可以構(gòu)造一個(gè)無(wú)風(fēng)險(xiǎn)套利組合——買(mǎi)入便宜的一邊賣(mài)出貴的一邊到期穩(wěn)賺差價(jià)。這就是為什么做市商和量化交易員會(huì)死死盯著這個(gè)關(guān)系。1.3 為什么用編程來(lái)學(xué)PCP從“看懂”到“算明白”傳統(tǒng)金融教材講PCP通常是畫(huà)個(gè)收益圖推導(dǎo)一下公式然后給個(gè)例題。但作為程序員你學(xué)東西的方式不一樣——你習(xí)慣的是“跑一遍代碼看看結(jié)果”。PCP平價(jià)恰好是一個(gè)非常適合用代碼驗(yàn)證的概念因?yàn)樗婕暗臄?shù)據(jù)期權(quán)價(jià)格、行權(quán)價(jià)、利率、到期時(shí)間都可以從公開(kāi)數(shù)據(jù)源獲取計(jì)算邏輯也不復(fù)雜。用編程學(xué)PCP有三個(gè)好處。第一強(qiáng)制你理解每個(gè)參數(shù)的含義。寫(xiě)代碼的時(shí)候你不能含糊S是哪個(gè)價(jià)格、r怎么取、T怎么算都必須明確。第二可以批量驗(yàn)證。你可以拉一整條期權(quán)鏈的數(shù)據(jù)對(duì)每個(gè)行權(quán)價(jià)都算一遍PCP偏差看看哪些偏離最大。第三能直觀感受市場(chǎng)摩擦。理論上PCP應(yīng)該完美成立但實(shí)際數(shù)據(jù)一跑你會(huì)發(fā)現(xiàn)總有偏差這些偏差背后就是交易成本、流動(dòng)性、資金成本等因素在起作用。我自己的學(xué)習(xí)路徑就是先手推一遍公式然后用Python寫(xiě)一個(gè)驗(yàn)證腳本拉一組模擬數(shù)據(jù)跑通再換成真實(shí)期權(quán)鏈數(shù)據(jù)觀察偏差。這個(gè)過(guò)程比單純看書(shū)快得多而且理解更深。接下來(lái)我會(huì)把這個(gè)路徑完整拆解出來(lái)你可以直接跟著操作。2. 核心細(xì)節(jié)解析PCP公式的每個(gè)零件都不能含糊2.1 四個(gè)變量C、P、S、K到底怎么取PCP公式里只有四個(gè)價(jià)格變量和一個(gè)利率時(shí)間項(xiàng)但每一個(gè)都有講究。先說(shuō)C和P這是看漲和看跌期權(quán)的市場(chǎng)價(jià)格。這里有個(gè)關(guān)鍵點(diǎn)必須用同一到期日、同一行權(quán)價(jià)的看漲和看跌期權(quán)。你不能拿行權(quán)價(jià)100的看漲和行權(quán)價(jià)105的看跌來(lái)算那就不是PCP了。在實(shí)際數(shù)據(jù)中同一行權(quán)價(jià)的看漲和看跌期權(quán)通常都有報(bào)價(jià)但流動(dòng)性可能不同——有的行權(quán)價(jià)看漲活躍、看跌冷清這時(shí)候報(bào)價(jià)的買(mǎi)賣(mài)價(jià)差就會(huì)影響PCP的計(jì)算結(jié)果。S是標(biāo)的資產(chǎn)現(xiàn)價(jià)。對(duì)于股票期權(quán)S就是股票當(dāng)前的市場(chǎng)價(jià)格。但這里有個(gè)細(xì)節(jié)如果你用的是盤(pán)中數(shù)據(jù)S在變期權(quán)價(jià)格也在變你必須保證取的是同一時(shí)刻的報(bào)價(jià)。很多新手會(huì)犯的錯(cuò)誤是用昨天的收盤(pán)價(jià)S去配今天的期權(quán)價(jià)格那算出來(lái)的偏差完全沒(méi)有意義。對(duì)于指數(shù)期權(quán)S是指數(shù)點(diǎn)位但指數(shù)本身不可直接交易所以實(shí)際套利時(shí)需要用ETF或期貨來(lái)復(fù)制這就引入了基差問(wèn)題。K是行權(quán)價(jià)這個(gè)最明確合約里寫(xiě)死的。但要注意有些期權(quán)是美式行權(quán)可以提前行權(quán)有些是歐式行權(quán)只能到期行權(quán)。PCP平價(jià)嚴(yán)格來(lái)說(shuō)只對(duì)歐式期權(quán)成立因?yàn)槊朗狡跈?quán)的提前行權(quán)權(quán)利會(huì)破壞復(fù)制關(guān)系。不過(guò)在實(shí)際中對(duì)于不支付股息的股票美式看漲期權(quán)通常不會(huì)提前行權(quán)所以PCP近似成立但美式看跌期權(quán)有可能提前行權(quán)這時(shí)候PCP會(huì)有偏差。r是無(wú)風(fēng)險(xiǎn)利率T是到期時(shí)間以年為單位。這兩個(gè)參數(shù)雖然不直接出現(xiàn)在市場(chǎng)價(jià)格里但它們的取值直接影響K×e^(-rT)這一項(xiàng)。r通常取同期限的國(guó)債收益率或銀行間拆借利率T則是剩余天數(shù)除以365。這里有個(gè)實(shí)操細(xì)節(jié)如果剩余天數(shù)很少比如只剩3天r的微小變化對(duì)結(jié)果影響不大但如果剩余時(shí)間很長(zhǎng)比如兩年期LEAPS期權(quán)r的取值就會(huì)顯著影響PCP的計(jì)算。2.2 公式推導(dǎo)為什么“復(fù)制”能成立PCP的推導(dǎo)不需要任何概率假設(shè)純粹是現(xiàn)金流復(fù)制。我試著用最直白的方式講一遍??紤]兩個(gè)組合。組合A買(mǎi)入一份看漲期權(quán)行權(quán)價(jià)K到期日T賣(mài)出一份看跌期權(quán)同行權(quán)價(jià)、同到期日。組合B買(mǎi)入一份標(biāo)的資產(chǎn)同時(shí)借入K×e^(-rT)的現(xiàn)金到期連本帶息還K。到期時(shí)股價(jià)有兩種情況。如果股價(jià)高于K組合A中看漲期權(quán)行權(quán)你以K買(mǎi)入股票看跌期權(quán)作廢最終你持有股票價(jià)值等于股價(jià)。組合B中你本來(lái)就持有股票借款到期還K最終也持有股票價(jià)值等于股價(jià)。如果股價(jià)低于K組合A中看漲期權(quán)作廢看跌期權(quán)被行權(quán)你以K買(mǎi)入股票最終持有股票價(jià)值等于股價(jià)。組合B同樣持有股票價(jià)值等于股價(jià)。所以無(wú)論股價(jià)怎么變兩個(gè)組合到期都持有一份股票價(jià)值相同。既然到期價(jià)值相同那當(dāng)前構(gòu)建成本也必須相同否則就存在套利。組合A的當(dāng)前成本是C - P組合B的當(dāng)前成本是S - K×e^(-rT)。于是C - P S - K×e^(-rT)這就是PCP平價(jià)。這個(gè)推導(dǎo)的關(guān)鍵在于“無(wú)套利假設(shè)”——如果兩個(gè)組合到期價(jià)值一樣但當(dāng)前價(jià)格不同你就可以買(mǎi)入便宜的組合、賣(mài)出貴的組合到期無(wú)風(fēng)險(xiǎn)賺差價(jià)。在有效市場(chǎng)中這種機(jī)會(huì)會(huì)被迅速抹平所以等式成立。2.3 利率和時(shí)間的處理連續(xù)復(fù)利還是單利在PCP公式中K×e^(-rT)這一項(xiàng)用的是連續(xù)復(fù)利折現(xiàn)。為什么用連續(xù)復(fù)利因?yàn)槠跈?quán)定價(jià)理論Black-Scholes模型建立在連續(xù)時(shí)間框架下連續(xù)復(fù)利與對(duì)數(shù)正態(tài)分布假設(shè)一致。但在實(shí)際計(jì)算中如果你只是做近似驗(yàn)證用單利折現(xiàn)K/(1rT)也差不太多尤其是當(dāng)r和T都比較小的時(shí)候。我實(shí)測(cè)過(guò)當(dāng)r3%、T0.25年時(shí)連續(xù)復(fù)利折現(xiàn)因子e^(-0.03×0.25)≈0.99253單利折現(xiàn)因子1/(10.03×0.25)≈0.99256差異在小數(shù)點(diǎn)后第五位對(duì)期權(quán)價(jià)格的影響通常小于最小報(bào)價(jià)單位。但如果T很長(zhǎng)比如兩年差異就會(huì)放大到千分之一級(jí)別對(duì)于大額套利來(lái)說(shuō)就不能忽略了。對(duì)于編程實(shí)現(xiàn)我建議直接用連續(xù)復(fù)利因?yàn)檫@是行業(yè)標(biāo)準(zhǔn)而且Python的math.exp()或numpy.exp()調(diào)用起來(lái)很方便。r的取值可以用同期限國(guó)債收益率如果找不到精確匹配的用貨幣市場(chǎng)利率近似也行。T的計(jì)算要注意如果到期日是周五而今天是周一剩余日歷天數(shù)是4天但實(shí)際交易日是3天周二到周四有些交易員會(huì)用交易日/252來(lái)算T有些用日歷日/365。兩種算法在短期期權(quán)上差異不大但長(zhǎng)期期權(quán)會(huì)有明顯區(qū)別。我個(gè)人的習(xí)慣是短期用日歷日/365長(zhǎng)期用日歷日/365保持一致性。3. 實(shí)操過(guò)程用Python親手驗(yàn)證PCP平價(jià)3.1 環(huán)境準(zhǔn)備與數(shù)據(jù)獲取思路要驗(yàn)證PCP你需要一組期權(quán)鏈數(shù)據(jù)。數(shù)據(jù)來(lái)源可以有很多選擇比如從某些公開(kāi)數(shù)據(jù)接口獲取或者用券商提供的API。這里我不具體推薦某個(gè)數(shù)據(jù)源因?yàn)椴煌貐^(qū)的可用性不同你可以根據(jù)自己的情況選擇。核心要求是你需要同一到期日、同一行權(quán)價(jià)的看漲和看跌期權(quán)報(bào)價(jià)以及標(biāo)的資產(chǎn)現(xiàn)價(jià)、無(wú)風(fēng)險(xiǎn)利率和到期時(shí)間。如果你暫時(shí)拿不到真實(shí)數(shù)據(jù)也可以用模擬數(shù)據(jù)先跑通邏輯。模擬數(shù)據(jù)的構(gòu)造方法是先設(shè)定S、K、r、T和波動(dòng)率用Black-Scholes公式算出理論看漲和看跌價(jià)格然后驗(yàn)證PCP是否成立。這樣你可以先熟悉計(jì)算流程等有真實(shí)數(shù)據(jù)了再替換。Python環(huán)境方面你需要numpy做數(shù)值計(jì)算pandas做數(shù)據(jù)處理scipy做統(tǒng)計(jì)和優(yōu)化可選matplotlib做可視化可選。如果你用Jupyter Notebook會(huì)更方便逐步調(diào)試。安裝命令很簡(jiǎn)單pip install numpy pandas scipy matplotlib我建議在虛擬環(huán)境里裝避免污染全局環(huán)境。如果你用conda也可以conda create一個(gè)獨(dú)立環(huán)境。3.2 用模擬數(shù)據(jù)跑通PCP驗(yàn)證先構(gòu)造一組模擬數(shù)據(jù)。假設(shè)標(biāo)的現(xiàn)價(jià)S100行權(quán)價(jià)K100無(wú)風(fēng)險(xiǎn)利率r3%到期時(shí)間T0.5年6個(gè)月波動(dòng)率σ20%。用Black-Scholes公式算看漲和看跌價(jià)格import numpy as np from scipy.stats import norm def black_scholes(S, K, r, T, sigma, option_typecall): d1 (np.log(S/K) (r 0.5*sigma**2)*T) / (sigma*np.sqrt(T)) d2 d1 - sigma*np.sqrt(T) if option_type call: price S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2) else: price K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1) return price S 100 K 100 r 0.03 T 0.5 sigma 0.2 call_price black_scholes(S, K, r, T, sigma, call) put_price black_scholes(S, K, r, T, sigma, put) print(f看漲期權(quán)價(jià)格: {call_price:.4f}) print(f看跌期權(quán)價(jià)格: {put_price:.4f}) # 驗(yàn)證PCP left call_price - put_price right S - K * np.exp(-r*T) print(fC - P {left:.4f}) print(fS - K*e^(-rT) {right:.4f}) print(f偏差: {left - right:.6f})跑出來(lái)偏差應(yīng)該是0或極小的浮點(diǎn)誤差因?yàn)锽lack-Scholes公式本身就滿(mǎn)足PCP。這個(gè)練習(xí)的目的是讓你熟悉計(jì)算流程確認(rèn)代碼邏輯正確。3.3 用真實(shí)期權(quán)鏈數(shù)據(jù)觀察偏差拿到真實(shí)數(shù)據(jù)后你需要做幾件事。第一篩選出同一到期日的所有行權(quán)價(jià)。第二對(duì)每個(gè)行權(quán)價(jià)找到對(duì)應(yīng)的看漲和看跌期權(quán)報(bào)價(jià)。第三用中間價(jià)買(mǎi)價(jià)和賣(mài)價(jià)的平均來(lái)計(jì)算而不是用最新成交價(jià)因?yàn)樽钚鲁山粌r(jià)可能過(guò)時(shí)。第四計(jì)算每個(gè)行權(quán)價(jià)的PCP偏差并畫(huà)圖觀察。偏差的計(jì)算方式是偏差 (C - P) - (S - K×e^(-rT))。如果偏差為正說(shuō)明看漲相對(duì)看跌被高估或看跌被低估可以考慮賣(mài)出看漲、買(mǎi)入看跌、買(mǎi)入股票、借入資金如果偏差為負(fù)則反向操作。實(shí)際數(shù)據(jù)中你會(huì)發(fā)現(xiàn)偏差通常集中在幾個(gè)區(qū)域。平值附近行權(quán)價(jià)接近S的偏差最小因?yàn)榱鲃?dòng)性最好。深度實(shí)值和深度虛值的偏差較大因?yàn)橘I(mǎi)賣(mài)價(jià)差寬、流動(dòng)性差。到期日近的偏差小到期日遠(yuǎn)的偏差大因?yàn)橘Y金成本和時(shí)間價(jià)值的不確定性更大。我跑過(guò)一組數(shù)據(jù)平值附近的偏差通常在0.1%到0.3%之間深度虛值可能到1%以上。這些偏差看起來(lái)不大但如果你考慮交易成本傭金、買(mǎi)賣(mài)價(jià)差、沖擊成本很多偏差其實(shí)不足以覆蓋成本。這就是為什么PCP套利聽(tīng)起來(lái)簡(jiǎn)單實(shí)際做起來(lái)需要精細(xì)的成本控制。3.4 參數(shù)計(jì)算r和T的取值實(shí)操r的取值我通常用同期限的國(guó)債收益率。如果期權(quán)到期日是3個(gè)月后我就找3個(gè)月期國(guó)債收益率。如果找不到精確匹配的用線(xiàn)性插值。有些數(shù)據(jù)源會(huì)直接提供無(wú)風(fēng)險(xiǎn)利率曲線(xiàn)那就更方便。如果沒(méi)有可以用銀行間拆借利率近似但要注意信用利差。T的計(jì)算我用日歷日除以365。比如今天到到期日還有90天T90/365≈0.2466。有些交易員用交易日除以252對(duì)于短期期權(quán)差異不大但長(zhǎng)期期權(quán)會(huì)有區(qū)別。我建議保持一致不要混用。還有一個(gè)細(xì)節(jié)如果標(biāo)的資產(chǎn)在期權(quán)存續(xù)期內(nèi)支付股息PCP公式需要調(diào)整。調(diào)整后的公式是C - P S - PV(D) - K×e^(-rT)其中PV(D)是股息的現(xiàn)值。對(duì)于不支付股息的股票這一項(xiàng)為零。對(duì)于支付股息的股票你需要預(yù)測(cè)股息金額和支付時(shí)間這又引入了不確定性。我剛開(kāi)始做的時(shí)候忽略了股息結(jié)果算出來(lái)的偏差很大后來(lái)才發(fā)現(xiàn)是股息在作怪。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 偏差太大先檢查這五個(gè)地方當(dāng)你發(fā)現(xiàn)某個(gè)行權(quán)價(jià)的PCP偏差異常大時(shí)不要急著興奮先按順序檢查以下五點(diǎn)。第一數(shù)據(jù)是否同步。S、C、P是不是同一時(shí)刻的報(bào)價(jià)如果S是收盤(pán)價(jià)C和P是盤(pán)中價(jià)那偏差可能只是時(shí)間差造成的。第二是否同一到期日、同一行權(quán)價(jià)。有時(shí)候數(shù)據(jù)源會(huì)混淆不同到期日的合約或者行權(quán)價(jià)有調(diào)整比如股票拆股后行權(quán)價(jià)會(huì)變。第三是否用了中間價(jià)。如果用買(mǎi)價(jià)算一邊、賣(mài)價(jià)算另一邊偏差會(huì)被買(mǎi)賣(mài)價(jià)差放大。第四利率和股息是否處理正確。r取錯(cuò)了或者忘了股息偏差會(huì)系統(tǒng)性偏移。第五期權(quán)是美式還是歐式。美式期權(quán)的提前行權(quán)權(quán)利會(huì)破壞PCP尤其是深度實(shí)值的看跌期權(quán)。我踩過(guò)的一個(gè)坑是用某數(shù)據(jù)源的“最新價(jià)”算PCP結(jié)果發(fā)現(xiàn)很多期權(quán)的“最新價(jià)”是幾天前的成交價(jià)完全不能反映當(dāng)前市場(chǎng)。后來(lái)改用買(mǎi)賣(mài)中間價(jià)偏差就正常了。4.2 套利看起來(lái)很美為什么實(shí)際做不了理論上PCP偏差就是套利機(jī)會(huì)。但實(shí)際中你面臨幾個(gè)障礙。第一交易成本。期權(quán)有傭金股票有傭金和印花稅買(mǎi)賣(mài)價(jià)差也是成本。第二資金成本。套利需要借入資金或占用保證金實(shí)際借款利率可能高于無(wú)風(fēng)險(xiǎn)利率。第三流動(dòng)性限制。偏差大的合約往往流動(dòng)性差你未必能以看到的價(jià)格成交。第四行權(quán)與交割。美式期權(quán)提前行權(quán)、股票借入困難、交割規(guī)則復(fù)雜都會(huì)增加操作難度。我個(gè)人的經(jīng)驗(yàn)是對(duì)于散戶(hù)來(lái)說(shuō)PCP套利基本不可行因?yàn)槌杀咎?。但PCP平價(jià)仍然極其有用因?yàn)樗軒湍闩袛嗥跈?quán)價(jià)格是否合理。比如你想買(mǎi)看漲期權(quán)可以先算一下對(duì)應(yīng)的看跌期權(quán)價(jià)格如果看漲明顯貴了你可以考慮用看跌加股票來(lái)合成看漲可能更便宜。4.3 常見(jiàn)問(wèn)題速查表問(wèn)題現(xiàn)象可能原因排查方法偏差系統(tǒng)性為正看漲被高估或看跌被低估檢查是否漏算股息偏差系統(tǒng)性為負(fù)看跌被高估或看漲被低估檢查利率取值是否過(guò)高平值附近偏差小深度虛值偏差大流動(dòng)性差異用買(mǎi)賣(mài)價(jià)差過(guò)濾近月偏差小遠(yuǎn)月偏差大資金成本不確定性用更精確的利率曲線(xiàn)某些行權(quán)價(jià)偏差異常大數(shù)據(jù)錯(cuò)誤或合約調(diào)整核對(duì)合約規(guī)格美式期權(quán)偏差明顯提前行權(quán)權(quán)利改用歐式期權(quán)驗(yàn)證4.4 一個(gè)實(shí)用技巧用PCP反推隱含利率PCP不僅可以驗(yàn)證價(jià)格還可以反推市場(chǎng)隱含的無(wú)風(fēng)險(xiǎn)利率。把公式變形K×e^(-rT) S - C P然后解出r。如果你對(duì)一組期權(quán)鏈都做這個(gè)計(jì)算會(huì)得到一系列隱含利率這些利率的分布可以反映市場(chǎng)的資金成本預(yù)期。我試過(guò)用這個(gè)方法觀察市場(chǎng)情緒當(dāng)隱含利率突然飆升時(shí)往往意味著市場(chǎng)流動(dòng)性緊張或者有特殊事件。這個(gè)技巧的好處是你不需要額外數(shù)據(jù)源只用期權(quán)價(jià)格就能推斷出市場(chǎng)對(duì)利率的看法。當(dāng)然前提是期權(quán)流動(dòng)性足夠好否則噪聲會(huì)很大。5. 從PCP延伸編程視角下的期權(quán)分析框架5.1 把PCP封裝成可復(fù)用的函數(shù)一旦你理解了PCP就可以把它封裝成一個(gè)函數(shù)方便后續(xù)調(diào)用。我通常會(huì)寫(xiě)一個(gè)check_pcp函數(shù)輸入S、K、r、T、C、P輸出偏差和套利方向。再寫(xiě)一個(gè)implied_rate函數(shù)輸入S、K、T、C、P輸出隱含利率。這樣你在做其他期權(quán)分析時(shí)可以隨時(shí)調(diào)用。代碼結(jié)構(gòu)大概是def check_pcp(S, K, r, T, C, P): left C - P right S - K * np.exp(-r * T) deviation left - right if deviation 0: direction 賣(mài)出看漲買(mǎi)入看跌買(mǎi)入股票借入資金 elif deviation 0: direction 買(mǎi)入看漲賣(mài)出看跌賣(mài)空股票借出資金 else: direction 無(wú)套利機(jī)會(huì) return deviation, direction def implied_rate(S, K, T, C, P): # 從 C - P S - K*e^(-rT) 解出 r # e^(-rT) (S - C P) / K # -rT ln((S - C P) / K) # r -ln((S - C P) / K) / T ratio (S - C P) / K if ratio 0: return None return -np.log(ratio) / T這兩個(gè)函數(shù)雖然簡(jiǎn)單但非常實(shí)用。你可以把它們加入自己的期權(quán)分析工具箱。5.2 從PCP到Black-Scholes自然的下一步PCP是期權(quán)定價(jià)的“骨架”Black-Scholes模型則是給這個(gè)骨架填上“血肉”。Black-Scholes公式給出的看漲和看跌價(jià)格天然滿(mǎn)足PCP所以你可以把PCP理解為Black-Scholes模型的一個(gè)約束條件。當(dāng)你理解了PCP再學(xué)Black-Scholes會(huì)容易很多因?yàn)槟阒滥P捅仨殱M(mǎn)足這個(gè)無(wú)套利關(guān)系。從編程角度你可以用PCP來(lái)驗(yàn)證自己實(shí)現(xiàn)的Black-Scholes公式是否正確。如果你算出來(lái)的看漲和看跌價(jià)格不滿(mǎn)足PCP那一定是代碼有bug。這是一個(gè)非常有效的單元測(cè)試。5.3 給編程金融小白的三個(gè)學(xué)習(xí)建議第一先跑通再優(yōu)化。不要一開(kāi)始就追求完美的數(shù)據(jù)源和精確的利率曲線(xiàn)先用模擬數(shù)據(jù)把邏輯跑通再逐步替換成真實(shí)數(shù)據(jù)。第二可視化很重要。把PCP偏差畫(huà)成圖橫軸是行權(quán)價(jià)縱軸是偏差你會(huì)直觀看到偏差的分布規(guī)律。第三記錄每次實(shí)驗(yàn)。我習(xí)慣用Jupyter Notebook記錄每次數(shù)據(jù)拉取、計(jì)算和觀察結(jié)果方便回溯和對(duì)比。我剛開(kāi)始學(xué)的時(shí)候花了很多時(shí)間糾結(jié)于“正確的”無(wú)風(fēng)險(xiǎn)利率應(yīng)該是多少后來(lái)發(fā)現(xiàn)對(duì)于學(xué)習(xí)PCP來(lái)說(shuō)用任何合理的利率都能看到偏差關(guān)鍵是理解偏差的來(lái)源。等你真正要做交易決策時(shí)再精細(xì)化利率取值也不遲。5.4 一個(gè)容易忽略的細(xì)節(jié)期權(quán)報(bào)價(jià)的買(mǎi)賣(mài)價(jià)差在實(shí)際數(shù)據(jù)中期權(quán)的買(mǎi)價(jià)和賣(mài)價(jià)之間通常有價(jià)差。如果你用買(mǎi)價(jià)算PCP再用賣(mài)價(jià)算另一邊偏差會(huì)被價(jià)差放大。正確的做法是用中間價(jià)即買(mǎi)價(jià)賣(mài)價(jià)/2。但中間價(jià)也有問(wèn)題它可能不是可成交價(jià)。如果你真的要做套利你需要用買(mǎi)價(jià)買(mǎi)入、賣(mài)價(jià)賣(mài)出這時(shí)候價(jià)差就是你的成本。我通常的做法是先用中間價(jià)算一遍看看偏差分布再用買(mǎi)價(jià)和賣(mài)價(jià)分別算一遍看看偏差范圍。如果偏差在買(mǎi)賣(mài)價(jià)差范圍內(nèi)那就不算真正的套利機(jī)會(huì)。這個(gè)細(xì)節(jié)在書(shū)本上很少?gòu)?qiáng)調(diào)但實(shí)際操作中非常關(guān)鍵。6. 個(gè)人實(shí)操體會(huì)與后續(xù)擴(kuò)展方向6.1 我踩過(guò)的三個(gè)坑第一個(gè)坑是忽略股息。有一次我算一組銀行股的PCP發(fā)現(xiàn)偏差特別大還以為是市場(chǎng)無(wú)效。后來(lái)才想起來(lái)銀行股每季度分紅而我的公式里沒(méi)有股息項(xiàng)。加上股息調(diào)整后偏差立刻縮小到正常范圍。第二個(gè)坑是用錯(cuò)到期時(shí)間。我一開(kāi)始用自然日除以365后來(lái)發(fā)現(xiàn)有些交易員用交易日除以252兩者在短期期權(quán)上差異不大但在長(zhǎng)期期權(quán)上能差出幾個(gè)百分點(diǎn)。我現(xiàn)在的習(xí)慣是統(tǒng)一用自然日除以365保持一致性。第三個(gè)坑是數(shù)據(jù)不同步。我用收盤(pán)后的股票價(jià)格去配盤(pán)中的期權(quán)價(jià)格算出來(lái)的偏差完全沒(méi)有意義。后來(lái)我改成用同一時(shí)間戳的數(shù)據(jù)問(wèn)題就解決了。6.2 后續(xù)可以這樣擴(kuò)展如果你已經(jīng)跑通了PCP驗(yàn)證可以嘗試幾個(gè)擴(kuò)展方向。第一加入股息調(diào)整看看股息對(duì)PCP的影響有多大。第二用不同到期日的期權(quán)鏈觀察偏差隨到期時(shí)間的變化規(guī)律。第三構(gòu)建一個(gè)簡(jiǎn)單的套利回測(cè)看看扣除交易成本后是否還有利潤(rùn)。第四把PCP和其他期權(quán)關(guān)系結(jié)合比如看漲看跌平價(jià)和盒式價(jià)差的關(guān)系。我個(gè)人覺(jué)得最有意思的方向是用PCP反推市場(chǎng)隱含的股息預(yù)期。對(duì)于支付股息的股票你可以用PCP公式反推出市場(chǎng)隱含的股息現(xiàn)值然后和實(shí)際股息公告對(duì)比看看市場(chǎng)預(yù)期是否合理。這個(gè)分析在股息公告前后特別有用。6.3 最后分享一個(gè)小技巧如果你在驗(yàn)證PCP時(shí)發(fā)現(xiàn)某個(gè)行權(quán)價(jià)的偏差特別大先別急著下結(jié)論。把該行權(quán)價(jià)附近的幾個(gè)行權(quán)價(jià)都算一遍看看偏差是孤立的還是系統(tǒng)性的。如果只有某一個(gè)行權(quán)價(jià)偏差大很可能是數(shù)據(jù)錯(cuò)誤或流動(dòng)性問(wèn)題如果一片行權(quán)價(jià)都偏差大那可能是利率或股息參數(shù)取錯(cuò)了。這個(gè)排查思路幫我省了很多時(shí)間。另外我建議你養(yǎng)成記錄的習(xí)慣。每次驗(yàn)證PCP時(shí)把數(shù)據(jù)日期、S、r、T、偏差分布都記下來(lái)。過(guò)一段時(shí)間回頭看你會(huì)對(duì)市場(chǎng)摩擦有更深刻的理解。這個(gè)習(xí)慣比任何教材都管用。