There are four python packages hosted on github which you may find useful, plus a collection of gists.

package: pysystemtrade

python 3.4

Git hub repo

More information on the dedicated page, here.

pysystem trade is the open source version of my own backtesting engine that implements systems according to the framework outlined in my book "Systematic Trading".

Eventually pysystemtrade will include the following:
  • Backtesting enviroment that will work out of the box for the three examples in "Systematic Trading"
  • Implement all the optimisation and system design principles in the book.
  • Complete implementation of a fully automated system for futures trading (for interactive brokers only), including regularly updated data
  • Code to run the present, and future, examples on my blog (i.e. it will replace systematictradingexamples.

gists: python-IB-API

python 3.5

This code shows how we can use the native python API for interactive brokers using python for a series of simple examples.

Start here: blog post, gist
Historic data: blog post, gist
Market data: blog post, gist
Placing orders: blog post, gist
Getting accounting data: blog post, gist

package: python-uk-trading-tax-calculator

python 2.7

Git hub repo

This is the package I use to calculate the UK tax liability for my interactive brokers trading. More in this blog post:

Using python to calculate your UK tax liability for trading profits

package: systematictradingexamples

python 2.7

Git hub repo

This is a collection of random code used to demonstrate some of the principles in my book. See these blog posts for more:

Python code for the trading rules in the book

Python code for optimisation (one period and bootstrapping), and producing different sample periods

Introducing random data

Random data: Trading the equity curve

Random data: Optimising portfolio weights the right way (TBC)

I intend to deprecate this repo, and replace it with examples built using pysystemtrade.

package: ibswigsystematicexamples

python 2.7

Git hub repo

This is effectively deprecated: I would use the native IB python API instead (see above).


  1. Dear Sir,

    I am using Python 2.7 and would like to reproduce the results from your codes. Upon executing your code "Introducing random data", on line 6, which reads
    "from common import arbitrary_timeseries"
    I always get the following error message:
    "ImportError: cannot import name arbitrary_timeseries"

    Have you got any solution to this problem?

    I am thankful for any help.


  2. You need to add the directory where the common module is to your python path

  3. Hi Robert,
    Not sure where best to post this question.

    Regarding the example data in pyststemtrade I pragmatically assume that this is actually a dump from the data you use yourself, I guess if thats the case then the data that you use, for example Eurodollar, will follow your preferences for trading 50 months out as you state in your excellent post about price stitching?



    1. Yes, as far back as I can go it's around 50 months out; when data isn't available in the distant past I use nearer stuff.

  4. Hi Rob,

    Any reason you prefer to use doctest instead of unittest?

  5. Hi Rob,

    I was wondering what changes you would make from using pysystemtrade for backtesting purposes to using it for live trading?

    The approach I was thinking of was getting the rounded positions for each instrument and executing these, but then I get back to the problem of variable capital you posted about (in that my starting capital in 1960 isn't my current capital)

    So with that in mind I guess the best approach is to grab the forecasts for each instrument and then following the daily process steps from your book (chap 15)?

    Thanks Chris

    1. You could have something that reads you current capital in, changes the appropriate config parameter That is pretty much what I would do in production.

  6. Hi Rob, another code-related question, if I may. After running the below code, I get multiple instances of the following warning. Do you know what this means? Thanks, again, for all your generous help.

    from systems.provided.futures_chapter15.estimatedsystem import futures_system

    Warning that occurs multiple times while program is running:

    Warning (from warnings module):
    File "/home/peter/pysystemtrade/syscore/", line 181
    corrmat[corrmat < 0] = 0.0
    RuntimeWarning: invalid value encountered in less

    1. It means that it's comparing a np.nan with a 0. This returns False (which is what we want) but isn't ideal. I've added it to the to do list.