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')