backtester: custom strategy plugins (#989)

* Adds custom strategy

* docs and structure

* docs

* rn

* Documents plugins, adds custom strat config

* mini fixes. Fleshes strategy test

* docgen

* Updates plugins to allow for multiple strategies to be loaded

* docs

* docs regen

* fix doc accuracy

* why did I add the word custom?
This commit is contained in:
Scott
2022-08-23 14:22:06 +10:00
committed by GitHub
parent ae02f168a9
commit 10f7ff3236
17 changed files with 829 additions and 86 deletions

View File

@@ -0,0 +1,36 @@
{{define "backtester plugins" -}}
{{template "backtester-header" .}}
## {{.CapitalName}} package overview
Golang Plugins are supported by the GoCryptoTrader Backtester. At present, only custom strategies are supported.
Please read the Golang documentation on [plugins](https://golang.org/pkg/plugin/) for more information.
## Building Golang Plugins
### Windows
Plugin support is not yet available for Windows. However, you can still build via WSL. See below for instructions on a basic setup for WSL. Once completed, follow the instructions for Linux.
#### WSL Setup
The following is a basic setup for WSL: [here](https://pureinfotech.com/install-wsl-windows-11/)
### Linux, macOS & WSL
A plugin is a Go main package with exported functions and variables that has been built with:
```bash
go build -buildmode=plugin
```
This outputs a file named `{{.Name}}.so` which can be loaded by the backtester. At present, only custom strategies can be loaded. See [here](/strategies/example/README.md) for more information on building custom strategies via plugins.
You must ensure that the plugin is built with the same version of code as the GoCryptoTrader Backtester. Otherwise the plugin will refuse to load.
#### Installing Golang in WSL
See the following for instructions on installing Golang in WSL: [here](https://ao.ms/how-to-install-golang-on-wsl-wsl2/)
### Please click GoDocs chevron above to view current GoDoc information for this package
{{template "contributions"}}
{{template "donations" .}}
{{end}}

View File

@@ -0,0 +1,37 @@
{{define "backtester plugins strategies example" -}}
{{template "backtester-header" .}}
## {{.CapitalName}} package overview
This is a custom strategy for the GoCryptoTrader Backtester. It is a simple example of a strategy that trades a pair of assets and is used to highlight how strategies can be loaded from external sources.
### Designing a strategy
- File must contain `main` package.
- Custom strategy plugins must adhere to the strategy.Handler interface. See the [strategy.Handler interface documentation](./backtester/eventhandlers/strategies/README.md) for more information.
- Must contain function `func GetStrategies() []strategy.Handler` to return a slice of implemented `strategy.Handler`.
- If only using one custom strategy, can simply `return []strategy.Handler{&customStrategy{}}`.
### Building
See [here](./backtester/plugins/README.md) for details on how to build the plugin file.
### Running
Plugins can only be loaded via Linux, macOS and WSL. Windows itself is not supported.
To run this strategy you will need to use the following flags when running the GoCryptoTrader Backtester:
```bash
./backtester -strategypluginpath="path/to/strategy/example.so"
```
To run this specific example strategy, use:
```bash
./backtester --strategypluginpath="./plugins/strategies/example/example.so"
```
Upon startup, the GoCryptoTrader Backtester will load the strategy and run it for all events.
### Please click GoDocs chevron above to view current GoDoc information for this package
{{template "contributions"}}
{{template "donations" .}}
{{end}}

View File

@@ -0,0 +1,30 @@
{{define "backtester plugins strategies" -}}
{{template "backtester-header" .}}
## {{.CapitalName}} package overview
### Designing a strategy
- File must contain `main` package
- Custom strategy plugins must adhere to the strategy.Handler interface. See the [strategy.Handler interface documentation](./backtester/eventhandlers/strategies/README.md) for more information.
- Must contain function `func GetStrategies() []strategy.Handler` to return a slice of implemented `strategy.Handler`.
- If only using one custom strategy, can simply `return []strategy.Handler{&customStrategy{}}`.
### Building
See [here](./backtester/plugins/README.md) for details on how to build the plugin file.
### Running
Plugins can only be loaded via Linux, macOS and WSL. Windows itself is not supported.
To run a strategy you will need to use the following flags when running the GoCryptoTrader Backtester:
```bash
./backtester -strategypluginpath="path/to/strategy/example.so"
```
Upon startup, the GoCryptoTrader Backtester will load the strategy and run it for all events.
### Please click GoDocs chevron above to view current GoDoc information for this package
{{template "contributions"}}
{{template "donations" .}}
{{end}}