Python 无效循环访问选项类型
我有一个变量字典,可以对它们进行一些计算。在“期权类型”下,我检查它是买入期权还是卖出期权,但我认为我通过循环来做这件事效率低下。它是有效的,但我认为有一个更好的方法来实现这一点Python 无效循环访问选项类型,python,options,delta,Python,Options,Delta,我有一个变量字典,可以对它们进行一些计算。在“期权类型”下,我检查它是买入期权还是卖出期权,但我认为我通过循环来做这件事效率低下。它是有效的,但我认为有一个更好的方法来实现这一点 #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(o
#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
您能给我们一个opt/options中有哪些内容的示例输入吗?我猜你有多个操作在那里,但我想在进一步优化之前再检查一下;我很难理解你的代码。在b=e**-opt['Risk_Rate']*opt['expiration_Days']中,b似乎是一个浮动,但在opt['Delta'][type]=norm.cdfd1[type]*b[type]中,b似乎是一个列表或可能是一个字典。不,b只是字典中另一个具有选项文件长度的列变量。我使用循环访问每一行,并使用b中的一行进行计算。您使用的是什么库?像numpy?如果是这样的话-应该明确,也许可以添加适当的标签。我会在以后的帖子中记住这一点。我使用了几个库:np是numpy,因为数学导入日志不起作用。对于norm.cdf是scipy,对于data是pandas。