Exemple #1
0
    def _calculateBODRisk(self,
                          contract,
                          riskTenors=[],
                          startTenors=[],
                          rates=[]):
        riskCurveId = '_risk_%s' % 'BOD'
        rc = self._buildSwapCurve(riskCurveId,
                                  self.endDate,
                                  self.indexName,
                                  self.bodIndexCurve,
                                  self.bodDiscCurve,
                                  riskTenors,
                                  startTenors,
                                  riskRates=rates)
        fwdCurveName, discCurveName, curveEngineName = rc[0]
        numCurvePoints = len(riskTenors)
        fairRates = self._extractFairRate(rc)
        #         print 'FairRates: ', fairRates

        print '\nBuilding curve pack for BOD risk'
        curveDate = self.endDate
        curvePackName = '_riskCurvePack_%s' % curveDate.strftime('%Y%m%d')
        rc = p.py_BuildCurvePack(curvePackName, curveEngineName)
        print 'Built curve pack %s' % rc

        curveMap = [('Index', 'Curve'), (self.curveMapIndex, fwdCurveName)]
        print '\nCalculating BOD risk...'
        rcIndex = p.py_CurvePackRisk(curvePackName,
                                     instrumentNames=[contract],
                                     curveMap=curveMap,
                                     discountCurveName=discCurveName,
                                     showBasePv=True,
                                     riskMode="index")
        rcDisc = p.py_CurvePackRisk(curvePackName,
                                    instrumentNames=[contract],
                                    curveMap=curveMap,
                                    discountCurveName=discCurveName,
                                    showBasePv=True,
                                    riskMode="discount")
        #         print('\nCurvePackRisk:')
        #         pprint.pprint(rc)
        return (rcIndex, rcDisc, fairRates)
Exemple #2
0
def runIMMRIsk():
    bucketDates = p.py_IMMNextDates(anchorDate, 30, '3M',
                                    datetime.date(2025, 2, 25), 'CFFEX')
    print '\n\nIMM dates: '
    pprint.pprint(bucketDates)
    bucketDates = [anchorDate] + list(bucketDates)
    rc = p.py_BuildRPCurvePack(curvePackName, [curveName, discCurveName],
                               bucketDates)
    print '\nBuilt RP curve pack: %s' % rc

    rc = p.py_CurvePackRisk(curvePackName,
                            instrumentNames=[swapId],
                            curveMap=[('Index', 'Curve'),
                                      ('_' + indexName, curveName)],
                            discountCurveName=discCurveName,
                            showBasePv=True)
    print '\nCurvePackRisk:'
    pprint.pprint(rc)
Exemple #3
0
def runCFETSCurveRisk():
    rc = p.py_BuildSwapCurve(swapCurveId, anchorDate, indexName, tenors, rates,
                             curveName, discCurveName)
    print '\n\nBuilt swap curve: '
    pprint.pprint(rc, width=500)

    curve, discCurve, curveEngineName = rc[0]
    rc = p.py_BuildCurvePack(curvePackName, curveEngineName)
    print '\nBuilt curve pack %s' % rc

    rc = p.py_CurvePackRisk(curvePackName,
                            instrumentNames=[swapId],
                            curveMap=[('Index', 'Curve'),
                                      ('_' + indexName, curve)],
                            discountCurveName=discCurve,
                            showBasePv=True)
    pprint.pprint('\nCurvePackRisk:')
    pprint.pprint(rc)
    def _calculateRisk(self,
                       curveTemplate='RISK',
                       ignoreFixing=False,
                       startTenors=[]):
        curveEngineName, indexCurveName, discCurveName = self._createSwapCurve(
            curveTemplate=curveTemplate, startTenors=startTenors)
        rc = p.py_BuildCurvePack(self.curvePackName, curveEngineName)
        print 'Built curve pack %s' % rc

        curveMap = [('Index', 'Curve'), ('_' + self.indexName, indexCurveName)]
        rc = p.py_CurvePackRisk(self.curvePackName,
                                instrumentNames=[self.contract],
                                curveMap=curveMap,
                                discountCurveName=discCurveName,
                                forecastTodaysFixing=ignoreFixing,
                                showBasePv=True)
        pprint.pprint('\nCurvePackRisk:')
        pprint.pprint(rc)
        return rc
Exemple #5
0
    def _calculateRisk(self, curve, curveDate):
        tenors, rates = self.pdayMktData
        riskCurveId = '_risk_%s' % self.indexName
        #         rc = p.py_BuildSwapCurve(riskCurveId, self.endDate, self.indexName, tenors, rates, curve, useExtCurveAsBase=False, template='RISK')
        rc = p.py_BuildSwapCurve(riskCurveId, curveDate, self.indexName,
                                 tenors, rates, curve)
        fwdCurveName, discCurveName, curveEngineName = rc[0]
        curvePackName = '_riskCurvePack_%s' % curveDate.strftime('%Y%m%d')
        rc = p.py_BuildCurvePack(curvePackName, curveEngineName)
        print 'Built curve pack %s' % rc

        curveMap = [('Index', 'Curve'), ('_' + self.indexName, fwdCurveName)]
        rc = p.py_CurvePackRisk(curvePackName,
                                instrumentNames=[self.contract],
                                curveMap=curveMap,
                                discountCurveName=discCurveName,
                                showBasePv=True)
        #         print('\nCurvePackRisk:')
        #         pprint.pprint(rc)
        return rc
    def runIMMRisk(self):
        curve = self._createCfetsCurve()
        bucketDates = p.py_IMMNextDates(self.anchorDate, 40, '3M',
                                        datetime.date(2028, 12, 23), 'CFFEX')
        print '\n\nIMM dates: '
        pprint.pprint(bucketDates)
        bucketDates = [self.anchorDate] + list(bucketDates)
        rc = p.py_BuildRPCurvePack(self.curvePackName, [curve, curve],
                                   bucketDates)
        print '\nBuilt RP curve pack: %s' % rc

        curveMap = curveMap = [('Index', 'Curve'),
                               ('_' + self.indexName, curve)]
        rc = p.py_CurvePackRisk(self.curvePackName,
                                instrumentNames=[self.contract],
                                curveMap=curveMap,
                                discountCurveName=curve,
                                showBasePv=True)
        print '\nCurvePackRisk:'
        pprint.pprint(rc)
Exemple #7
0
    def _calculateIMMEstimate(self, contract):
        print '\nBuilding IMM curve pack'
        curveDate = self.endDate
        curvePackName = '_immriskCurvePack_%s' % curveDate.strftime('%Y%m%d')

        immDates = p.py_IMMNextDates(self.endDate, 40, '3M',
                                     datetime.date(2028, 12, 23), 'CFFEX')
        #         print '\n\nIMM dates: '
        #         pprint.pprint(immDates)
        startDates = [self.endDate] + list(immDates)[:-1]
        rc = p.py_BuildRPCurvePack(curvePackName,
                                   [self.bodIndexCurve, self.bodDiscCurve],
                                   startDates)
        print '\nBuilt RP curve pack: %s' % rc

        curveMap = [('Index', 'Curve'),
                    (self.curveMapIndex, self.bodIndexCurve)]
        rcDisc = p.py_CurvePackRisk(curvePackName,
                                    instrumentNames=[contract],
                                    curveMap=curveMap,
                                    discountCurveName=self.bodDiscCurve,
                                    showBasePv=True,
                                    riskMode='discount')
        discDelta = [r[1] for r in rcDisc[2:]]
        rcIndex = p.py_CurvePackRisk(curvePackName,
                                     instrumentNames=[contract],
                                     curveMap=curveMap,
                                     discountCurveName=self.bodDiscCurve,
                                     showBasePv=True,
                                     riskMode='index')
        indexDelta = [r[1] for r in rcIndex[2:]]
        """
        print '\nCurvePackRisk:'
        print 'Index risk:'
        pprint.pprint(rcIndex)
        print 'Discount risk:'
        pprint .pprint(rcDisc)
        """

        bodIndexRates = p.py_YieldTSForwardRate(self.bodIndexCurve, startDates,
                                                immDates, self.dayCount)
        bodDiscRates = p.py_YieldTSForwardRate(self.bodDiscCurve, startDates,
                                               immDates, self.dayCount)
        """
        print "Index forward rates:"
        print bodIndexRates
        print "Discount forward rates:"
        print bodDiscRates
        """

        liveIndexRates = p.py_YieldTSForwardRate(self.liveIndexCurve,
                                                 startDates, immDates,
                                                 self.dayCount)
        liveDiscRates = p.py_YieldTSForwardRate(self.liveDiscCurve, startDates,
                                                immDates, self.dayCount)
        """
        print "Index forward rates:"
        print liveIndexRates
        print "Discount forward rates:"
        print liveDiscRates
        """
        indexEstimate = [
            risk * (live - bod) * 10000.0 for risk, live, bod in zip(
                indexDelta, liveIndexRates, bodIndexRates)
        ]
        discEstimate = [
            risk * (live - bod) * 10000.0
            for risk, live, bod in zip(discDelta, liveDiscRates, bodDiscRates)
        ]

        print 'IMM dates:'
        symDates = p.py_IMMDateToSymbol(immDates)
        print symDates
        print ', '.join(['{:,.0f}'] *
                        len(indexEstimate)).format(*indexEstimate)
        print ', '.join(['{:,.0f}'] * len(discEstimate)).format(*discEstimate)
        immEstimate = sum(indexEstimate) + sum(discEstimate)
        return immEstimate