Пример #1
0
 def setUp(self):
     self._pricingDate = Date(month=9,day=12,year=2011)
     self._marketId = 'TEST1'
     QuantLib.Settings.instance().evaluationDate = self._pricingDate.ql()
     self._tcSwap = TCSwap(name='Dummy',
                     ccy = Currency('USD'),
                     startDate = date(month=9,day=14,year=2011),
                     endDate = date(month=9,day=14,year=2016),
                     fixedCoupon = 0.01,
                     fixedBasis = Basis.createBasis('30360'),
                     fixedPaymentFrequency = Frequency('S'),
                     fixedPaymentRollRule = Roll('MF'),
                     fixedPaymentCalendar = Calendar.createCalendar('US'),
                     floatingIndex = Index('LIBOR'),
                     floatingIndexTerm = TimePeriod('M'),
                     floatingIndexNumTerms = 3,
                     floatingSpread = 0.0,
                     floatingBasis = Basis.createBasis('30360'),
                     floatingPaymentFrequency = Frequency('Q'),
                     floatingPaymentRollRule = Roll('MF'),
                     floatingPaymentCalendar = Calendar.createCalendar('US'),
                     floatingResetFrequency = Frequency('Q'),
                     floatingResetRollRule = Roll('MF'),
                     floatingResetCalendar = Calendar.createCalendar('US'))
     self._pos = SwapPosition(amount=1000000, tcSwap=self._tcSwap)
Пример #2
0
 def to_python(self, value):
     if isinstance(value, Calendar.Calendar):
         return value
     if value is None or value == '':
         return value
     #TODO: catch exception and raise ValidationError for forms
     return Calendar.createCalendar(value)
Пример #3
0
    def dataForSuccessfulTest(self):
        '''
        This saves all data so that system tests run successfully
        Pricing date is 9/12/2011 with market data id TEST1
        '''
        testDatePython = date(month=9,day=12,year=2011)
        testDate = Date(month=9,day=12,year=2011)
        testFirstDate = Date(month=8,day=30,year=2011)
        
        if not Location.objects.filter(name='Test1').exists():
            location = Location()
            location.name = 'Test1'
            location.pricingDate = date(month=9,day=12,year=2011)
            location.save()
        location = Location.objects.get(name='Test1')
            
        if not User.objects.filter(username='******').exists():
            user = User.objects.create_user(username='******',email='*****@*****.**',\
                                            password='******')
            user.is_staff = True
            user.is_superuser = True
            user.save()

        if not User.objects.filter(username='******').exists():
            User.objects.create_user(username='******',email='*****@*****.**',\
                                     password='******')

        if not User.objects.filter(username='******').exists():
            User.objects.create_user(username='******',email='*****@*****.**',\
                                     password='******')

        if not User.objects.filter(username='******').exists():
            User.objects.create_user(username='******',email='*****@*****.**',\
                                     password='******')

        user1 = User.objects.get(username='******')
        if not UserProfile.objects.filter(user=user1).exists():
            up1 = UserProfile()
            up1.user = user1
            up1.location = location
            up1.marketId = 'EOD'
            up1.save()
            
        user2 = User.objects.get(username='******')
        if not UserProfile.objects.filter(user=user2).exists():
            up2 = UserProfile()
            up2.user = user2
            up2.location = location
            up2.marketId = 'EOD'
            up2.save()

        user3 = User.objects.get(username='******')
        if not UserProfile.objects.filter(user=user3).exists():
            up3 = UserProfile()
            up3.user = user3
            up3.location = location
            up3.marketId = 'TEST1'
            up3.save()

        user4 = User.objects.get(username='******')
        if not UserProfile.objects.filter(user=user4).exists():
            up4 = UserProfile()
            up4.user = user4
            up4.location = location
            up4.marketId = 'DEMO'
            up4.save()
        
        if not TCBond.objects.filter(name='TEST1').exists():
            bond = TCBond()
            bond.name = 'TEST1'
            bond.ccy = 'USD'
            cusip = Enum.BondIdentifierType('CUSIP') 
            if not Identifier.objects.filter(name='123456789', type=cusip):
                identifier = Identifier()
                identifier.name='123456789'
                identifier.type=cusip
                identifier.save()
            identifier = Identifier.objects.get(name='123456789', type=cusip)  
            bond.identifiers = identifier
            bond.startDate = Date(month=9,day=12,year=2010).toPythonDate()
            bond.endDate = Date(month=9,day=12,year=2020).toPythonDate()
            bond.coupon = 0.01
            bond.basis = '30360'
            bond.paymentFrequency = Enum.Frequency('S')
            bond.paymentRollRule = Enum.Roll('MF')
            bond.paymentCalendar = Calendar.createCalendar('US')
            bond.assetType = Enum.AssetType('NYMUNIBOND')
            bond.save()

        if not Equity.objects.filter(ticker='TEST1').exists():
            equity = Equity()
            equity.ticker = 'TEST1'
            equity.assetType = Enum.AssetType('EQUITYUS')
            equity.save()
        equity = Equity.objects.get(ticker='TEST1')
        stockPrice = StockPrice()
        stockPrice.equity = equity
        stockPrice.pricingDate = testDate
        stockPrice.marketId = 'TEST1'
        stockPrice.mid = 123.45
        stockPrice.save()
        equity = Equity.objects.get(ticker='TEST1')
        stockPrice = StockPrice()
        stockPrice.equity = equity
        stockPrice.pricingDate = testFirstDate
        stockPrice.marketId = 'TEST1'
        stockPrice.mid = 123.44
        stockPrice.save()
        if not Equity.objects.filter(ticker='TEST2').exists():
            equity = Equity()
            equity.ticker = 'TEST2'
            equity.assetType = Enum.AssetType('EQUITYUS')
            equity.save()
        equity = Equity.objects.get(ticker='TEST2')
        stockPrice = StockPrice()
        stockPrice.equity = equity
        stockPrice.pricingDate = testDate
        stockPrice.marketId = 'TEST1'
        stockPrice.mid = 543.21
        stockPrice.save()
        equity = Equity.objects.get(ticker='TEST2')
        stockPrice = StockPrice()
        stockPrice.equity = equity
        stockPrice.pricingDate = testFirstDate
        stockPrice.marketId = 'TEST1'
        stockPrice.mid = 543.11
        stockPrice.save()
        
        if not Portfolio.objects.filter(name='TEST1', user='******').exists():
            portfolio =Portfolio()
            portfolio.name = 'TEST1'
            portfolio.user = '******'
            portfolio.save()
        portfolio =Portfolio.objects.get(name='TEST1', user='******')
        
        if not ModelPosition.objects.filter(asOf=testDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('EQUITY'),
                                       ticker = 'TEST1', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('EQUITY')
            position.ticker = 'TEST1'
            position.amount = 100.0
            position.save()

        if not ModelPosition.objects.filter(asOf=testDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('EQUITY'),
                                       ticker = 'TEST2', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('EQUITY')
            position.ticker = 'TEST2'
            position.amount = 100.0
            position.save()

        if not ModelPosition.objects.filter(asOf=testDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('BOND'),
                                       ticker = 'TEST1', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('BOND')
            position.ticker = 'TEST1'
            position.amount = 100.0
            position.save()
       
        if not ModelPosition.objects.filter(asOf=testFirstDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('EQUITY'),
                                       ticker = 'TEST1', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testFirstDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('EQUITY')
            position.ticker = 'TEST1'
            position.amount = 100.0
            position.save()

        if not ModelPosition.objects.filter(asOf=testFirstDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('EQUITY'),
                                       ticker = 'TEST2', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testFirstDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('EQUITY')
            position.ticker = 'TEST2'
            position.amount = 100.0
            position.save()

        if not ModelPosition.objects.filter(asOf=testFirstDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('BOND'),
                                       ticker = 'TEST1', amount = 100.0).exists():
            position = ModelPosition()
            position.asOf=testFirstDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('BOND')
            position.ticker = 'TEST1'
            position.amount = 100.0
            position.save()
            
        if not ModelPosition.objects.filter(asOf=testFirstDate, portfolio=portfolio, 
                                       positionType = Enum.PositionType('CASH'),
                                       ticker = 'Cash', amount = 1000.0).exists():
            position = ModelPosition()
            position.asOf=testFirstDate
            position.portfolio = portfolio
            position.positionType = Enum.PositionType('CASH')
            position.ticker = 'Cash'
            position.amount = 1000.0
            position.save()
            
        curve = InterestRateCurve()
        curve.ccy = 'USD'
        curve.index = Enum.Index('LIBOR')
        curve.term = Enum.TimePeriod('M')
        curve.numTerms = 3
        curve.pricingDate =testDate
        curve.marketId = 'TEST1'

        curve.addRate(InterestRate(type='Deposit', term=Enum.TimePeriod('M'),
                                   numTerms=1,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Deposit', term=Enum.TimePeriod('M'),
                                   numTerms=3,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=1,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=5,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=10,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=30,mid=0.01,curve=curve))
        curve.save()

        curve = InterestRateCurve()
        curve.ccy = 'USD'
        curve.index = Enum.Index('LIBOR')
        curve.term = Enum.TimePeriod('M')
        curve.numTerms = 3
        curve.pricingDate = testFirstDate
        curve.marketId = 'TEST1'

        curve.addRate(InterestRate(type='Deposit', term=Enum.TimePeriod('M'),
                                   numTerms=1,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Deposit', term=Enum.TimePeriod('M'),
                                   numTerms=3,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=1,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=5,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=10,mid=0.01,curve=curve))
        curve.addRate(InterestRate(type='Swap', term=Enum.TimePeriod('Y'),
                                   numTerms=30,mid=0.01,curve=curve))
        curve.save()
        
        if not SwaptionVolatilitySurface.objects.filter(ccy=Enum.Currency('USD'), index=Enum.Index('LIBOR'), term=Enum.TimePeriod('M'), numTerms=3, 
                                                        pricingDate=testDate, marketId='TEST1'):
            #Special case where I just append the vols. Should use a function
            vols = SwaptionVolatilitySurface(ccy=Enum.Currency('USD'), index=Enum.Index('LIBOR'), term=Enum.TimePeriod('M'), numTerms=3, 
                                             pricingDate=testDate, marketId='TEST1')
            volPoints = []
            volPoints.append(SwaptionVolatility(expiryTerm=Enum.TimePeriod('Y'), expiryNumTerms=1, underlyingTerm=Enum.TimePeriod('Y'),
                                                underlyingNumTerms=3, mid=0.40, surface=vols))
            volPoints.append(SwaptionVolatility(expiryTerm=Enum.TimePeriod('Y'), expiryNumTerms=3, underlyingTerm=Enum.TimePeriod('Y'),
                                                underlyingNumTerms=3, mid=0.45, surface=vols))
            volPoints.append(SwaptionVolatility(expiryTerm=Enum.TimePeriod('Y'), expiryNumTerms=1, underlyingTerm=Enum.TimePeriod('Y'),
                                                underlyingNumTerms=5, mid=0.5, surface=vols))
            volPoints.append(SwaptionVolatility(expiryTerm=Enum.TimePeriod('Y'), expiryNumTerms=3, underlyingTerm=Enum.TimePeriod('Y'),
                                                underlyingNumTerms=5, mid=0.55, surface=vols))
            vols.addVolatilities(volPoints)
            vols.save()
            
        if not BondOAS.objects.filter(tCBond=TCBond.objects.get(name='TEST1'),pricingDate=testDate,
                                   marketId='TEST1'):
            bondOAS = BondOAS(tCBond=TCBond.objects.get(name='TEST1'),pricingDate=testDate,
                              marketId='TEST1',mid=0.0012)
            bondOAS.save()
        #done for only one test BondPositionTest.testLoadAndSaveMarketData
        if not BondOAS.objects.filter(tCBond=TCBond.objects.get(name='TEST1'),pricingDate=Date(month=1,day=1,year=2009),
                                      marketId='EOD'):
            bondOAS = BondOAS(tCBond=TCBond.objects.get(name='TEST1'),pricingDate=Date(month=1,day=1,year=2009),
                              marketId='EOD',mid=0.01)
            bondOAS.save()
        #now load zero oas for all dates we do testing
        timePeriods = VARUtilities.VARTimePeriodsAndSteps()
        timePeriods.generate(start = Date(month=8,day=30,year=2011), end = Date(month=9,day=12,year=2011), 
                             num = 1, term = Enum.TimePeriod('D'), calendar = Calendar.US())
        for timeStep in timePeriods.timeSteps:
            if not BondOAS.objects.filter(tCBond=TCBond.objects.get(name='TEST1'), pricingDate=timeStep, marketId='TEST1'):
                bondOAS = BondOAS(tCBond=TCBond.objects.get(name='TEST1'), pricingDate=timeStep, marketId='TEST1',mid=0.0)
                bondOAS.save()
        
        fileLoader = MarketDataLoader.EquityPriceLoader()
        fileLoader.loadStockPriceFromCSVFile(ROOT_PATH+'/misc/data/StockPricesForHVaRTests.csv')
        fileLoader.loadInterestRateFromCSVFile(ROOT_PATH+'/misc/data/InterestRatesForHVaRTests.csv')

        if not HvarConfiguration.objects.filter(name='TEST1').exists():
            config = HvarConfiguration()
            config.name = 'TEST1'
            config.startDate = Date(month=8,day=30,year=2011).toPythonDate()
            config.endDate = Date(month=9,day=12,year=2011).toPythonDate()
            config.stepSize = 1
            config.stepUnit = Enum.TimePeriod('D')
            config.calendar = Calendar.US()
            config.confLevel = 0.95
            config.marketId = 'TEST1'
            config.save()