Skip to main content

Simple trading backtester

Project description

Overview

Quantitative approach to trading is done via applying mathematical models to various financial instruments. In order to get money for you strategy, mathematical model beneath it should be sound. And to prove that this model worth money one should do proper backtesting. This project aims to provide easy and straitforward backtesting solution.

Relevance

There are number of python projects for backtesting: backtrader, pyalgotrade, zipline, rqalpha, etc.. When i was trying out them, i was dissatisfied with one or more of the following: event driven, unnecessary complex architecture, no support for trading multiple instruments in convinient way, no proper performance evaluation, etc.. This project solves those issues at cost of not so wide functionality compared to mentioned ones above. Project is designed to be easily build on top of it.

Features

  • Data manipulations are made with pandas.

  • Backtesting operations are vector( no loops, not event driven).

  • Extensive statistical evaluation of strategies.

  • Number of visualizations embedded.

  • Strategy robustness tests.

  • API to work with OHLC data( download, prepare).

  • Clean and straitforward project structure.

  • PEP8 compliant code.

Installation

  • Install via setup.py:

git clone git@github.com:bluella/stbt.git
cd stbt
python setup.py install
  • Install via pip:

pip install stbt
  • Run tests:

pip install pytest
pytest

Usage

import datetime as dt
import pandas as pd
import matplotlib.pyplot as plt
from stbt.simulator import Strategy
from stbt.download_ohlc.cryptocurrency import get_ohlc_cryptocompare
from stbt.operators.technical import skewness

# get trading data from cryptocompare
BTC_TICKER = 'BTC'
ETH_TICKER = 'ETH'
USD_TICKER = 'USD'

END_DATE = dt.datetime(2018, 7, 1, 0, 0, 0)
START_DATE = dt.datetime(2018, 3, 1, 0, 0, 0)

OHLC_BTC = get_ohlc_cryptocompare(BTC_TICKER, USD_TICKER, START_DATE,
                                end_date=END_DATE, interval_key='day')
OHLC_ETH = get_ohlc_cryptocompare(ETH_TICKER, USD_TICKER, START_DATE,
                                end_date=END_DATE, interval_key='day')

# create dfs in format that Strategy requires
closes_df = pd.concat([OHLC_BTC['Close'], OHLC_ETH['Close']],
                      axis=1, keys=['BTC', 'ETH'])

# use imported indicator to create weights
weights_df = skewness(closes_df)

# create strategy
s = Strategy(closes_df, weights_df, cash=100)

# run backtest, robust tests, calculate stats
s.run_all(delay=2, verify_data_integrity=True, instruments_drop=None,
        commissions_const=0, capitalization=False, plot='all')

# check strategy stats
print(s.stats_dict)

# save strategy to futher comparison
s.add_to_pnls_pool()

# plot pool correlation heatmap
heatmap_fig, corr_matrix = s.get_pool_heatmap()

plt.show()

Futher development

  • Improve test coverage.

  • More API for data download.

  • More technical indicators.

  • Portfolio optimization tools.

Releases

See CHANGELOG.

License

This project is licensed under the MIT License - see the LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stbt-1.0.0.tar.gz (56.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stbt-1.0.0-py2.py3-none-any.whl (19.5 kB view details)

Uploaded Python 2Python 3

File details

Details for the file stbt-1.0.0.tar.gz.

File metadata

  • Download URL: stbt-1.0.0.tar.gz
  • Upload date:
  • Size: 56.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for stbt-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bc26730406c66dd3fb1c11776307df67dc89dcd048b4ce993bdaa75b3d47f2ea
MD5 3495290d5d4713f362566b630c87b0ae
BLAKE2b-256 0f8c8ea38ea1695c1f9e3a4ee78ade49f36786edaba1e32a93a6492f2656b605

See more details on using hashes here.

File details

Details for the file stbt-1.0.0-py2.py3-none-any.whl.

File metadata

  • Download URL: stbt-1.0.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for stbt-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6661a9dc013b510de1a17ac7a22cf63d32fd6e1f1fb4b1722c488d7c1c3bfecf
MD5 21faecf3cec40945837ada1a3e9b4353
BLAKE2b-256 d35e6f5e8e1892d3151f7a22b35b7998b292932e77629fe86168c65985d22ad8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page