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。