Python, FpML, 與QuantLib結合的第一次嚐試
股票期權 – 從 FpML 到 QuantLib
2019 Alvin Cho. Provided ‘AS IS’. 29 April 2019. No copyright!
版權沒有, 歡迎使用, 沒有任何保證. 裡面使用的估值方法可以因為任何理由不正確或是不適用你的情況, 請完全理解再使用.
計劃將 FpML 和 QuantLib 結合, 將 FpML 文件描述的產品進行估值. 這是第一個嚐試.
這篇文章的目的不是教程, 只是一次實驗, 所以沒有說明很詳細.
導入 FpML 文件
from lxml import etree
利用 etree.parse 將 xml 檔案載入並 parse. 這個文檔是 FpML 5.11 Comfirmation View 裡的 eqd-ex13. 將 FpML.org 下載的最新版規格解壓後就可以找到.
fp=etree.parse('FpML/confirmation/products/equity-options/eqd-ex13-1996-american-call-stock.xml')
Confirmation View 的 namespace 一律是這個, 在任何 xpath 搜尋都需要指定 namespace.
在 FpML 裡面 namespace 用得不是很複雜, 同一個 view 裡的都用一樣
ns={
"ns":"http://www.fpml.org/FpML-5/confirmation"}
asset=fp.xpath('//ns:trade/*',namespaces=ns)[1].tag
找到 tag 為 trade 的 node, 裡面有交易的細節. 第二個子節點就是這筆交易的產品. 這個文檔是做 equityOption
asset
'{http://www.fpml.org/FpML-5/confirmation}equityOption'
instrument=fp.xpath('//ns:instrumentId/text()',namespaces=ns)[0]
instrument
'STM-FP'
股票代碼是 FpML instrumentScheme 的代碼, 因為要取用 Yahoo 數據, 所以需要轉換.
-FP 表示是法國巴黎交易所. Yahoo 使用路透社的數據, 代碼為 Reuters Instrument Code, RIC, 巴黎交易所股票在代碼後加上 .PA
ric=instrument.replace('-FP','.PA')
ric
'STM.PA'
exercise=fp.xpath('//ns:equityExercise/*',namespaces=ns)[0].tag
找到 行權方式, equityAmericanExercise 是美式期權. 其他要素一一提出
exercise
'{http://www.fpml.org/FpML-5/confirmation}equityAmericanExercise'
expiration=fp.xpath('//ns:expirationDate//ns:unadjustedDate/text