If you are a regular reader you may remember me writing about Automated Trading System design in MetaTrader. I really found the platform limiting and it was only for Forex. I won’t even mention the back end modules that the market makers are running. MetaTrader 5 looks promising however with such information asymmetry and the fact that most retail Forex brokers are just “bucket shops” has me wary.
I have looked around at the various off the shelf trading system and execution solutions like NinjaTrader and eTrade and none of them meet my needs completely. So I have decided to write my own software solution. I know the saying about trying to re-invent the wheel. Depending on the quality of the final product I will decide if the code is of a high enough quality for release or not.
Whenever I write software I first write down a list of core requirements and then I decide what tools or language to use. For this project the quick back of the envelope requirements are:
- Fast Execution.
- Code portability.
- Separation between data acquisition / warehousing, trade execution and strategy testing.
Data Acquisition Requirements
- Run on custom compiled GUI less Free BSD or Linux system.
- Hardware requirements: Large physical storage, large RAM, average dual core CPU and gigabit ethernet (remember PCI bus speed may slow down transfer).
- Code written in C/C++, allow strategy testing module remote connection, configuration controlled by text file and separate IPC monitoring/reporting thread.
Strategy Testing Requirements
- GUI written in C/C++or Java, connect to data store, node based editor, run on UNIX/Linux based OS and nodes contain standard API functionality.
- Report generation.
Execution Engine Requirements
- Speed, Written in C/C++, GUI less, co-location ability, load compiled strategies, error recovery and separate IPC monitoring/reporting thread.
- Report generation.
These requirements are all fairly vague and will be refined much further during the initial design phase. This quick brainstorming exercise helps get a bigger picture of what I am looking to achieve with this development project.
Data Acquisition Engine
This is the first component that I will be working on. The best way for me to develop the engine will be via the use of a virtual machine. Virtual machine technology with current CPU hardware support means I can develop at near native speed. Anyone who has done any database design or worked with financial data sets will understand the tedious nature of this component. Time to evaluate different data warehousing and schema design that will allow for speed and scalability.