IRStepMonteCarlo Example VB6

VB6 Example - IRStepMonteCarlo![]() ![]() ![]() ![]() ![]() ' ################################################################################## ' The first function here IRStepMonteCarlo(), contains a series of ' function calls leading upto the main function call, the second function ' within this file ( IRStepMonteCarloPart() ). ' which contains the answer that we are looking for.![]() ' The first function here is simply an example of how to construct the parameters ' in order acquire either a string Key (that is to be passed to other functions) ' or a computed result.![]() ' If you are viewing this source code from the chm or web help file you can use the ' outlining features to collapse certain sections of the code for better readability. ' ################################################################################## ![]() ![]() ' Add a reference to the CTQL.dll ActiveX library (dll)![]() ' Some global parameter in order to append to user defined keys. ' We use it here to ensure that we have unique Keys (in the case several of our examples ' use the same key-name) ' In normal use, a user defined string will be used and so this variable will be pointless. Global nCTIRProcessSimCGlobal As Long Public Function VB_EX_IRStepMonteCarlo() As String![]() nCTIRProcessSimCGlobal = nCTIRProcessSimCGlobal + 1 On Error GoTo err_Generic ![]() ' Creates a centralized valuation date object.![]() Dim MyValuationDate As String MyValuationDate = _ ValueDateObjPart()![]() ![]() ![]() ' UK date calendar used within the UK stock exchange.![]() Dim MyCALUKExchange As String MyCALUKExchange = _ CALUKExchangePart()![]() ![]() ![]() ' EURO calendar used for holiday adjustments.![]() Dim MyEuroCal As String MyEuroCal = _ CALEUROPart()![]() ![]() ![]() ' Creates a Deposit template which is almost identical to a Libor ' Index, but without the YieldCurve information. Dim MyDepoTPL As String MyDepoTPL = _ CreateDepoTemplatePart( _ MyCALUKExchange, _ MyEuroCal)![]() ![]() ![]() ' Creates a Swap template which is almost identical to the definition ' of the parameters of a swap contract, but without the swap duration, ' buysell, and YieldCurve information. Dim MySwapTPL As String MySwapTPL = _ CreateSwapTemplatePart( _ MyEuroCal, _ MyDepoTPL)![]() ![]() ![]() ' Creates a yield curve using market rates (No cross-currency ' Swaps). Dim MyYCInterpOnDCF As String MyYCInterpOnDCF = _ MKTYC_DPart( _ MyValuationDate, _ MyDepoTPL, _ MySwapTPL)![]() ![]() ![]() ' Creates a new Index code. Dim MyNewIndex As String MyNewIndex = _ CreateIndexPart( _ MyCALUKExchange, _ MyEuroCal, _ MyYCInterpOnDCF)![]() ![]() ![]() ' Creates a Single-factor Hull-White (extended Vasicek) Forward ' ShortRate Model process object. Dim MyHullWhite1FProcess As String MyHullWhite1FProcess = _ HullWhite1FProcessPart( _ MyNewIndex, _ MyYCInterpOnDCF)![]() ![]() ![]() ' Creates a Interest Rate Step Monte Carlo object given a process ' object and a time line dates array. Dim MyIRStepMonteCarlo As String MyIRStepMonteCarlo = _ IRStepMonteCarloPart( _ MyHullWhite1FProcess, _ MyValuationDate)![]() ' This is the result we are looking for. VB_EX_IRStepMonteCarlo = MyIRStepMonteCarlo![]() Exit Function err_Generic: MsgBox "Error: " & Err.Number & vbCrLf & Err.Description End Function ![]() ![]() ' ///////////////////////////////////////////////////////////////////![]() Private Function IRStepMonteCarloPart( _ MyHullWhite1FProcess As String, _ MyValuationDate As String) As String![]() ![]() ' Create example range for parameter IRStepMonteCarlo_MandatoryDates![]() ' Column vector of 12 rows (indexed from 0, highest index of 11) Dim IRStepMonteCarlo_MandatoryDates(11, 0) As Variant IRStepMonteCarlo_MandatoryDates(0, 0) = DateValue("19/Jul/2005") IRStepMonteCarlo_MandatoryDates(1, 0) = DateValue("19/Jan/2006") IRStepMonteCarlo_MandatoryDates(2, 0) = DateValue("19/Jul/2006") IRStepMonteCarlo_MandatoryDates(3, 0) = DateValue("19/Jan/2007") IRStepMonteCarlo_MandatoryDates(4, 0) = DateValue("19/Jul/2007") IRStepMonteCarlo_MandatoryDates(5, 0) = DateValue("19/Jan/2008") IRStepMonteCarlo_MandatoryDates(6, 0) = DateValue("19/Jul/2008") IRStepMonteCarlo_MandatoryDates(7, 0) = DateValue("19/Jan/2009") IRStepMonteCarlo_MandatoryDates(8, 0) = DateValue("19/Jul/2009") IRStepMonteCarlo_MandatoryDates(9, 0) = DateValue("19/Jan/2010") IRStepMonteCarlo_MandatoryDates(10, 0) = DateValue("19/Jul/2010") IRStepMonteCarlo_MandatoryDates(11, 0) = DateValue("19/Jan/2011") ![]() ![]() ![]() ' Key value to use as a handle for the created object Dim MyIRStepMonteCarlo As String MyIRStepMonteCarlo = "MyIRStepMonteCarlo" & "_" & CStr(nCTIRProcessSimCGlobal)![]() ![]() ' When creating this object for the first time, set this parameter ' to a positive value. Dim Reload As Long Reload = 1![]() ![]() ' Used to calculate time in years. Dim dayCounter As DayCountEnum dayCounter = DayCount_30360![]() ![]() ' The minimum number of steps that the discretization of the 'MandatoryDates' ' parameter will take. Dim MinNoOfSteps As Long MinNoOfSteps = 50![]() ![]() ' The random generator type to use. Dim MCMethod As String MCMethod = "Pseudo"![]() ![]() ' Seed value. Dim Seed As Long Seed = 0![]() ' Excel function call is : "CT.PRO.IR.StepMonteCarlo()"![]() ' Creates a Interest Rate Step Monte Carlo object given a process ' object and a time line dates array. Dim rIRStepMonteCarlo As String Dim oCTIRProcessSimC As New CTQL.CTIRProcessSimC rIRStepMonteCarlo = oCTIRProcessSimC.IRStepMonteCarlo( _ MyIRStepMonteCarlo, _ Reload, _ MyHullWhite1FProcess, _ MyValuationDate, _ dayCounter, _ IRStepMonteCarlo_MandatoryDates, _ MinNoOfSteps, _ MCMethod, _ Seed)![]() ![]() IRStepMonteCarloPart = rIRStepMonteCarlo End Function ![]() ![]() ![]() ![]() |