Backtesting Front End for backtrader (see: https://www.backtrader.com/). Built with Plotly/Dash.
Important:
- Before using, please make sure to update the file omega-ui.config at the root of the omega_ui folder. This file contains configuration parameters that are used throughout the application.
- A Redis instance must be running (this is used to display logs) and the package folder needs to be in PythonPath.
What needs to be updated:
- Default/Module: This is the module where the class implementing the Backtest class is (make sure that the module is in PythonPath).
- Default/Class: Name of the class implementing the Backtest class.
- Default/Redis: IP address of the Redis datastore (Default port: 6379).
- Logging/Root: Path to where logs will be stored.
- Backtest/Cash: Default cash value.
- Backtest/Modules: Modules where the strategies are located (several modules can be implemented using commas as a delimiter).
From source: Place the omega_ui directory found in the sources inside your project
-
Before the UI can be used, the Backtest class needs to be implemented. This is done by inheriting the class Backtest from omega_ui.backtest and implementing the following methods:
-
get_symbols: Symbols that will be displayed on the UI and on which we can run a backtest.
-
get_parameters: Default parameters for a given strategy.
-
run: Run a backtest. Please note that this needs to return 2 items: returns and results from backtrader.
-
Before running the UI, the following command has to be running: 'python socket_logging.py flask run'. This is the server which redirects the logs to the UI.
-
To run the UI, run the following command: 'python app.py' and in your browser (tested only on Chrome), navigate to the specified address (should be http://127.0.0.1:8050/).
An example has been included in the tests folder to give an idea on how to use the UI (see test_backtest.py). When using it, please make sure to select the strategy "TestStrategy" in the Strategy dropwdown as selecting ExampleBacktest would not work.
This project is designed for people already comfortable using and writing python code. I do not have time to provide support but am happy to help if you get in touch regarding the following topics:
- Error messages
- Documentation
- Suggestions for extra features
- Bugs I will try to reply to messages but can't guarantee it (as long as the message is properly formatted). This is a work in progress and also a project which I use for my research. Offers to contribute will be accepted.
Also, if nothing happens while trying to run a backtest, this might be due to a problem with the Dash React part. I had an issue where I had to roll back Dash to a specific version and haven't tried to use the latest version again. To find out if there's a problem with React, right-click in Chrome and select Inspect, then navigate to the Console tab and look for errors. See below to know which dash packages work with this application:
- dash==0.21.0
- dash-auth==0.1.0
- dash-core-components==0.20.2
- dash-html-components==0.10.0
- dash-renderer==0.11.3
- dash-table-experiments==0.6.0