Present Value Implementation
Overview
Full Script
def present_value(cash_flows, discount_curve, includeSettlementDateFlows=False, npv_date=None, settlement_date=None):
discount_curve = discount_curve.handle
cash_flow_dates = [ql.Date(int(x.date.split('-')[2]),int(x.date.split('-')[1]), int(x.date.split('-')[0]))
for x in cash_flows
]
cash_flow_amounts = [x.amount for x in cash_flows]
# Instantiate SimpleCashFlow objects
cash_flows = [
ql.SimpleCashFlow(amount, date)
for amount, date in zip(cash_flow_amounts, cash_flow_dates)
]
if npv_date != None:
npv_date = ql.Date(npv_date, "%Y-%m-%d")
pass
if settlement_date != None:
settlement_date = ql.Date(settlement_date, "%Y-%m-%d")
pass
# The boolean includeSettlementDateFlows 'False' indicates we do not include past/expired cash flows
if npv_date != None and settlement_date != None:
return ql.CashFlows.npv(cash_flows, discount_curve, includeSettlementDateFlows, settlement_date, npv_date)
return ql.CashFlows.npv(cash_flows, discount_curve, includeSettlementDateFlows)