def py_IMMNextDates(startDate, numOfDates, datePref, endDate, rule='CFFEX'): '''Optional rule is one of 'CFFEX, 'CFFEXLT', 'INTERNATIONAL' ''' errVec = Str_Vec() dateResult = PkInt_Vec() symResult = Str_Vec() rc = pk_IMMNextDates(dateToPkDate(startDate), numOfDates, datePref, dateToPkDate(endDate), rule, dateResult, symResult, errVec) _checkAndRaiseErr(errVec) return tuple((pkDateToDate(i) for i in dateResult))
def py_CreateIRSwap(swapId, conventions, asofDate, **att): errVec = Str_Vec() result = Param_VecVec() # att = {} # for k in ('startDate', 'fwdStartTenor', 'endDate', 'endDateTenor', 'notional', 'fixedRate', # 'floatSpread', 'discCurveId', 'fwdCurveId', 'firstStubDate', 'lastStubDate', 'addFixingDelayToStartDate'): # att[k] = attributes.get(k, None) conventions = dictToKeyValueVec(conventions) rc = pk_CreateIRSwap(swapId, conventions, dateToPkDate(asofDate), dateToPkDate(att.get('endDate', None)), att.get('endDateTenor', ''), att.get('notional'), att.get('fixedRate'), att.get('floatSpread', 0.0), att.get('discCurveId', ''), att.get('fwdCurveId', ''), dateToPkDate(att.get('firstStubDate', None)), dateToPkDate(att.get('lastStubDate', None)), att.get('addFixingDelayToStartDate', True), result, errVec, att.get('fwdStartTenor', ''), att.get('resetFrequency', '')) _checkAndRaiseErr(errVec) return _unpackVecVecResult(result)
def py_SwapLegNPV(swapId, forwardCurveId, discountCurveId, cfAfterDate=None, legNumber=PkMissingInt, cfAfterDateInclusive=False, forecastTodaysFixing=False, debugLevel=0): errVec = Str_Vec() result = Param_VecVec() cfAfterDate = dateToPkDate(cfAfterDate) if cfAfterDate else PkMissingDate rc = pk_SwapLegNPV(_listToPkVec(swapId), legNumber, forwardCurveId, discountCurveId, cfAfterDate, cfAfterDateInclusive, forecastTodaysFixing, debugLevel, result, errVec) _checkAndRaiseErr(errVec) return _unpackVecVecResult(result)
def py_SwapLegAnalysis(swapId, legNumber, afterDate, forwardCurveId, discountCurveId, afterDateInclusive=True, forecastTodaysFixing=True, useSqlFriendlyColHeaders=True, selectedColumns='All', toDate=None): errVec = Str_Vec() result = Param_VecVec() if isinstance(selectedColumns, str): selectedColumns = [selectedColumns] selectedColumns = _listToPkVec(selectedColumns) rc = pk_SwapLegAnalysis(swapId, legNumber, dateToPkDate(afterDate), forwardCurveId, discountCurveId, afterDateInclusive, forecastTodaysFixing, useSqlFriendlyColHeaders, selectedColumns, dateToPkDate(toDate), result, errVec) _checkAndRaiseErr(errVec) return _unpackVecVecResult(result)
def py_BuildSwapCurve(curveName, anchorDate, indexName, tenors, rates, extFwdCurve, extDiscCurve='', startTenors=[], useExtCurveAsBase=True, template=''): '''returns forwardCurveId, discountCurveId, curveEngineId ''' result = Param_VecVec() errVec = Str_Vec() rc = pk_BuildSwapCurve(curveName, dateToPkDate(anchorDate), indexName, _listToPkVec(startTenors), _listToPkVec(tenors), _listToPkVec(rates, Double_Vec), extFwdCurve, extDiscCurve, result, errVec, useExtCurveAsBase, template) _checkAndRaiseErr(errVec) names = tuple(rc) return names, _unpackVecVecResult(result)
def py_SwapInfo(objId, legNumber, asOfDate, resultFormat=''): resultMap = Matrix_Map() errVec = Str_Vec() rc = pk_SwapInfo(_listToPkVec(objId), legNumber, dateToPkDate(asOfDate), resultFormat, resultMap, errVec) _checkAndRaiseErr(errVec) result = _unpackMatrix_Map(resultMap) for k, v in result.iteritems(): if len(v[0]) == 2: if v[0][0] == 'Key': result[k] = dict(v[1:]) elif len(v) == 2: result[k] = dict(zip(v[0], v[1])) return result
def py_SwapContract(swapId, convention, anchorDate, settleDate, maturity, notional, fixedRate): '''convention is one of CNY_REPO_7D CNY_SHIBOR_3M CNY_SHIBOR_ON CNY_DEPO_1Y ''' errVec = Str_Vec() result = Param_VecVec() pk_SwapContract(swapId, convention, dateToPkDate(anchorDate), Param_t(settleDate), Param_t(maturity), notional, fixedRate, result, errVec) _checkAndRaiseErr(errVec) created = result[0] if created: created = created[0] if created.isString(): created = created.asString() return created
def py_IMMSymbolToDate(immCodes, refDate, rule='CFFEX'): '''Optional rule is one of 'CFFEX, 'CFFEXLT', 'INTERNATIONAL' ''' errVec = Str_Vec() result = Param_Vec() if isinstance(immCodes, str): immCodes = [immCodes] immCodes = _listToPkVec(immCodes) if isinstance(refDate, datetime.date): refDate = [dateToPkDate(refDate)] if len(refDate) < immCodes.size(): refDate += [refDate[-1]] * (immCodes.size() - len(refDate)) refDate = _listToPkVec(refDate) pk_IMMSymbolToDate(immCodes, refDate, rule, result, errVec) _checkAndRaiseErr(errVec) result = _unpackVecResult(result) return tuple((pkDateToDate(i) for i in result))
def py_BuildCfetsCurve(curveName, anchorDate, indexName, tenors, rates, method, discCurveName=''): errVec = Str_Vec() result = Param_VecVec() rc = pk_BuildCfetsCurve(curveName, dateToPkDate(anchorDate), indexName, Str_Vec(tenors), Double_Vec(rates), method, discCurveName, result, errVec) _checkAndRaiseErr(errVec) return rc
def py_FixedRateBond(objId, description, bondType, faceAmount, coupons, scheduleID, issueDate, paymentCalendar, currency='CNY', settlementDays=1, dayCounter='', paymentBDC='', redemption=PkMissingDouble, compounding=PkMissingString, exerDate=PkMissingDate): errVec = Str_Vec() type = ['IB', 'SSE', 'Custom'].index(bondType) + 1 rc = pk_FixedRateBond(objId, description, currency, settlementDays, _listToPkVec(faceAmount, vecType=float), scheduleID, _listToPkVec(coupons, vecType=float), dayCounter, paymentBDC, redemption, dateToPkDate(issueDate), paymentCalendar, compounding, type, errVec, exerDate) _checkAndRaiseErr(errVec) return rc
def py_Schedule(scheduleId, startDate, endDate, tenor, calendar, bdc=PkMissingString, endDateBDC=PkMissingString, genRule=PkMissingString, endOfMonth=False, firstDate=PkMissingDate, nextToLastDate=PkMissingDate): errVec = Str_Vec() rc = pk_Schedule(scheduleId, dateToPkDate(startDate), dateToPkDate(endDate), tenor, calendar, bdc, endDateBDC, genRule, endOfMonth, firstDate, nextToLastDate, errVec) _checkAndRaiseErr(errVec) return rc
def py_BondFlowAnalysis(bondId, afterDate): errVec = Str_Vec() result = Param_VecVec() rc = pk_BondFlowAnalysis(bondId, dateToPkDate(afterDate), result, errVec) _checkAndRaiseErr(errVec) return _unpackVecVecResult(result)
def _py_CalendarHolidayList(calendar, fromDate, toDate, type): errVec = Str_Vec() result = PkInt_Vec() rc = pk_CalendarHolidayList(calendar, dateToPkDate(fromDate), dateToPkDate(toDate), type, result, errVec) _checkAndRaiseErr(errVec) return tuple(pkDateToDate(d) for d in result)
def py_RollCurve(curveId, newCurveId, newCurveDate): errVec = Str_Vec() rc = pk_RollCurve(curveId, newCurveId, dateToPkDate(newCurveDate), errVec) _checkAndRaiseErr(errVec) return rc