backtesting.py icon indicating copy to clipboard operation
backtesting.py copied to clipboard

Pairs Trading

Open arunavo4 opened this issue 5 years ago • 11 comments

So currently the Library can only support a single instrument. I would like to extend it for pairs Trading (Two instruments) Buying one selling other.

Any advice will be helpful.

arunavo4 avatar Jul 13 '20 06:07 arunavo4

@kernc any ideas?

arunavo4 avatar Jul 14 '20 11:07 arunavo4

Most simply, until #20 is properly addressed, you could prepare the data beforehand.

Assuming you always enter trades on the two instruments in parallel (buy one, sell the other), this is equivalent to buying instrument1 / instrument2. Even when you long-trade spot EUR/USD forex instrument, you're actually buying EUR currency and selling a corresponding amount of USD. :+1:

Thus, you can prepare your data (assuming the two instruments' data frames have the same, appropriately named columns):

data = df_instrument1 / df_instrument2

kernc avatar Jul 15 '20 13:07 kernc

Yes, I had Initially thought about this approach but this highly restricts the kind of algo that can be developed. If I come across a solution .. I will add a PR

arunavo4 avatar Jul 15 '20 14:07 arunavo4

Besides always entering trades on the two instruments simultaneously (buying one–selling the other, or vice versa), how does it restrict it?

kernc avatar Jul 15 '20 14:07 kernc

its not about just making trades. Its about the analysis that you want to perform it indicators or other things. That would be restricted. with the data already a ratio.

arunavo4 avatar Jul 15 '20 15:07 arunavo4

Note, the passed in data can contain additional columns you require (e.g. instrument1_Close, instrument2_Close, ...), and they can be referred to by your strategy in any way you need them ...

kernc avatar Jul 15 '20 15:07 kernc

yes true that is possible, yea this definitely solves the issue to some extent. but still, how can we accurately calculate the stats?

arunavo4 avatar Jul 15 '20 19:07 arunavo4

You're trying to buy low and sell high just like usual. I think the stats will be fine as-is? :thinking:

Maybe account for double the spread/commission as you're simulating entering trades on two separate instruments.

kernc avatar Jul 15 '20 21:07 kernc

I will try and let you know how it goes and If I face issues I will put it up here.

arunavo4 avatar Jul 16 '20 03:07 arunavo4

Any updates on the following?

alenpavlovich avatar Jul 30 '21 02:07 alenpavlovich

Hello.

I will also add my voice for the implementation of work with several assets.

Arguments:

  1. Pair trading is possible between more than 2 cointegrated pairs.
  2. It would be convenient to get a portfolio in the base currency at once, regardless of pairs (in the spread we get the financial result in invented mathematical frills).
  3. To get the result separately for each side of the pair and for the full portfolio of pairs.
  4. Competing libraries have it: https://vectorbt.pro/tutorials/pairs-trading/

Lexus2016 avatar May 22 '23 12:05 Lexus2016