gnuPort
The Open Source Portfolio System
Introduction
The goal of this project is to develop a suite of
sophisticated standards-compliant
financial portfolio management and reporting tools,
from performance analysis and
attribution to portfolio optimization.
Also included in the project are the components needed
to support
the high end tools, including security master, trade
entry and management, and accounting modules.
The software will be written in Java, including J2EE
technology where appropriate.
gnuPort development is hosted by SourceForge.
The project page is here.
To view the source code, browse the CVS Repository
Why
Here's why this project exists.
Status
The project is in early development. Option pricing using
Black-Scholes (including modifications for dividends, bonds,
fx, etc) is implemented, but not terribly robust or fully tested. Exception
handling is also not ready for prime time. A binomial pricing
model is also implemented. The same limitations apply.
JUnit tests have been created for these core functions.
A Swing application for demonstrating functionality is currently
being written (See the org/gnuport/gui package). It provides
BASIC functionality for adding and editing portfolios, trades
and instruments. It will (soon?) be able to demonstrate the option
pricing models. Note that this is not intended to be a representative
trading or analytics application. It is only intended to demonstrate
certain gnuPort functions. It is also not necessarily a "good" swing app.
One interesting aspect of the current app is that I have designed
it so that a jsp/servlet app could be used instead of or in conjunction
with the swing app, but still re-use the controller classes (table managers
and list managers, etc.), replacing only the display components.
Design
The following picture depicts the packeages that are
envisioned.
Each package would be independent and self contained,
allowing each package
or any combination to be used in conjunction with
other systems.
For instance, the Reporting/Analysis package should be
able to work with
any portfolio record keeping system. The
principal motivator for
this project is the Reporting & Analysis
package. During developement,
however, the Recordkeeping system will be
utilized.
Components
Reporting and Analysis
This is one of the value-added components. It
will provide a full
range of tools to support a variety of financial
investments, including
equity, fixed income, and derivatives.
The goal is a full suite of AIMR-compliant
performance reports, including
performance attribution.
Record Keeping
This will be a fairly simple java package designed to
provide a facade
to a relational database. Record keeping will
support a security
master, trade history, current and
historic portfolio positions,
and historical market values.
The current demonstration application stores data in xml files.
Trade Entry
Initially this will be nothing more than a gui for
interfacing to the record
keeping system.
Of course other components should be able to
interface with any trading
system.
Portfolio Management
This is the other main value added component.
Portfolio Management
functions will include asset allocation, what-if and
scenario analysis,
portfolio optimization, and hedge strategies.
Possible functions include:
-
Given a FI portfolio, define/suggest headging
strategies to achieve target
duration.
-
Futures strategies.
-
Options strategies.
-
Swap strategies.
-
Given an equity portfolio, or instrument, suggest
hedging strategies.
-
For all derivative strategies, draw pay-off
diagrams.
Accounting
This module will produce GAAP standard accounting for
all supported instruments.
Object Model
(A work in progress ;-)
Instrument Package
Portfolio Package
Other Components
To maximize usability of these modules, I envision
having some extra components
available:
-
All the above modules as regular Java classes
-
EJB wrappers where appropriate to deploy the various
compoenents in a J2EE
application server
-
Servlets and JSPs to provide simple mvc deployment of
all the components in addition to the currently evolving Swing app
-
The build scripts and xml deployment files for
particular application servers