如何解决如何在嵌套字典中进行有效的循环,从而使字典最小化?
我试图多次最小化一个函数。我开发了一个名为BlackScholesModel
的类;此类包含要最小化的函数,即difference
类中的方法BlackScholesModel
。
我创建了一个嵌套字典来保存每个类对象。嵌套字典的代码为:
expirations = ('2020-12-17','2021-12-16')
today = datetime.now()
stock_price = stockquotes.Stock("^GSPC").current_price
BSM = {name:name for name in expirations}
for i,a in enumerate(expirations):
strikeP = {count:count for count in range(0,len(expirations))}
for j in range(0,len(strike[a])):
strikeP[j] = BlackScholesModel(datetime.strptime(expirations[i],"%Y-%m-%d"),\
today,stock_price,strike[a][j],\
premium=call_premium[a][j])
BSM[a] = strikeP
输出:
{'2020-12-17': {0: <BlackScholesMerton.BlackScholesModel at 0x22deb7f5708>,1: <BlackScholesMerton.BlackScholesModel at 0x22debc805c8>,2: <BlackScholesMerton.BlackScholesModel at 0x22dec1312c8>},'2021-12-16': {0: <BlackScholesMerton.BlackScholesModel at 0x22debd324c8>,1: <BlackScholesMerton.BlackScholesModel at 0x22debd36088>,2: <BlackScholesMerton.BlackScholesModel at 0x22debd36fc8>,}}
具有这个嵌套的字典,我想遍历每个元素并最小化每个类方法difference
;但是,len(BSM['2020-12-17'])
是93,而len(BSM['2021-12-16'])
是50。我有以下代码:
implied_vol = {name:name for name in expirations}
x0 = 1
for i,len(BSM[a])):
strikeP[j] = minimize(BSM[a][j].difference,x0)['x']
implied_vol[a] = strikeP
由于大量事务,计算机无法完成此操作。我试图找到一种使我的代码更高效的方法。我想以类似于嵌套字典BSM
的格式存储每个最小结果。任何帮助或想法都非常欢迎。
解决方法
毛里西奥
您是否尝试估计函数minimize(BlackScholesModel.difference,x0)
的平均执行时间?有了这个估算的数量,是否可以执行所需的最小化数量?
假设可以在合理的时间内执行此操作,则可以通过并行执行来更快地执行此操作:
from joblib import Parallel,delayed
def minimize_expiration(expiration_dict):
strikeP = {}
for i,bs in expiration_dict.items():
strikeP[i] = minimize(bs.difference,x0)['x']
return strikeP
N_JOBS = -1 # number of cores to use (-1 to use all available cores)
implied_vol_list = Parallel(n_jobs=N_JOBS,verbose=1)(delayed(minimize_expiration)(BSM[expiration]) for expiration in expirations)
IV = {expiration: iv for expiration,iv in zip(expirations,implied_vol_list)}
如果BlackScholesModel的实现不可序列化,则这种方法可能会遇到问题
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。