[英]Unable to find implied volatility using calcbsimpvol function in python
我有一個 NIFTY 期權價格數據集,並希望找到數據的隱含波動率
from calcbsimpvol import calcbsimpvol
cp = np.ones(len(final_data))
P = final_data["Close"].values
S = final_data["Underlying"].values
K = final_data["Strike Price"].values
tau = (final_data["Duration"]/365).values
r = final_data["rate"].values
q = np.zeros(len(final_data))
indicators = dict(cp=cp, P=P, S=S, K=K, tau=tau, r=r, q=q)
print("Indicators: \n", indicators)
sigma = calcbsimpvol(dict(cp=cp, P=P, S=S, K=K, tau=tau, r=r, q=q))
print("Sigma: \n", sigma)
運行上述代碼后的輸出為:
ValueError: operands could not be broadcast together with shapes (1138013,) (0,)
final_data 是包含所有 1138013 個點和所有必需參數的數據幀。
我該如何解決這個錯誤? 如果您有更好的方法使用 Black Scholes 模型找到隱含波動率,請隨時提及。
如果需要,請評論是否需要數據集的驅動器鏈接。
我是庫代碼的維護者。
我能夠重現它。 這里的問題是代碼假定基礎證券的價格是標量(1 個單一數字,例如50.5
或np.asarray(50.5)
)
所以代替S = final_data["Underlying"].values
你會像S = final_data["Underlying"][0]
。
當然,這只有在final_data
包含單一底層證券的期權數據時才有意義。 因此,如果您在 ?dataframe? 中有多個底層代碼,我建議您構建一個適配器並一次只發送一個底層代碼的數據。
否則,也許你有股票代碼/符號/代碼列來過濾:
final_data = pre_final_data.loc[final_data['symbol'] == 'spy']
S = final_data["Underlying"].values[0] # because now every row in "underlying" should be the same
對於更復雜的過濾/選擇,這可能會有所幫助: https : //pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html
感謝發布。 下次我在圖書館工作時會考慮這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.