上手與實踐篇
其實,第一階段的上手培訓教程屬于我們的上手與實踐篇的內容。這一篇幅主要介紹了QPA系統的應用環境、輸入以及定價流程。這一部分我們將持續向大家介紹系統使用相關的貼士與技巧,包括界面各個部分的使用指南、對象變量的定義參數(Permanent、Trigger和OverWrite選項的作用)。
進階篇
該部分會按照不同的資產類別詳細地說明QPA系統對于不同大類資產(固定收益類、利率類、權益類、大宗商品類、信用類以及外匯類)的支持。分別會介紹這些資產類別下常見的金融工具、交易這類產品中會關注的指標、以及支持這些指標所涉及的QPA函數,特別是如何使用QPA系統進行相應的交易支持和風險管理(這部分會以思維導圖的形式展現)。
高級品篇
這部分會進入又一個較為專業的范疇,結構化金融衍生工具。結構化產品是金融衍生工具應用的更高的階段,這部分會詳細描述不同類型的結構化衍生工具的作用,以及如何利用這些工具進行更個性化的風險和收益管理。QPA是如何通過個性化定義各類支付條款來支持對這些金融工具的定價和風險計量,從而滿足對個性化的金融投資和風險管理的應用需求。
]]>這里是無法只用普通的B-S模型對這些類型的期權進行定價的,不同的金融工具可能對應一個或者多個定價的方法,例如可以使用二叉樹對美式期權進行定價,可以使用閉合解的方式對障礙期權進行定價,也可以使用蒙特卡洛方法對障礙期權進行定價。這樣就有可能出現一個一對多的關系,即一個金融工具對應著二到三種定價方法。為了實現這樣的一對多模式,QuantPlus系統將金融工具的定義和對市場數據的定義以及對定價方法的定義完全隔離開來。通過定價引擎的概念,將金融工具、市場數據和定價方法聯系在一起,從而實現通過統一的定價框架實現對不同的金融工具進行定價,以及披露定價的相伴信息。
下面將展示如何使用QuantPlus中不同的定價引擎對歐式向上敲出(觸及價格上限合約作廢)障礙看跌期權進行定價。QuantPlus提供了對障礙期權工具的定義,通過函數=qpBarrierOption加以定義。
這里障礙類型從枚舉類型里面選擇UpOut,Barrier這里設定成百分比的形式即即期價格的110%。其他Payoff類型和Exercise類型和歐式期權一樣,都是普通歐式行權方式,分別使用函數=qpEuropeanExercise和= =qpStrikedTypePayoff加以定義。同樣定義市場數據,同樣即期價格也是以百分比形式定義(也可以定義成特定的價格),波動率設定為20%,再定義滿足這兩個波動率的隨機過程=qpGeneralizedBlackScholesProcess。
接下來,定義障礙期權的定價引擎。QuantPlus對解析解定價框架實現了通用函數,即統一的函數入口=qpPricingEngine。這個函數和歐式期權的定價函數一致,但是EngineID選項,選擇AB即Analytic Barrier Engine,歐式障礙期權的解析解引擎(在QuantPlus理論背景指南的Valuation章節具體描述了具體的解析解公式),定價公式是不同于AE引擎的(Analytic European Engine)。
最后設定定價引擎,即設定該金融工具用障礙期權的解析解定價引擎來定價,使用函數=qpInstrumentSetPricingEngine來實現這一設定過程。最后使用通用估值函數=qpInstrumentNPV計算出該障礙期權的解析解結果。
同樣,QuantPlus提供了針對障礙期權定價的特定蒙特卡洛引擎即=qpMCBarrierEngine,如下定義完成之后,同樣使用函數=qpInstrumentSetPricingEngine設定障礙期權定價引擎的設定。最后使用通用估值函數=qpInstrumentNPV計算出該障礙期權的解析解結果,二者估值NPV的結果較為接近。
由上述定價過程可以看出,QuantPlus提供了一整套非常完備的定價體系,該體系都是通過模塊化的方式構建來完成和實現的,可以靈活地實現對不同金融工具的定價和分析。
]]>下面我們將依據下面的定價流程框架分步驟對一個無紅利的歐式期權進行定價。
第一步:定義金融工具對象:
1. 如下圖點擊創建對象,選擇"qpVanillaOption"定義一個歐式期權(即可以通過下圖創建對象中選取相應對象來創建(點擊QuantPlus標題欄,選擇創建對象(下圖紅框),對象類型選擇Financial,子對象類型選擇Options,子子對象類型選擇qpEuropeanOption,然后點擊創建特定對象(如下圖黑框所示,后文所有對象的創建都將是創建特定對象)來創建。也可以通過在空白單元格處輸入函數以"=qpVanillaOption()"及相應的參數來創建。
2. 接下來創建期權行權機制對象"Payoffs"(同樣的點擊創建對象之后,依次在下拉菜單和子菜單中點選Financial-Payoffs-qpStrikedTypePayoff),特定對象創建好之后在表格中的option Type處填寫期權的種類,即看漲或看跌期權(call或put),strike處填寫執行價格,PayoffID可以從插入類(在下圖綠框)中選取。
3. 最后創建"Exercise"對象(同樣的點擊創建對象之后,依次在下拉菜單和子菜單中點選Financial-Exercise-qpEuropeanExercise),在ExpiryDate中填寫期權到期日或者填寫距離期權到期日的剩余時間。創建好"Exercise"和"Payoffs"對象后,如果創建對象成功,如“示例”工作簿F2和I2所示返回obj_數字@數字表示對象創建成功,在歐式期權對象函數C2單元格處通過快捷鍵Shift+F3,分別在PayoffID處和ExerciseID處應用單元格F2和I2兩個對象,返回obj_數字@數字表示成功創建了金融工具對象。
第二步:定義市場數據對象:
此步驟主要目的是為了建立隨機過程,建立隨機過程我們需要波動率和無風險利率等指標。
1. 因此首先創建"Volatilities"對象(同樣的點擊創建對象之后,依次在下拉菜單和子菜單中點選Financial-Volatilities-qpBlackConstantVol
或者輸入函數"=qpBlackConstantVol()"來創建,后文創建對象同理),建好表格后SettlementDate處填寫期權生效日,Calendar處可以從插入類型(插入類型在上圖中籃框)中選取(此處為上海交易所日期),Volatility處填寫波動率數值,DayCounter同樣可以從插入類型中選?。ù颂帪檎鎸崟r長/365)。
2. 之后創建隨機過程對象"Processes"(同樣的點擊創建對象之后,依次在下拉菜單和子菜單中點選Financial-Processes-qpGeneralizedBlackSchole),BlackVoIID選取剛才設定好的波動率對象(即下圖中obj_00000@0002,選擇此對象所在單元格就好,選取好之后會發生變化無須理會),SimpleQuote處輸入函數"=qpSimpleQuote()"之后通過快捷鍵shift+f3插入函數,在彈出的函數窗口中value處填寫即期價格,RiskFreeRate填寫無風險利率,DayCounter和SettlementDate同波動率對象的參數一致,這樣我們就創建好了市場數據對象。
第三步:定義定價引擎對象:創建"Pricing Engines"對象(同樣的點擊創建對象之后,依次在下拉菜單和子菜單中點選Financial-Pricing Engines-qpPricingEngine),在EngineID處可從插入類中的PricingEngineConstructor1里進行選取,AE是Analytic European Engine的縮寫(即歐式期權解析解引擎),ProcessID中填寫第二步中的隨機過程對象ID,至此我們已經創建好定價所需的所有對象。
第四步:計算期權的價格:
1. 首先要設定估值日,選中空單元格,輸入函數"=qpSettingsSetEvaluationDate()"里面填入具體的估值日期(日期形式為2018-1-12這種樣式,估值日期一般設定與期權生效日相同)。
2. 之后設定估值引擎,選中另一空單元格,輸入函數"=qpInstrumentSetPricingEngine()"(同樣可以通過快捷鍵shift+f3快速插入函數,進行填寫)里面分別填入歐式期權的對象ID和定價引擎的對象ID。
3. 最后,另選空白單元格調用估值函數"=qpInstrumentNPV()"引用歐式期權的對象單元格地址,即引用“示例”工作簿c2單元格即可計算出待定價期權的價格。同樣地,選取空白單元格調用函數"=qpDelta()"引用期權對象單元格,即可以用來計算返回期權對應的Delta,其他的希臘字母計算方法同理可得,函數名分別為qpGamma、qpVega、qpTheta、qpRho等等指標。
很多朋友要問了,一個簡單的歐式期權為什么要花費四個步驟按照定價流程去實現定價結果呢?直接用一個簡單的Black-Scholes公式不一樣可以求解歐式期權么?答案是肯定的(其實QuantPlus本身也包含較為直觀的BlackScholesCalculator函數,可以直接構建一個BS公式對歐式期權進行求解,我們也會花一個教程來具體講解這個函數。),我們也會在下一個教程中分析一下為何要用定價流程,以及定價流程框架的意義。
]]>校準過程的目標是找到一系列模型參數,使模型預測與可用市場數據(市場報價)之間的差異最小化。后面的示例將對歐式期權的隱含波動率進行校準。
原理相對比較簡單,考慮使用Black-Scholes 模型, 在時間區間,股票價格的對數回報可以由以下隨機過程描述:
.
在此模型之下(我們用無風險利率r替換\mu),看漲期權在T時刻的價格由依賴于波動率\sigma的函數決定。
,
這里
.
現在,假設r已知,我們就可以計算隱含波動率的大小了。
隱含波動率:
假設市場可以觀測到的對于特定敲定價格和到期日的看漲期權價格 , 我們可以計算例如 . 我們可以計算得到特定期限和敲定價格的看漲期權的隱含波動率,這樣就可以對某些無法直接從市場直接觀測到期限(插值方法)和敲定價格的期權定價。隱含波動率就可以通過最優化的方式求解得到。
這里可以使用QuantPlus內置的函數對普通看漲期權求解隱含波動率。首先演示一下如何根據現有期權的價格以及期權合約的信息反推出期權的隱含波動率(implied volatility)。在這里我們需要用
到‘qpBlackFormulaImpliedStdDev()’這個函數,選中某個空白單元格,輸入‘=qpBlackFormulaImpliedStdDev()’后敲擊‘shift+f3’彈出函數輸如對話框,如下圖:
這個函數需要的基本參數有期權類型(call/put)、行權價格(Strike Price)、標的資產的遠期價格(即根據標的資產和對應期限的利率計算的遠期價格)、期權的當前市場報價、以及貼現因子。
例如,在2018-10-1814:32分,ETF50指數價格為2.437,ETF50看漲期權合約的行權價為2.25,看漲期權的成交價為0.1938,期權剩余期限為6日,無風險利率我們需要用上海銀行間市場同業拆放利率來進行計算(見下圖)
由于數據僅含有隔夜及 1 周的拆借利率報價,因此 6 日的無風險利率可通過插值方法進行估算。我們在空白單元格中創建如下對象函數(qpInterpolatedYieldCurve):
根據上海銀行間同業拆放率填入相應數值,此處插值方法選取三次樣條插值法(其中
可下拉選擇的參數,如 交易日歷Calendar 可點擊插入類型-Calendar 從下拉列表中選?。?
另選空白單元格使用函數‘qpYieldTSZeroRate’調用此對象并輸入所需參數,可以通過插值方法計算得到對應6天的即期收益率,由此可快速估計出 6 日無風險利率為 2.58%。
根據以上數據可求得遠期資產價格為
,折現因子為0.999957,將上述參數輸入到“qpBlackFormulaImpliedStdDev”函數中
此后可得到對應期權隱含標準差0.060(即等于隱含波動率sigma x sqrt(T)),由此求得隱含波動率為46.6%。與此同時本函數內置了自動的校驗功能,通過put-call parity對波動率的數值進行計算驗證,以保證所求波動率滿足put-call parity等式另一端未知的put或call期權價格大于0。如果不滿足上述條件或函數無法返回特定結果,顯示“#NUM!”錯誤,我們可以使用‘ooRangeRetrieveError()’函數對所求結果的錯誤的日志進行查詢輸出,并根據原因進行修改調整。
我們會持續更新和發布更多有關QuantPlus Analytics相關的產品應用示例、貼士與技巧、背景理論知識、培訓和教學視頻等精彩內容,歡迎大家關注我們的公眾號來獲取更多更新的產品資訊。申請QuantPlus Analytics試用的,請點擊“申請試用鏈接”。
]]>Step 1:創建固定利率債券對象
選中一個空白單元格,在QuantPlus tab欄點擊“創建對象”圖標,會彈出“創建對象”對話框。
選擇對象類型—“Financial”,子對象類型—“Bonds”,子子對象類型—“FixedRateBond”,其他選項用默認(后續會花詳細的時間探討其他選項的作用),點擊“創建對象模版”。
會在選中的單元格創建固定利率債券對象和依賴對象(這里是支付計劃對象)。用戶可以修改對應的參數,來修改固定利率債券的屬性(起息日、到期日、付息頻率、幣種等等),返回obj_00001@0000說明對象創建成功。
Step 2:創建市場數據對象
這里以平的遠期收益率曲線作為市場數據對象的簡單示例。同樣,選中一個空白單元格,在QuantPlus tab欄點擊“創建對象”圖標,會彈出“創建對象”對話框。
選擇對象類型—“Financial”,子對象類型—“TermStructure”,子子對象類型—“FlatForward”,其他選項用默認(后續會花詳細的時間探討其他選項的作用),點擊“創建對象模版”。
會在對應選擇的單元格區域附近創建平的遠期收益率曲線對象,返回obj_00002@0000說明市場數據對象創建成功。
Step 3 創建估值日和創建定價引擎
首先,輸入某個估值日,在空白單元格區域輸入日期2018-9-29。然后,在空白區域創建債券的定價引擎對象。在QuantPlus tab欄點擊“創建對象”圖標,會彈出“創建對象”對話框。選擇對象類型—“Financial”,子對象類型—“Pricing Engines”,子子對象類型—“BondEngine”,其他選項用默認(后續會花詳細的時間探討其他選項的作用),點擊“創建對象模版”。
這時qpBondEngine函數會返回#NUM!錯誤,這里還需在YieldCurve參數處引用qpFlatForward對象,會返回obj_00003@0001說明債券定價引擎對象創建成功。
Step 4 設定估值日和設定定價引擎
首選,設定估值日。在空白單元格區域輸入函數= qpSettingsSetEvaluationDate(),shift+F3彈出插入函數對話框,引用具體估值日如F19,會返回True表示估值日設定成功,這里如果不輸入具體日期會將當前系統日期作為默認估值日。
然后,在一個新的單元格區域輸入=qpInstrumentSetPricingEngine(),shift+F3彈出插入函數對話框,這里需要引用兩個對象,第一個函數參數ObjectID引用金融工具對象,這里是債券對象B1單元格,第二個函數參數引用定價引擎對象單元格H19,函數返回True說明定價引擎設定完畢。
最后可以通過統一的金融工具定價函數qpInstrumentNPV(B1),引用金融工具對象單元格B1作為參數,返回99.2942即為債券的NPV。任何金融工具的定價都可以以該步驟來實現。
我們會持續更新和發布更多有關QuantPlus Analytics相關的產品應用示例、貼士與技巧、背景理論知識、培訓和教學視頻等精彩內容,歡迎大家關注我們的公眾號來獲取更多更新的產品資訊。申請QuantPlus Analytics試用的,請點擊“申請試用鏈接”。
]]>一、金融市場慣例和枚舉類型(Enumeration Types/Classes)
為了嚴格定義金融合約中交易雙方交易清算的具體日期、計算利息的標準、應計天數的標準、具體的金融市場交易日歷等規則,金融市場協會如ISDA(International Swaps and Derivatives Association)為參與雙方嚴格定義了金融市場的慣例規則如金融市場日歷(Finance Market Calendar)、復利規則(Compounding Convention)、應計天數慣例(Day Count Convention)、節假日調整規則(Business Day Convention)等慣例規則,這些慣例規則的具體定義可以參考QuantPlus軟件中的“理論參考指南”第一章的詳細描述。
QuantPlus將這些金融市場慣例以枚舉類型的形式作為輸入變量提供給用戶使用。具體使用的方式如下,選中一個空白單元格,在QuantPlus Tab欄找到“插入類型”按鈕,點擊該按鈕,在下拉列表中選擇對應的枚舉類型項目,如選中“Calendar”會在E1單元格中插入了全球金融市場的交易日歷下拉選項,可以下拉選擇某個金融市場。
同樣除了常用的幾個金融市場慣例之外,例如利率互換的支付端/收取端、支付的頻率(Frequency)、貨幣的幣種(Currency)、期權的看漲看跌(Call/Put)、月份(Month)、時間單位(Time Unite)等等,QuantPlus也把這些可以窮舉的變量定義成枚舉類型作為下來選擇選擇。至于需要輸入什么類型的枚舉類型變量,可以在參考QuantPlus的“函數指南”文檔,里面會有詳細的參數描述,同樣也可以在輸入函數之后,通過Shift+F3打開插入函數對話框,在變量名稱輸入框點擊,會提示需要輸入的類型,如Calendar,用戶可以在引用單元格M7處插入變量Calendar,選擇China::IB來實現枚舉類型變量的輸入。
二、對象類型(Object Types)
對象類型是可以作為輸入變量被復用的,下面介紹幾個重要的QuantPlus輸入對象類型:
支付計劃對象類型(Schedule Object)
在大多數金融合約中,特別是固定收益類產品,像債券、利率互換等合約中都會有具體的付息計劃(Payment Schedule),約定了具體的起息日(Effective Date)、到期日(Termination Date),付息的周期(Tenor)以及遵循的金融市場慣例。注意,這里的起息日和到期日要以整數形式輸入如2015-3-22,以數字格式顯示就是42085。有的時候輸入2015/03/22會被強制轉換成字符型,這樣系統就沒法轉換成整型日期格式。這里可以強制轉換的形式在一個新的單元格里輸入公式=E5+0,可以強制轉換成整型格式。另外,付息周期(Tenor)的參數為固定時間,例如1D為1個工作日,1W為1周,3M為3個月,1Q為一個季度,1Y為1年。
當支付計劃對象創建完畢,該對象就可以作為輸入被任意需要用到支付計劃對象的函數所使用了。
指標利率對象類型(index Object)
在浮動利率類型產品中需要用到一個對象即指標利率對象(Index Object),可以參考的指標利率可以是3M Shibor Rate,7D Repo rate,1M Libor Rate等各種指標。其中最為通用的創建指標利率對象函數為“qpIborIndex”,輸入相應的參數即可創建指標利率對象。該對象可以被付息債券對象引用,作為生成浮動利率的參考指標規則。值得注意的是,該指標利率在某些時候需要添加歷史的定盤利率(Historical Fixing),這部分會在后面結合具體的金融工具定價過程詳細描述。
我們會持續更新和發布更多有關QuantPlus Analytics相關的產品應用示例、貼士與技巧、背景理論知識、培訓和教學視頻等精彩內容,歡迎大家關注我們的公眾號來獲取更多更新的產品資訊。申請QuantPlus Analytics試用的,請點擊“申請試用鏈接”。
]]>
如果閱讀本文的讀者有計算機編程經驗的一定會對對象的概念熟悉。其實并不需要讀者多深入的了解面向對象的細節,而是通過簡單的定義讓用戶了解對象是由一系列特定數據類型構成的數據結構或者特定類型即可。因為在傳統的Microsoft Excel中數據類型和函數返回類型一般有三種:數值型(numerical)、文本型(text)和日期時間型(date and time)。但是QuantPlus系統讓用戶具備了新的數據類型即對象類型,以“object_序號@創建次數”樣式返回到Excel單元格中,而對象本身就包含了一系列的數據類型元素,可以被其他函數直接引用進行計算和輸出。
那么很多人就要問了,面向對象的應用環境到底有什么好處呢?總結歸納為三點:
1. 一次創建無需重復輸入相同的數據參數,提高了應用的效率。例如,我需要計算某個債券的收益率和這支債券的應計利息。用戶只需要創建這個債券的對象,以及使用相應的函數(“qpBondYieldFromCleanPrice()”,“qpBondAccruedAmount()”),各自引用這個債券的對象即可,無需要再像傳統的Excel函數需要重復輸入大量相同的參數。
2. 同一個函數實現對于不同類型金融工具的同類計算。例如,“qpInstrumentNPV()”函數引用不同的金融工具對象,可以計算出不同金融工具對象的NPV。而無需像傳統的Excel函數一樣,對于債券全價要記憶債券全價的函數名,對于期權價格需要計算期權價格的函數名,提高了函數的復用性。
3. 通過枚舉類型變量,將金融計算中涉及的常用變量輸入標準化(直接從類型的下拉列表中選擇),大大降低了錯誤輸入的可能性。例如,全球各個金融市場的交易日歷被存放于Calendar枚舉類型中,通過下拉列表可以選擇相應的金融市場交易日歷,如China::IB表示中國銀行間市場交易日歷全列表,用戶無需關注具體金融市場的詳細的交易日期。又例如,日期計數規則被存放于DayCounter枚舉類型中,用戶只需要從DayCounter類型的下拉列表選擇某種日期計數規則,如Act/365,來指定該種計算日期計數的方式。詳細信息參考QuantPlus“理論參考指南”文檔。
有兩種方式可以創建對象,一個是通過Excel界面加載的QuantPlus tab欄中的“創建對象”按鈕,快速創建對象?;蛘撸c擊加載tab欄中的插入函數,選擇用戶已知的對象創建函數像使用Excel函數一樣輸入相應的數據類型創建對象。例如,用戶在某個空白單元格輸入“=qpSimpleQuote()”函數名,再按Shift+F3使用Excel快速插入函數快捷鍵,在對應區域輸入相應的值,也可以引用某個單元格區域。也可以在ObjectID區域為該對象命名,這樣函數返回對象信息就變成”名稱_序號@創建次數,通過這種方式就可以簡單的創建一個對象。
我們會持續更新和發布更多有關QuantPlus Analytics相關的產品應用示例、貼士與技巧、背景理論知識、培訓和教學視頻等精彩內容,歡迎大家關注我們的公眾號來獲取更多更新的產品資訊。申請QuantPlus Analytics試用的,請點擊“申請試用鏈接”。
]]>接上篇文章,歐式期權定價通??紤]6個參數,分別是無風險利率,股票現價,分紅率,行權價格,時間長度,波動率。
在這里,我們假定其他5個因素不變,考慮股價在一個極小的時間段內發生變化,對歐式期權的理論價格的影響。在數學中,偏導數可以衡量影響的大小,所以我們做如下的定義:
期權價格對股票價格求一階導數可以得到Delta()
期權價格對股票價格求二階倒數可以得到Gamma($\Gamma$)
Delta對股票價格求一階導數可以得到Gamma
這里簡單介紹一下Delta-Gamma對沖的原理和思路。從上篇文章中,我們已經了解到,期權的Delta通常不是常數,是一個在時刻隨股價變化而變化的值,交易員需要時刻調整持倉數量以達到Delta中性,為了方便交易員進行對沖,我們引入了Gamma的概念,交易員只需做到Delta-Gamma的中性,并且不用頻繁地調整倉位,也可以對風險進行控制。
用數學表示如下:
用字母$P$表示一個投資組合(進行Delta-Gamma對沖時,通常需要兩個不同strike,標的股票相同的期權)。Delta-Gamma對沖的基本原理就是$\frac{\partial P}{\partial S}=\frac{\partial^2P}{\partial S^2}=0$ 對于每一份股票,假設期權1有$x$個,期權2有$y$個,則$x$和$y$應滿足如下的方程
根據這個方程,我們可以求得使投資組合達到Delta-Gamma中性的兩種期權的個數。
在Delta和Gamma都達到中性時,由于Gamma是Delta對股價的偏導數,則當股價變化量
同上篇文章一樣,參考
http://www.nasdaq.com/symbol/ibm/option-chain/160415C00120000-ibm-call和
http://www.dividend.com/dividend-stocks/technology/diversified-computer-systems/ibm-ibm-corp
可以獲得IBM的2016/4/15到期的權益期權的相關信息,
該期權的行權價格是120美元,是一個歐式看漲期權,隱含波動率為0.27572。在2016/1/14時,IBM的股價為132.91美元,無風險利率我們選擇3個月的LIBOR,為0.62%,連續紅率為3.91%。
我們將演示如何通過Excel進行對沖。注意到有兩個實例文件,我們將分別進行講解。
在兩個示例文件中,我們都假設估值日為2016/1/14。
打開示例文件Delta Gamma Hedging,此文件模擬了十周中每周的股價,并模擬出了投資組合的時間序列數據,打開示例文件中的“利潤”表,可以看到:
圖1:“利潤”表
在此文件中,我們可以輸入當期股價,選擇兩個期權的strike大小,以及是看漲期權(call)還是看跌期權(put)。
參考圖2,該表可以模擬在進行delta對沖時,期權+股票組合的利潤情況。
圖2:輸入、輸出
圖2 的說明如下:
Strike1就是用戶希望進行Delta-Gamma對沖的期權1的行權價格,可以根據市場上所有的期權輸入相應的行權價格。
Strike2就是用戶希望進行Delta-Gamma對沖的期權2的行權價格,可以根據市場上所有的期權輸入相應的行權價格。
用戶可以選擇使用call還是put
股票數量是用戶輸入的內容。
當前股價是股票的價格,可以從相關網站上獲得相關數據,也可以用wind的函數直接獲得。
初始投資是經計算得出的結果。
初始期權數量是用戶輸入的數據。
在這個例子中,經系統計算,達到保持Delta-Gamma中性所需要的期權1(行權價格是132)數量是﹣26808,即賣出26808份,所需期權2(行權價格是133)的數量是26761。由于初始期權1和期權2的數量都是1000,所以需賣出27808份期權1,買入25761份期權2。
接著我們回到左邊的表格,注意到有3個按鈕:
圖3:3個按鈕
點擊按鈕“生成隨機的股價”可以生成一系列隨機的股價,如下圖:
圖4:隨機生成每周的股價
從圖4中,我們能看到133.1587是模擬出的一周后的股價,128.0946是過了10周后的股價。如果用戶不希望使用隨機模擬的股價,也可以隨意輸入股價進行模擬。
按下“模擬Delta Gamma對沖”可以用剛才隨機生成的股價進行Delta Gamma對沖的模擬。
圖5:利潤表
從圖5中可以看出,在這次模擬中,過了一周后,股價為133.1587,累積利潤為﹣66.9606,過了兩周后,股價為132.8298,累計利潤為﹣264.3098。
按下“生成股價并對沖”按鈕,相當于先按“生成隨機的股價”,再按“模擬delta對沖”。
同時,我們還制作了第二個Excel文件,打開“Delta Gamma對沖_2”的利潤表
圖6:Delta Gamma對沖_2的“利潤”表
對比這個文件和上個文件可以發現,在此文件中,并沒有進行股價的隨機模擬,而是計算了每一個股價所對應的利潤,用戶需要輸入周數,比如在實例文件中,我們輸入了4,就是計算在4周后,各個股價所對應的利潤。
圖7:4周后利潤與股價的關系
仔細觀察圖7,可以發現當股價變化范圍在120-170之間時,利潤較為穩定。
總得來說,Delta Gamma對沖還有不足的地方,沒有考慮到期權價格受到時間變化的影響,在以后,我們將在以后和大家討論Delta-Gamma-theta對沖。
使用QuantPlus Analytics的快速指南,權益-期權,可以創建期權定價的模板。
我們知道,一個歐式期權,無論看漲還是看跌,在估值時一般有6個參數要考慮,股價,波動率$\sigma$,無風險利率$r$,分紅率$\delta$
行權價格$K$,到期時間$T$。 進行一下分類,其中
交易數據有:合約的基本屬性,如$K, T, \mathrm{payoff}, \mathrm{call/put}$
市場數據有:$S, \sigma, r, \delta$等
在QuantPlus Analytics中,市場數據和交易數據是分開來構造的,具體過程如下:
1. 構建歐式期權的基本交易屬性,包括歐式期權的清算日、行權日期、行權對象、輸入估值日期等。
2. 設定估值模型,例如波動率對象、隨機過程對象、估值引擎類型。
3. 利用qpInstrumentNPV函數輸出計算的結果。
這里,我們以IBM的股票期權為例進行說明,因為IBM是藍籌股,且交易量較大,合約標
準化,流動性好,容易找到相關工具,所以我們選取IBM在納斯達克交易所進行交易的期權。(在未來的文章中,我們通常都會以IBM的股票期權來進行說明)
首先來看看數據的準備工作是如何完成的。參考
http://www.nasdaq.com/symbol/ibm/option-chain/160415C00120000-ibm-call 和
http://www.dividend.com/dividend-stocks/technology/diversified-computer-systems/ibm-ibm-corp
我們假定期權估值日2016/1/14,該IBM期權的基本信息如下:
行權日2016/4/15
估值日為2016/1/14
該期權的行權價格是120美元
是一個歐式看漲期權
隱含波動率為0.27572
IBM的當前股價為132.91美元
無風險利率我們選擇3個月的LIBOR,為0.62%
連續紅率為3.91%
回到QuantPlus Analytics,我們把相關數據輸入。
在這里,估值日就是2016/1/14。估值日設定為TRUE意思是系統已經成功地收到了估值日,如果為False,則就是估值日沒有記錄在系統中。
期權的清算日就是估值日,所以也是2016/1/14。交易日歷選擇了紐約證券交易所的日歷。波動率我們輸入剛才從網上獲取的數據:0.27572。在該定價過程中,我們使用的是歷史波動率或者隱含波動率,在實踐中,隱含波動率與strike和期限是相關的,即波動率不是常數,不同的strike和不同期限的期權的隱含波動率不同,這就是所謂的波動率曲面,QuantPlus Analytics也可以引用波動率曲面數據,來實現對各種期限和不同strike的期權的定價。日期計數,選擇Actual/365 (Fixed)。根據以上的若干參數,我們構造了一個波動率對象:BlackVol,這將是我們進一步做分析的基礎。
我們輸入了當前股價132.91美元,無風險(LIBOR)利率0.62%,紅利率3.91%,結合剛才的對象BlackVol返回了一個隨機過程對象blackscholes,這個對象包含了股票在風險中性測度下服從的隨機過程(幾何布朗運動)的相關參數,如$S, \sigma, r, \delta$
我們輸入了行權日期2016/4/15,并構造了一個行權對象Eu_Ex。
我們選擇了交易類型:Vanilla,這是最普通的交易類型,還有Gap,AssetOrNothing等選項,分別代表若干的奇異期權。期權類型是call,敲定價格為120美元。 交易類型,期權類型和敲定價格構造出了一個敲定交易對象。定價引擎可以選擇使用哪種計算方法算出期權的價格,我們選用最常用的BS模型法,還有其他方法可供選擇,如Monte Carlo法,二叉樹法,等等。由定價引擎類型和隨機過程對象,我們構了一定定價引擎對象。
最后,由敲定價格對象,行權對象構成了歐式期權對象。設定引擎為TRUE說明定價引擎已經輸入到系統。 最后NPV(即期權費)由歐式期權對象和設定引擎構造出。QuantPlus Analytics中NPV的方便在處在于各種衍生品的價格函數名稱都是NPV,即利用了函數的多態性,無須用戶記住多種復雜的函數名稱也可以定價。
總結一下,定價的流程如下:
1.用戶根據市場相關數據,輸入波動率對象,股價,無風險利率和分紅率,得到隨機過程對象,并輸入定價引擎
2.用戶根據交易數據,輸入行權對象和敲定交易對象,得到歐式期權對象
結合以上的定價引擎和歐式期權對象,得到NPV
]]>什么是delta
在期權定價中,通過Black Scholes對歐式期權的定價模型為例,對漲期權價格的定價需要6個參數,分別是無風險利率,股票現價,分紅率,行權價格,時間長度,波動率。由于參數變化會造成期權價格的變化,我們想了解每一個參數變化1單位后期權價格變化的幅度,如無風險利率變化1%,期權價格的變化會是多少。在金融行業中,一般用希臘字母表示每個參數的敏感性,即參數變化1單位,期權價格變化的數量。在數學中,變化率可以由偏導來表示,Option對相應參數求偏導就是希臘字母。
對無風險利率求偏導可以得到rho
對股票價格求一階導數可以得到delta()
對股票價格求二階倒數可以得到gamma
對波動率求偏導可以得到vega
對時間求偏導可以得到theta
對分紅率求偏導可以得到psi
這里簡單介紹一下delta對沖的原理和思路,從上文中,我們已經了解到,期權的delta定義是期權價格與標的資產價格變化的比率,它是期權價格與標的資產價格的切線斜率。如圖1,假設某看漲期權的是0.6,則在當前價格下,股價變動1單位,相應的看漲期權的價格變化為0.6單位。
圖1:的說明
數學定義則是??梢宰C明(參考John Hull的Options, Futures and Other Derivatives等教材),對于看漲期權,,對于看跌期權,。也就是說當股價變化為1時,期權價格的變動的范圍在-1和1之間。
Delta對沖策略分為以下四種:
(1) 看漲期權短頭寸+股票長頭寸
(2) 看漲期權長頭寸+股票短頭寸
(3) 看跌期權長頭寸+股票長頭寸
(4) 看跌期權短頭寸+股票短頭寸
其中股票頭寸數除以期權頭寸數均為,在本文中,著重介紹第一種情形,即漲期權短頭寸+股票多頭寸的情形。舉例來說,股票上漲一個很小的數目,則看漲期權短頭寸的一方將損失,但由于他持有份股票,份股票可以獲得的收益,彌補了相應的損失。這對交易員十分重要,因為交易方通常會有一定數量的期權,所以可以通過delta對沖等方法來降低風險,使投資組合在某一定范圍內不受到股票價格變動的影響。
對于一個股票和期權投資組合策略,如果股票數量除以期權數量等于,且對于看漲期權頭寸相反(對于看跌期權則是頭寸相同),則當前這樣投資組合策略便是delta中性的。但是,每經過一段時間,股價會有所變動,所以期權的價格也發生非線性的變化,這將導致期權的delta也會變,所以交易員應持有的股票數量也應該有所改變,應買入或賣出一定數量的股票,再次達到delta中性。我們把這種不斷調整股票持倉數量的對沖方法稱為“動態對沖”。如果一個交易員在進行delta對沖時不及時調整倉位,那股票+期權的資產組合就不再是delta中性的了,相應的風險也會增大不少。
實例演示
這里,我們以IBM的股票期權為例進行說明,因為IBM是藍籌股,且交易量較大,合約標準化,流動性好,容易找到相關工具,所以我們選取IBM在納斯達克交易所進行交易的期權。
首先來看看數據的準備工作是如何完成的。參考
http://www.nasdaq.com/symbol/ibm/option-chain/160415C00120000-ibm-call和
http://www.dividend.com/dividend-stocks/technology/diversified-computer-systems/ibm-ibm-corp
可以獲得IBM的2016/4/15到期的權益期權的相關信息,該期權的行權價格是120美元,是一個歐式看漲期權,隱含波動率為0.27572。在2016/1/14時,IBM的股價為132.91美元,無風險利率我們選擇3個月的LIBOR,為0.62%,連續紅率為3.91%。
我們將演示如何通過Excel進行對沖。在示例文件中,我們假設估值日為2016/1/4,并將模擬十周中每周的股價,以及相應的損益。打開示例文件中的“利潤”表,可以看到:
圖2:“利潤”表
該表可以模擬在進行delta對沖時,期權+股票組合的利潤情況。在圖2中,有如下的信息:
圖3:輸入、輸出
圖3 的說明如下:
橫縱坐標說明了下面的利潤圖的相關信息,橫軸表示距離估值日的周數,縱軸表示整個投資組合策略的累計利潤。
Strike就是用戶希望進行delta對沖的看漲期權的行權價格,可以根據市場上所有的期權輸入相應的行權價格。
初始投資是經計算得出的結果。
當前股價是股票的價格,可以從相關網站上獲得相關數據,也可以用wind的函數直接獲得。
初始期權數量和初始股票數量是用戶所持有的看漲期權和股票數量。
初始應買入股票數量是使得投資組合策略delta中性所應該買入的股票數量。
在這個例子中,經計算得出初始delta值為0.51836,初始期權數量為10000,則初始的股票數量應為5184,但此時股票量只有1234,所以應買入3950數量的股票,達到delta中性。接著我們回到左邊的表格,注意到有3個按鈕:
圖4:3個按鈕
點擊按鈕“生成隨機的股價”可以生成一系列隨機的股價,如下圖:
圖5:隨機生成每周的股價
從圖5中,我們能看到133.0898是模擬出的一周后的股價,146.7945是過了10周后的股價按下“模擬delta對沖”可以用剛才隨機生成的股價進行Delta對沖的模擬。
圖6:利潤表
從圖6中可以看出,在這次模擬中,過了一周后,股價為133.0898,此時根據相應的定價引擎計算出期權價格為6.5672,由于我們進行了delta對沖,當期的利潤為2356.9786,在此時,delta改變為0.5010,所以delta的變化為-0.0173,表明應賣出173.5542數量的股票。如此類推,同理,過了兩周后,delta也會有相應的變化。第一期(加上利息)的利潤和第二期的當期利潤構成了第二期累計利潤。第期的累計利潤(加上利息)和第期的當期利潤構成了第期的累計利潤??梢钥吹?,在這次模擬中,股價總體呈上升趨勢,如果不進行delta對沖,則會有一定數量的虧損。
按下“生成股價并對沖”按鈕,相當于先按“生成隨機的股價”,再按“模擬delta對沖”。
動態對沖對交易員要求高,需要經常調整頭寸的數量。而靜態對沖即Gamma對沖則更方便一些,這將是我們下一次討論的問題。
圖7:對比delta和delta hedging的效果
從圖7中,我們可以看到delta-gamma對沖的效果比delta對沖效果好得多。
結論及未來展望
總得來說,delta對沖還有不足的地方,我們將在以后和大家討論其他希臘字母(如gamma)的對沖方案。
本文計算期權價值所用的軟件是VBA和基于Excel的金融估值神器QuantPlus Analytics。除了常用的Black-Scholes定價模型,QuantPlus Analytics還提供各種定價引擎可以對各種金融工具進行定價。在該定價過程中,我們使用的是歷史波動率或者隱含波動率,在實踐中,隱含波動率與strike和期限是相關的,即波動率不是常數,不同的strike和不同期限的期權的隱含波動率不同,這就是所謂的波動率曲面,QuantPlus Analytics也可以引用波動率曲面數據,來實現對各種期限和不同strike的期權的定價。