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:

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:
SourceForge Logo