Skip to content

Pairs Trading #104

Open
Open
@arunavo4

Description

@arunavo4

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.

Activity

arunavo4

arunavo4 commented on Jul 14, 2020

@arunavo4
Author

@kernc any ideas?

changed the title [-]Guide to Extend the Library for Pairs Trading[/-] [+]Pairs Trading[/+] on Jul 15, 2020
kernc

kernc commented on Jul 15, 2020

@kernc
Owner

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. 👍

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

data = df_instrument1 / df_instrument2
arunavo4

arunavo4 commented on Jul 15, 2020

@arunavo4
Author

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

kernc

kernc commented on Jul 15, 2020

@kernc
Owner

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

arunavo4

arunavo4 commented on Jul 15, 2020

@arunavo4
Author

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.

kernc

kernc commented on Jul 15, 2020

@kernc
Owner

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 ...

arunavo4

arunavo4 commented on Jul 15, 2020

@arunavo4
Author

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

kernc

kernc commented on Jul 15, 2020

@kernc
Owner

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

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

arunavo4

arunavo4 commented on Jul 16, 2020

@arunavo4
Author

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

alenpavlovich

alenpavlovich commented on Jul 30, 2021

@alenpavlovich

Any updates on the following?

Lexus2016

Lexus2016 commented on May 22, 2023

@Lexus2016

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/

4 remaining items

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionNot a bug, but a FAQ entry

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Pairs Trading · Issue #104 · kernc/backtesting.py