我有一个变量词典(选项)来对它们进行一些计算。在选项类型下,我正在检查它是一个调用还是一个put选项,但我认为我通过循环无效地执行此操作。它有效,但我认为有更好的方法来做这个if语句。
#Calculate Delta
for opt in options:
a = opt['newIV'] * (opt['Expiry_Days']) ** 0.5
b = e ** -(opt['Risk_Rate'] * opt['Expiry_Days'])
d1 = (np.log(opt['Underlying_Price'] / opt['Strike']) + (opt['Risk_Rate'] + opt['newIV']**2 / 2) * opt['Expiry_Days']) / a
d2 = d1 - a
opt['Delta'] = 0.0
for type in range(0, len(opt['Type'])):
if opt['Type'][type] == 'call':
opt['Delta'][type] = norm.cdf(d1[type]) * b[type]
elif opt['Type'][type] == 'put':
opt['Delta'][type] = (norm.cdf(d1[type]) - 1) * b[type]
else:
print 'Delta error!!! No call or put'
帮助将不胜感激,因为我将进行许多类似的计算,我不认为循环是一种有效的方法。
这是一个示例输入(不包括所有列)
Strike Expiry Type Symbol Last Bid Ask
0 90 2015-12-11 call AAPL151211C00090000 28.05 27.80 28.10
1 95 2015-12-11 call AAPL151211C00095000 24.05 22.75 23.10
2 100 2015-12-11 call AAPL151211C00100000 19.08 17.85 18.15
3 102 2015-12-11 call AAPL151211C00102000 19.92 15.85 16.15
4 103 2015-12-11 call AAPL151211C00103000 15.26 14.90 15.15