Need help with gotrade?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

cyanly
223 Stars 62 Forks GNU General Public License v3.0 35 Commits 3 Opened issues

Description

A proof of concept of an electronic trading system written in Golang

Services available

!
?

Need anything else?

Contributors list

GoTrade

GoTrade is a FIX protocol electronic trading and order management system written in Golang, structured for typical multi-asset instituional use

GoDoc Build Status

Status

This project is currently more of a proof of concept. It is no where near in completeness of a commerical product. This public repo serves as mostly for the purpose of experimenting and share of ideas.

Getting Started

$ go get -u github.com/cyanly/gotrade

Features

  • [x] Trade in real-time via FIX through the broker-neutral API.
  • [x] Normalized FIX order flow behavior across multiple FIX versions and asset classes.
  • [x] Pure Go.
    • [x] Platform neutral: write once, build for any operating systems and arch (Linux/Windows/OSX etc).
    • [x] Native code performance.
    • [x] Ease of deployment.
    • [x] Lack of OOP verbosity, works for small and big teams.
  • [x] Protobuf.
    • [x] Binary encoding format, efficient yet extensible.
    • [x] Easy Language Interoperability (C++, Python, Java, C#, Javascript, etc).
    • [x] Protocol backward compatibility.

Design

└─ gotrade/
   ├─ core/                 -> The low-level API that gives consumers all the knobs they need
   │  ├─ order/
   │  │  └─ execution/
   │  ├─ service/
   └─ proto/...             -> Protobuf messaging protocol of various entities
   └─ services/             -> Core services managing multi-asset order flow
   │  ├─ orderrouter/       -> Centralized management facility for multi-asset global order flow
   │  ├─ marketconnectors/  -> Managing FIX connection to each trading venue, also performs pre-trade risk checks
   │
   └─cmd/...                -> Command-line executables, binary build targets

Examples

The best way to see goTrade in action is to take a look at tests (see Benchmark section below):

Pre-Requisites: - Go 1.4 or higher - get dependencies:

$ cd $GOPATH/src/github.com/cyanly/gotrade
$ go get -u -t ./...

OrderRouter and MarketConnector test cases will mock a testdb and messaging bus for end-to-end, message to message test. ``` $ cd $GOPATH/src/github.com/cyanly/gotrade/services/orderrouter $ go test -v

$ cd $GOPATH/src/github.com/cyanly/gotrade/services/marketconnectors/simulator $ go test -v ```

Benchmark

Machine:

Intel Core i5 CPU @ 2.80GHz
+
Ubuntu 14.04 Desktop x86_64
  • test/benchmark/client2fix_test.go
  • CL ⇒ OR:
    Client send order protobuf to OrderRouter(OR)
  • OR ⇒ MC:
    OrderRouter process order and dispatch persisted order entity to target MarketConnector
  • MC ⇒ FIX:
    MarketConnector translate into NewOrderSingle FIX message based on the session with its counterparty
  • FIX ⇒ MC:
    MarketConnector received FIX message on its order, here Simulator sending a fully FILL execution
  • EXE ⇒ CL:
    MarketConnector publish processed and persisted Execution onto messaging bus, here our Client will listen to

Included: - from order to FIX to a fully fill execution message to execution protobuf published back - serialsing/deserialsing mock order into protobuf messages - Request/Publish and Response/Subscribe via NATS.io message bus - Time spent in the Linux TCP/IP stack - Decode FIX messages and reply by a simulated broker

Excluded: - Database transaction time (hard-wired to an inline mock DB driver)

Result:
-

0.176ms per op,  5670 order+fill pairs per sec

Limitations

Contributing

GoTrade © 2016+, Chao Yan. Released under the GNU General Public License.
Authored and maintained by Chao Yan with help from contributors (list).
Contributions are welcome.

cyan.ly  ·  GitHub @cyanly  · 

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.