Project Objectives

This page documents at the high-level our vision of the product, and the objectives of our current project for the product.

Assumptions

The basic assumptions for product management:

1. A small, coherent and useful product is better than an unusable product laden with irrelavent features.

2. This is a Big data course, so we need do some work related to big data.

3. We should be especially careful about feature creep, given that we only have about two months, we're not familiar with the product and technology stack, and everyone is also busy with other courses.

Product Vision (long-term)

The following describes the long-term vision for this framework. We do not aim to implement all of the following during this project's iteration. However, it helps us set short-term targets.

The primary target audience is those people who wants to experiment with algorithmic trading. We can assume the person has background in finance and algorithmic trading(familiar with common trading strategies). But we may not assume the person is experienced in Scala related technologies. For this type of users, a graphical user interface(GUI) is important, where they can select a market, choose the available strategies, configure parameters for a strategy, see in real-time how the strategy behaves.

The product is open source, which implies that it also targets developers. It should be easy for interested developers to adapt this project to a real-world algorithmic trading tool, or extend the project with more functionalities, such as adding new markets, new trading strategies, etc.

The major features of the product from a long-term perspective are as follows:

Project Objectives (short-term)

Given that the product is a continuous effort spanning several projects, here we define the scope of the current project based on what's been done already in previous projects.

In the project we move from BTC/USB to Forex market, so it's reasonable to make following assumptions:

The following are the major objectives:

  1. Replace Bitcoin with Forex market. The Bitcoin marketplaces (implemented by the previous teams) made use of Order Books. These data are usually hard to get for other markets (Forex, Nasdaq, etc) so we will use  only tick data (live quotes) which are available through free APIs.
  2. Add two new trading strategies and related indicators. Simple strategies may be implemented at first to familiarize with the framework, but we also aim to implement more advanced strategies which may perform well in a real market setting.
  3. Backtest trading strategy to generate transaction history and measure its performance(returns, risk indicator).
  4. Use Machine Learning techniques to optimize strategies' parameters (if possible, work on avoiding outfitting: bootstrap, cross-validation, etc)
  5. Design and implement performance benchmarking tool. In particular, we should be able to assess which components, if any, are performance bottlenecks in our system.
  6. Make it easy for developers to implement new trading strategies and indicators, with arbitrary parameters. This implies that our framework should be usable by a Scala developer as a "black box", using only clean and well-documented APIs that we would provide.

The following are bonus objectives, which we will focus on if the previous objectives are complete:

  1. Support multiple markets and easily extend new types of market.
  2. Development of a web-based GUI where users can choose market, select and configure trading strategies, display the orders, price and indicator values, wins/loss in real-time.
  3. Implement a connector to a real broker / exchange