我试图找到/应用python Solver(SciPy / SymPy),但我不确定如何正确应用它。
目标是我希望找到更好的解决方案,以获得最优优惠券率,这将导致 IRR 等于无风险利率
函数EIRRCal
将返回coupon rate
(非最佳值),IRR
和diff
IRR与无风险率之间的差异。
我尝试并使用linspace
函数来确定函数可能结果的范围,如下所示(仅为整个代码的一部分):
def optimalCoupon(recovery_rate,marginal_pd_rate,iteration):
coupons = np.linspace(0.001,0.300,iteration)
amat = []
bmat = []
cmat = []
x = recovery_rate
y = marginal_pd_rate
for coupon in coupons:
a_coupon, a_eirr, a_diff = EIRRCal(coupon, period, x, y)
amat.append(a_coupon)
bmat.append(a_eirr)
cmat.append(abs(a_diff))
for index, value in enumerate(cmat):
if value == min(cmat):
lowest_index = index
optimal_coupon = amat[lowest_index]
b_coupon, b_eirr, b_diff = EIRRCal(optimal_coupon, period, x, y)
return [b_coupon, b_eirr, b_diff]
然而,它需要相当长的处理时间(仅有500行数据帧约为7分钟,迭代次数= 1000次)