QuantLib/FinancialVisualization
Design specification on building an open source infrastructure for financial visualization. Installation instructions for the demo are available
source code is located at [1]
Why open source?
editThe wish - If we keep this closed source, we can make a lot of money and get a competitive advantage
The reality - Closed source implementation commit a company to make massive investments to keep a system running which duplicated functionality found elsewhere, often very badly.
Always ask, are we in the ..... business? Most finance companies are in the algorithm business and not in the GUI infrastructure/computer language/database maintainence/programming tool business.
You close it, you maintain it.
The Pieces
edit- QuantLib - financial analysis
- VTK - 3-d graphical output
- Python TraitsUI - controller
- Nokia 800
- Wiimote
Other traps
edit- Letting infrastructure drive implementation rather than the other way around.
- Making the infrastructure too abstract
Design paradigm
editStart with specific needs. Find open source packages that almost fit those needs. Modify the open source packages so that they do.
Example Applications
edit- Visualize volatility surface in conjunction with real data to see if how close the surface matches the data. Optimization will give you the closest parameter match, but without visualization techniques, you have no idea whether the match makes sense across the entire surface.
- Sanity checks. You've calculated the solution to a derivatives pricing problem. Does this solution make sense? Are there numerical issues (i.e. noisy output, singular points).
- Qualitative descriptions - How do you characterize the behavior of the derivative price or Greeks in words?
- Presentations to non-technical audiences. - Make points to people who are non-technical specialists.
Basic framework
edit- model, view, controller
- model - QuantLib
- view - Mayavi2 + can possibly add 2-d plots with Chaco
- controller - Enthought Traits for parameter controller. Wiimote (?!!!) for visualization.
Scripting language (Python) for rapid application development + C++ for building blocks
Why Python - Because there is already support for scientific computing via numpy and scipy.
Toy application
editCalculate basket option values for min, max, average options while varying underlying. Use monte carlo for NPV calculations.
What's needed - Lot's of duct tape
editPieces already there
editPython-SWIG
editConnect QuantLib with python using SWIG wrapper generator
Connect QuantLib with MayaVi2
editBoth are Python applications. Right now uses python for surface rendering
Pieces being developed (duct tape)
editPlotspace View
editProblem - mayavi2 was built for CFD and medical imaging. These have homogenous scales. But finance has hetrogenous scales. Need an API for converting "plot coordinates" to "world coordinates"
Problem - Equations take a long time to calculate. Need to put computational infrastructure to support multi-threading
Status - Minimal implementation there.
Traits controller
editProblem - Need to be able to edit the parameters of the model
Status - Try to figure out how to do this
Data Frame
editProblem - VTK and visualization systems were designed to handle either arrays or unstructured 3-d data (imaging and CFD background). But financial data is usually multi-dimensional time indexed data with attributes associated with columns and with the data as a whole.
Solution - Implement something like R data.frames
Status - Basic implementation there. Right now road block is implementing database joins. (Simple, just need the time to do it).
Note - The data frame unifies some of the basic tools in finance - The spreadsheet and the database
QuantLib surface interface
editProblem - Need standard interface to retrieve surface and volume data from QuantLib
Solution - Implement surface interface. Example of implementation of Surface interface would be time indexed curves.
Wiimote interface
editProblem - Control view more naturally than with mouse
Solution - Use wiimote - This is actually straight foward. Wiimote uses bluetooth and protocol has been reverse engineered. Hardware is cheap. Map wiimote calls to mouse actions in controlling mayavi
Impedence mismatches
editClassic problem with system integration are bad joints. Need to think about deep integration issues while we are in duct tape mode.
1) How do we integrate Traits event model with QuantLib event (observer model)?
2) How do we connect QuantLib arrays with numpy arrays?
3) What do we do about econometric time series analysis?
4) How do we connect the structured objects (i.e. surfaces) within QuantLib to the outside?
Why this needs to be open source
editNo proprietary information. No complete application. Just lots and lots of duct tape.
Danger of proliferation of API's and implementation. You close it, you maintain it.