def createBondAndEquityPortfolio(self): portfolio = Portfolio() position = EquityPosition.EquityPosition(95,'TEST1') portfolio.addPosition(position) position = BondPosition.BondPosition(100,'TEST1') portfolio.addPosition(position) return portfolio
def testTEST1PortfolioTEST1EquityCorrelation(self): pricingDate = self.pricingDate QuantLib.Settings.instance().evaluationDate = pricingDate.ql() portfolio1 = Portfolio.objects.get(name='TEST1', user='******') modelPositions = portfolio1.modelposition_set.filter(asOf=pricingDate) for modelPosition in modelPositions: position = CreatePosition(modelPosition) portfolio1.addPosition(position) # for p in portfolio1.positions: # print "************************************** %s" % str(p) timePeriods = VARUtilities.VARTimePeriodsAndSteps() timePeriods.generate(start = Date.Date(month=8,day=30,year=2011), end = self.pricingDate, num = 1, term = Enum.TimePeriod('D'), calendar = Calendar.US()) analysis1 = HistoricalVAR.HistoricalVAR(pricingDate=pricingDate, portfolio=portfolio1, timeSteps=timePeriods, confidenceInterval=0.95, marketId='TEST1') analysis1.run() pnls1 = analysis1.getPnLList() portfolio2 = Portfolio() modelPosition = ModelPosition(portfolio=portfolio2, positionType=PositionType('EQUITY'), ticker='TEST1', amount=110, asOf=pricingDate) portfolio2.addPosition(CreatePosition(modelPosition)) analysis2 = HistoricalVAR.HistoricalVAR(pricingDate=pricingDate, portfolio=portfolio2, timeSteps=timePeriods, confidenceInterval=0.95, marketId='TEST1') analysis2.run() pnls2 = analysis2.getPnLList() # print portfolio1.positions # print '********************************\n' # for p in portfolio1.positions: # print p # print '********************************\n' # print portfolio2.positions # for p in portfolio2.positions: # print p # print '********************************\n' # print pnls1 # print pnls2 # v1 = [pnl[1] for pnl in pnls1] # v2 = [pnl[1] for pnl in pnls2] # v1 = v1[1:] # v2 = v2[1:] # print v1 # print v2 pearsonCorr = pearsonr(pnls1,pnls2) # print '3: ' + str(pearsonCorr[0]) self.failIf(abs(0.655160228007 - pearsonCorr[0]) > 0.0000001, 'Pearson Correlation for TEST1 portfolio vs TEST1 stock incorrect')
def testOneBondAndOneEquity(self): marketDataContainer = MarketDataContainer.MarketDataContainer() stock = EquityPosition.EquityPosition(100,'TEST1') marketDataContainer.add(stock.marketData(pricingDate=self.pricingDate, marketId=self.marketId)) stock.marketDataContainer = marketDataContainer bond = BondPosition.BondPosition(10000, 'TEST1') marketDataContainer.add(bond.marketData(self.pricingDate, self.marketId)) bond.marketDataContainer = marketDataContainer portfolio = Portfolio() portfolio.addPosition(stock) portfolio.addPosition(bond) # print stock.NPV(self.pricingDate, self.marketId) # print bond.NPV(self.pricingDate, self.marketId) #print round(portfolio.NPV(pricingDate=self.pricingDate, marketId=self.marketId),2) self.failIf(round(portfolio.NPV(pricingDate=self.pricingDate, marketId=self.marketId),2) <> 1012696.1)
def main(): print 'Start' pricingDate = Date(month=9, day=12, year=2011) portfolio =Portfolio() QuantLib.Settings.instance().evaluationDate = pricingDate.ql() pos1 = BondPosition(100, 'TEST1') pos2 = EquityPosition(100,'TEST1') portfolio.addPosition(pos1) portfolio.addPosition(pos2) timePeriods = VARUtilities.VARTimePeriodsAndSteps() timePeriods.generate(start=Date(month=8,day=30,year=2011), end=Date(month=9,day=12,year=2011), num=1, term=TimePeriod('D').ql(), calendar=Calendar.US()) #print 'timePeriods: ' + str(timePeriods) analysis = HistoricalVAR(pricingDate=pricingDate, portfolio=portfolio, timeSteps=timePeriods, confidenceInterval=0.95, marketId='TEST1') print 'HVaR = %f' % analysis.run() print 'End'
def testOneBondAndOneEquityOver10Days(self): portfolio = Portfolio() portfolio.addPosition(BondPosition.BondPosition(100,'TEST1')) portfolio.addPosition(EquityPosition.EquityPosition(100,'TEST1')) pricingDate = self.pricingDate QuantLib.Settings.instance().evaluationDate = pricingDate.ql() timePeriods = VARUtilities.VARTimePeriodsAndSteps() timePeriods.generate(start = Date.Date(month=8,day=30,year=2011), end = self.pricingDate, num = 1, term = Enum.TimePeriod('D'), calendar = Calendar.US()) analysis = HistoricalVAR.HistoricalVAR(pricingDate=pricingDate, portfolio=portfolio, timeSteps=timePeriods, confidenceInterval=0.95, marketId='TEST1') # print '3: ' + str(analysis.run()) #Ballpark test only. The value makes sense but not exactly reconciled self.failIf(abs(-0.0510159444181-analysis.run()) > 0.0000001, 'Historical VaR result for TEST1 over 10 days incorrect')