Description
An event-driven backtesting framework to test stock trading strategies based on fundamental analysis.
gobacktest alternatives and similar packages
Based on the "Financial" category.
Alternatively, view gobacktest alternatives based on common mentions on social networks and blogs.
-
Golang Crypto Trading Bot
A golang implementation of a console-based trading bot for cryptocurrency exchanges -
ach
ACH implements a reader, writer, and validator for Automated Clearing House (ACH) files. The HTTP server is available in a Docker image and the Go package is available. -
sleet
DISCONTINUED. Payment abstraction library - one interface for multiple payment processors ( inspired by Ruby's ActiveMerchant ) -
https://github.com/alpeb/go-finance
Go library containing a collection of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds and depreciation calculations. -
go-finnhub
DISCONTINUED. Client for stock market, forex and crypto data from finnhub.io. Access real-time financial market data from 60+ stock exchanges, 10 forex brokers, and 15+ crypto exchanges.
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of gobacktest or a related project?
README
Heads up: This is a framework in development, with only basic functionality.
gobacktest - Fundamental stock analysis backtesting
An event-driven backtesting framework to test stock trading strategies based on fundamental analysis. Preferably this package will be the core of a backend service exposed via a REST API.
Usage
Basic example:
package main
import (
"github.com/dirkolbrich/gobacktest"
"github.com/dirkolbrich/gobacktest/data"
"github.com/dirkolbrich/gobacktest/strategy"
)
func main() {
// initiate a new backtester
test := gobacktest.New()
// define and load symbols
symbols := []string{"TEST.DE"}
test.SetSymbols(symbols)
// create a data provider and load the data into the backtest
data := &data.BarEventFromCSVFile{FileDir: "../testdata/test/"}
data.Load(symbols)
test.SetData(data)
// choose a strategy
strategy := strategy.BuyAndHold()
// create an asset and append it to the strategy
strategy.SetChildren(gobacktest.NewAsset("TEST.DE"))
// load the strategy into the backtest
test.SetStrategy(strategy)
// run the backtest
test.Run()
// print the results of the test
test.Stats().PrintResult()
}
More example tests are in the /examples
folder.
The single parts of the backtester can be set independently:
// initiate new backtester
test := &Backtest{}
// set the portfolio with initial cash and a default size and risk manager
portfolio := &gobacktest.Portfolio{}
portfolio.SetInitialCash(10000)
sizeManager := &gobacktest.Size{DefaultSize: 100, DefaultValue: 1000}
portfolio.SetSizeManager(sizeManager)
riskManager := &gobacktest.Risk{}
portfolio.SetRiskManager(riskManager)
test.SetPortfolio(portfolio)
// create a new strategy with an algo stack
strategy := gobacktest.NewStrategy("basic")
strategy.SetAlgo(
algo.CreateSignal("buy"), // always create a buy signal on a data event
)
// create an asset and append to strategy
strategy.SetChildren(gobacktest.NewAsset("TEST.DE"))
// load the strategy into the backtest
test.SetStrategy(strategy)
// create an execution provider and load it into the backtest
exchange := &gobacktest.Exchange{
Symbol: "TEST",
Commission: &FixedCommission{Commission: 0},
ExchangeFee: &FixedExchangeFee{ExchangeFee: 0},
}
test.SetExchange(exchange)
// choose a statistic and load into it the backtest
statistic := &gobacktest.Statistic{}
test.SetStatistic(statistic)
Dependencies
None so far. Only the standard library.
Basic components
These are the basic components of an event-driven framework.
- BackTester - general test case, bundles the following elements into a single test
- EventHandler - the different types of events, which travel through this system - data event, signal event, order event and fill event
- DataHandler - interface to a set of data, e.g historical quotes, fundamental data, dividends etc.
- StrategyHandler - generates a buy/sell signal based on the data
- PortfolioHandler - generates orders and manages profit & loss
- (SizeHandler) - manages the size of an order
- (RiskHandler) - manages the risk allocation of a portfolio
- ExecutionHandler - sends orders to the broker and receives the “fills” or signals that the stock has been bought or sold
- StatisticHandler - tracks all events during the backtests and calculates useful statistics like equity return, drawdown or sharp ratio etc., could be used to replay the complete backtest for later reference
- (ComplianceHandler) - tracks and documents all trades to the portfolio for compliance reasons
Infrastructure example
An overviev of the infrastructure of a complete backtesting and trading environment. Taken from the production roadmap of QuantRocket.
- General
- API gateway
- configuration loader
- logging service
- cron service
- Data
- database backup and download service
- securities master services
- historical market data service
- fundamental data service
- earnings data service
- dividend data service
- real-time market data service
- exchange calendar service
- Strategy
- performance analysis service - tearsheet
- Portfolio
- account and portfolio service
- risk management service
- Execution
- trading platform gateway service
- order management and trade ledger service
- backtesting and trading engine
Resources
Articles
These links to articles are a good starting point to understand the intentions and basic functions of an event-driven backtesting framework.
- Initial idea via a blog post Python For Finance: Algorithmic Trading by Karlijn Willems @willems_karlijn.
- Very good explanation of the internals of a backtesting system by Michael Halls-Moore @mhallsmoore in the blog post series Event-Driven-Backtesting-with-Python.
Other backtesting frameworks
- QuantConnect
- Quantopian
- QuantRocket - in development, available Q2/2018
- Quandl - financial data
- QSTrader - open-source backtesting framework from QuantStart
- bt - Flexible Backtesting for Python - an inspiration for algorithm building blocks and a strategy/assets tree
General information on Quantitative Finance
- Quantocracy - forum for quant news
- QuantStart - articels and tutorials about quant finance
*Note that all licence references and agreements mentioned in the gobacktest README section above
are relevant to that project's source code only.