def loadAndSaveMarketData(self, pricingDate, marketId): ''' assumes that 'EOD' marketId exists ''' eodCurve = InterestRateCurve() eodCurve.ccy = self.tCBond.ccy eodCurve.index = Enum.Index('LIBOR') eodCurve.term = 'M' eodCurve.numTerms = 3 eodCurve.pricingDate = pricingDate eodCurve.marketId = 'EOD' eodCurve.load() irCurve = InterestRateCurve() irCurve.ccy = self.tCBond.ccy irCurve.index = Enum.Index('LIBOR') irCurve.term = 'M' irCurve.numTerms = 3 irCurve.pricingDate = pricingDate irCurve.marketId = marketId eodRates = eodCurve.getRates() for rate in eodRates: irCurve.addRate(rate) irCurve.save() eodBondOAS = BondOAS.objects.get(tCBond=self.tCBond, pricingDate=pricingDate, marketId='EOD') bondOAS = BondOAS(tCBond=self.tCBond, pricingDate=pricingDate, marketId=marketId,mid=eodBondOAS.mid) bondOAS.save()
def testBuildMMCurve(self): curve = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TEST1') curve.load() # curve.printCurve() cv = curve.buildZeroCurve() for node in cv.nodes(): a = node
def marketData(self, pricingDate, marketId=''): irCurve = InterestRateCurve() irCurve.ccy = self._tcSwap.ccy irCurve.index = Index('LIBOR') irCurve.term = 'M' irCurve.numTerms = 3 irCurve.pricingDate = pricingDate irCurve.marketId = marketId irCurve.load() l = [] l.append(irCurve) return l
def testLoadAndSaveMarketData_TODO(self): #curve should never exist self.pos.loadAndSaveMarketData(pricingDate=Date.Date(1,1,2009), marketId=self.marketId) #now, curve should exist irCurve = InterestRateCurve() irCurve.ccy = Enum.Currency('USD') irCurve.index = Enum.Index('LIBOR') irCurve.term = 'M' irCurve.numTerms = 3 irCurve.pricingDate = Date.Date(1,1,2009) irCurve.marketId = self.marketId irCurve.load() #now, delete again so that next test will work irCurve.delete()
def marketData(self, pricingDate, marketId=''): irCurve = InterestRateCurve() irCurve.ccy = self.tCBond.ccy irCurve.index = Enum.Index('LIBOR') irCurve.term = 'M' irCurve.numTerms = 3 irCurve.pricingDate = pricingDate irCurve.marketId = marketId irCurve.load() l = [] l.append(irCurve) ##print pricingDate bondOAS = BondOAS.objects.get(tCBond=self.tCBond, pricingDate=pricingDate, marketId=marketId) l.append(bondOAS) return l
def loadInterestRateFromCSVFile(self, fileName): ''' Downloads prices from fileName. fileName needs to include full path ''' file = open(fileName,'r') lastDate = Date.Date(month=1,day=1,year=1972) for line in file: items = line.split(',') #skip first line which is headers if items[0] == 'date': continue #create new curve if date has changed curveDate = self.createDateFromString(items[0]) if curveDate <> lastDate: newCurve = InterestRateCurve() newCurve.pricingDate = curveDate newCurve.ccy = items[1] newCurve.index = items[2] newCurve.marketId = items[3] newCurve.term = items[4] newCurve.numTerms = int(items[5]) newCurve.save() newCurve.load() #Delete all rates in case the curve already existed rates = InterestRate.objects.filter(curve=newCurve) if rates: rates.delete() curve = InterestRateCurve() curve.pricingDate = curveDate curve.ccy = items[1] curve.index = items[2] curve.marketId = items[3] curve.term = items[4] curve.numTerms = int(items[5]) curve.load() rate = InterestRate() rate.curve = curve rate.type = items[6] rate.term = items[7] rate.numTerms = int(items[8]) rate.mid = float(items[9]) rate.save() lastDate = curveDate
def testSingleIRCurveScenario(self): irA = InterestRateCurve() irA.ccy = "USD" irA.index = "LIBOR" irA.term = 'M' irA.numTerms = 3 irA.marketId = 'TEST1' irA.pricingDate = Date.Date(month=9, day=12, year=2011) irA.load() scenarioBase = MarketDataScenario.MarketDataScenario() scenarioBase.name = 'Base' scenarioBase.marketData = irA #print scenarioBase scenarioUp = MarketDataScenario.MarketDataScenario() scenarioUp.name = 'Up' irB = copy.copy(irA) for item in irB.rates: item.mid = item.mid * 1.01 scenarioUp.marketData = irB
def testUpdateRate(self): ''' Tests the update of a rate value and save it to DB ''' curve = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TMP') curve.addRate(InterestRate(term='M', numTerms=1, type='Deposit', mid=0.01, curve=curve)) curve.addRate(InterestRate(term='M', numTerms=3, type='Deposit', mid=0.01, curve=curve)) curve.save() curve = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TMP') curve.load() self.failIf(curve.rates[1].mid <> 0.01, "Rate incorrect") self.failIf(len(curve.rates) <> 2, "Number of rates incorrect") curve.rates[1].mid = 0.02 curve.save() curveAfterUpdate = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TMP') curveAfterUpdate.load() self.failIf(curveAfterUpdate.rates[1].mid <> 0.02, "Updated rate incorrect") self.failIf(len(curveAfterUpdate.rates) <> 2, "Number of updated rates incorrect") curveAfterUpdate.rates[1].mid = 0.01 curveAfterUpdate.save() curve = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TMP') curve.load() self.failIf(curve.rates[1].mid <> 0.01, "Rate incorrect") self.failIf(len(curve.rates) <> 2, "Number of rates incorrect")
def loadAndSaveMarketData(self, pricingDate, marketId): ''' assumes that 'EOD' marketId exists algorithm is to load the EOD curve and save it with marketId ''' eodCurve = InterestRateCurve() eodCurve.ccy = self._tcSwap.ccy eodCurve.index = Index('LIBOR') eodCurve.term = 'M' eodCurve.numTerms = 3 eodCurve.pricingDate = pricingDate eodCurve.marketId = 'EOD' eodCurve.load() irCurve = InterestRateCurve() irCurve.ccy = self._tcSwap.ccy irCurve.index = Index('LIBOR') irCurve.term = 'M' irCurve.numTerms = 3 irCurve.pricingDate = pricingDate irCurve.marketId = marketId eodRates = eodCurve.getRates() for rate in eodRates: irCurve.addRate(rate) irCurve.save()
def testLoadCurve(self): curve = InterestRateCurve(ccy='USD', index=Index('LIBOR'), term='M', numTerms=3, pricingDate=self.pricingDate, marketId='TEST1') curve.load()