This simple add-in contains a calculator for calculating the
value and derivatives of a vanilla option.
It is typical of financial calculator add-ins, and offers a useful
model for an XLL+ add-in which makes use of existing pure C libraries.
Features
The sample displays the following features:
The CfRevalCashflows add-in function accepts two vector arguments,
of dates and cashflows.
The Function Wizard generated all the code that deals with
extracting and validating the vectors' values from the cell arrays
passed by Excel.
The library includes a function which returns a range of values
(BsCalc) and a set of functions (BsValue, BsDelta etc)
which return only one value, extracted from the range returned by BsCalc.
The Div argument to the Black-Scholes functions is flexible.
It can contain either a single number (representing
dividend yield) or two columns containing the dates and values
of predicted dividends.
Implementation
The following steps were significant in creating and completing the
SimpOpt application.
Pre-cooked header and source files were added to the project,
containing code for the business functions.
The Calendar functions (CalDiffYears, CalDiffDays,
CalDaysInYear and CalDayCountText)
were each implemented as a thin shell around existing business functions,
with the majority of the code being generated by the XLL+ Function Wizard.
This is typical of most real-world add-in functions.
Each of Black-Scholes functions has the same arguments.
Therefore only one was entered into the XLL+ Function Wizard.
All the rest were created as clones of the first function, using the
Copy signature from... field of the
New Function dialog.
Each of the single value Black-Scholes functions (BsValue,
BsDelta etc) calls the array function (BsCalc), via
CXlOper::CallAddin.
The value of interest is then extracted from the array
and returned to Excel.
The Div argument to the Black-Scholes functions is specified
as a COper type, meaning that it can contain any or no data.
Code was written (in BsCalc) to examine the contents of the Div argument,
and handle it differently depending on its shape.
The Excel date functions
(XlLSerialToDate and
XlDateToLSerial)
were used for all date conversions.
This makes the code immune to problem of the user setting an unusual
zero date in Excel's options.