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)