GenericLMM_MCPricer Example VBNET

VB.NET Example - GenericLMM_MCPricer![]() ![]() ![]() ![]() ![]() ' ################################################################################## ' The first function here GenericLMM_MCPricer(), contains a series of ' function calls leading upto the main function call, the second function ' within this file ( GenericLMM_MCPricerPart() ). ' 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. ' ################################################################################## ![]() Imports System![]() ' Optional using instruction. We will use a mix of utilising fully qualified names (in the case of the financial objects) ' and using the reduced version (in the case of declaring enumerations). ' This is just to demostrate both types of coding.![]() Imports CTQL ' You need to add a reference to the QuantToolsNET.v2.dll also![]() ' 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 nCTLMMMCPricerGlobal As Integer ' Used by function parameters that take an optional range value. ' In Excel we simply omit the value, within the API functions, ' we pass an empty range object Global oEmptyRange As CTQL.CTRangeData Public Function VB_EX_GenericLMM_MCPricer() As String![]() nCTLMMMCPricerGlobal = nCTLMMMCPricerGlobal + 1 ![]() Dim szErrorMsg As String Try![]() ![]() ' Creates an one dimensional interpolation object.![]() Dim MyInterpObject1D As String MyInterpObject1D = _ InterpObject1DPart()![]() ![]() ![]() ' Creates an one dimensional interpolation object.![]() Dim MyInterpObject1D_2 As String MyInterpObject1D_2 = _ InterpObject1D__2Part()![]() ![]() ![]() ' Creates a two dimensional interpolation object.![]() Dim MyInterpObject2D As String MyInterpObject2D = _ InterpObject2DPart()![]() ![]() ![]() ' Creates a two dimensional interpolation object.![]() Dim MyInterpObject2D_2 As String MyInterpObject2D_2 = _ InterpObject2D__2Part()![]() ![]() ![]() ' 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 centralized valuation date object.![]() Dim MyValuationDate As String MyValuationDate = _ ValueDateObjPart()![]() ![]() ![]() ' 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 MyMiniYC As String MyMiniYC = _ MKTYC_D__3Part( _ MyValuationDate, _ MyDepoTPL, _ MySwapTPL)![]() ![]() ![]() ' Creates a new Index code. Dim MyNewIndex2 As String MyNewIndex2 = _ CreateIndex__2Part( _ MyCALUKExchange, _ MyEuroCal, _ MyMiniYC)![]() ![]() ![]() ' Creates a Libor Forward Model Process container object. Dim MyLMMProcess2 As String MyLMMProcess2 = _ LMMProcess2Part( _ MyNewIndex2)![]() ![]() ![]() ' Creates a an extended linear-exponential volatility model for ' the libor market model. Dim My3rdLMMLinearExpVolModel2 As String My3rdLMMLinearExpVolModel2 = _ LMMLinearExpVolModel2__3Part( _ MyLMMProcess2)![]() ![]() ![]() ' Creates an extended exponential correlation model for the libor ' market model. Dim My2ndLMMLinearExpCorrModel2 As String My2ndLMMLinearExpCorrModel2 = _ LMMLinearExpCorrModel2__2Part( _ MyLMMProcess2)![]() ![]() ![]() ' Given volatility and correlation specification objects, creates ' a Libor Forward Market Simulation Process object to be used ' within the 'CapeTools LMM Process Simulation' or 'CapeTools ' Generic IR LMM MonteCarlo Pricer' category of functions. Dim MyLMMSimProcess As String MyLMMSimProcess = _ LMMSimProcessPart( _ MyLMMProcess2, _ My3rdLMMLinearExpVolModel2, _ My2ndLMMLinearExpCorrModel2)![]() ![]() ![]() ' Creates a generic pricing monte carlo object given a process ' object and a pricing grid. Dim MyGenericLMM_MCPricer As String MyGenericLMM_MCPricer = _ GenericLMM_MCPricerPart( _ MyLMMSimProcess, _ MyInterpObject1D, _ MyInterpObject1D_2, _ MyInterpObject2D, _ MyInterpObject2D_2)![]() ' This is the result we are looking for. VB_EX_GenericLMM_MCPricer = MyGenericLMM_MCPricer![]() Catch e As Exception szErrorMsg = e.Message Throw e Catch e As System.ApplicationException szData = e.Message End Try End Function ![]() ![]() ' ///////////////////////////////////////////////////////////////////![]() Private Function GenericLMM_MCPricerPart( _ MyLMMSimProcess As String, _ MyInterpObject1D As String, _ MyInterpObject1D_2 As String, _ MyInterpObject2D As String, _ MyInterpObject2D_2 As String) As String![]() ![]() ' Create example range for parameter GenericLMM_MCPricer_PayOffTable![]() ![]() Dim GenericLMM_MCPricer_PayOffTable _ As CTQL.CTRangeData![]() Dim GenericLMM_MCPricer_PayOffTable_builder _ As New System.Text.StringBuilder(100) ' We could set the value for each cell individually, but for display ' purposes, this is quicker and more informative. GenericLMM_MCPricer_PayOffTable_builder.Append("{") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2006# | | | | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Oct/2006# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#22/Jan/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Apr/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#23/Jul/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#22/Oct/2007# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2008# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2009# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Oct/2010# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jan/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Apr/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | ;") GenericLMM_MCPricer_PayOffTable_builder.Append("#21/Jul/2011# | Libor(cRow) + _a | Interp1D(1,cRow) | GridRowSum(cRow, cCol-2, cCol-1) | max(GridColMin(cCol-1, 1, cRow) - LiborMin(1, cRow), 0.0) * DCF(cRow) * Cvg(cRow)") GenericLMM_MCPricer_PayOffTable_builder.Append("}") GenericLMM_MCPricer_PayOffTable.RangeFromStr _ ( _ GenericLMM_MCPricer_PayOffTable_builder.ToString() _ ) ' Create example range for parameter GenericLMM_MCPricer_ConstParams![]() ![]() Dim GenericLMM_MCPricer_ConstParams _ As CTQL.CTRangeData![]() Dim GenericLMM_MCPricer_ConstParams_builder _ As New System.Text.StringBuilder(100) ' We could set the value for each cell individually, but for display ' purposes, this is quicker and more informative. GenericLMM_MCPricer_ConstParams_builder.Append("{") GenericLMM_MCPricer_ConstParams_builder.Append("_a | 0.0001 ;") GenericLMM_MCPricer_ConstParams_builder.Append("_b | 20 ;") GenericLMM_MCPricer_ConstParams_builder.Append("_c | 2.5 ;") GenericLMM_MCPricer_ConstParams_builder.Append("_var1 | 40") GenericLMM_MCPricer_ConstParams_builder.Append("}") GenericLMM_MCPricer_ConstParams.RangeFromStr _ ( _ GenericLMM_MCPricer_ConstParams_builder.ToString() _ ) ![]() ![]() ![]() ' Key value to use as a handle for the created object Dim MyGenericLMM_MCPricer As String MyGenericLMM_MCPricer = "MyGenericLMM_MCPricer" + "_" + CStr(nCTLMMMCPricerGlobal)![]() ![]() ' When creating this object for the first time, set this parameter ' to a positive value. Dim Reload As Integer Reload = 1![]() ![]() ' With the PayOff table, the first column represents event dates. Dim ValidateDates As Boolean ValidateDates = False![]() ![]() ' The number of simulations. Dim NoOfSims As Integer NoOfSims = 10![]() ' Excel function call is : "CT.PRO.GenericLMM_MCPricer()"![]() ' Creates a generic pricing monte carlo object given a process ' object and a pricing grid. Dim rGenericLMM_MCPricer As String Dim oCTLMMMCPricer As New CTQL.CTLMMMCPricer rGenericLMM_MCPricer = CTQL.CTLMMMCPricerSA.GenericLMM_MCPricer( _ MyGenericLMM_MCPricer, _ Reload, _ MyLMMSimProcess, _ GenericLMM_MCPricer_PayOffTable, _ ValidateDates, _ NoOfSims, _ GenericLMM_MCPricer_ConstParams, _ MyInterpObject1D, _ MyInterpObject1D_2, _ MyInterpObject2D, _ MyInterpObject2D_2)![]() ![]() GenericLMM_MCPricerPart = rGenericLMM_MCPricer End Function ![]() ![]() ![]() ![]() |