Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backtest multiple instruments at once #20

Open
ghost opened this issue Sep 5, 2019 · 17 comments · May be fixed by #639
Open

Backtest multiple instruments at once #20

ghost opened this issue Sep 5, 2019 · 17 comments · May be fixed by #639
Labels
API Needs API-related discussion enhancement New feature or request

Comments

@ghost
Copy link

ghost commented Sep 5, 2019

Im trying to backtest a pairs trading strategy but i don't know how to add multiple data frames to the backtester in order to add positions to each instruments according to the hedge ratio.

Is there a way to do this?

@chhudson
Copy link

@jetychill
Definitely!

You just need to setup a for statement to pull from a list of instruments
IE. `instruments = ['USD_JPY', 'EUR_USD']

for instrument in instruments:
    data = run api calls to get data or load csv's
    bt_long = Backtest(`data`, `your strategy`, margin=0.002, cash=500)

    stats_long = bt_long.optimize(
        whatever optimization fields,
        maximize='Equity Final [$]'
    )

Obviously there is likely a bunch of data cleanup but that is something left to the user.

Hope this helps!

@ghost
Copy link
Author

ghost commented Sep 17, 2019

Thanks for the help!
Another question, does the back tester has some sort of default maximum holding time where it closes the position after n amount of time has passed I'm comparing results to my back tester and they seem identical, but when there is a long holding period the the results vary significantly, could also be a bug on my side but just asking if the back tester by default closes positions earlier.

Thanks

@kernc
Copy link
Owner

kernc commented Sep 17, 2019

Multiple positions/instruments aren't yet supported. Welcome a discussion if someone would have a look.

does the back tester has some sort of default maximum holding time where it closes the position after n amount of time

@jetychill By default it doesn't. Can you share a minimal working example?

@kernc
Copy link
Owner

kernc commented Sep 24, 2019

does the back tester has some sort of default maximum holding time where it closes the position after n amount of time has passed

Sounds like a good idea for a composable base strategy, HoldNBarsStrategy. 💡

@kernc kernc added the enhancement New feature or request label Sep 24, 2019
@ridulfo
Copy link

ridulfo commented Mar 22, 2020

Multiple positions/instruments aren't yet supported. Welcome a discussion if someone would have a look.

I would also be interested in being able to have multiple instruments at the same. This could possibly be implemented using a pandas panel.

In this way arbitrage strategies would be possible to backtest.

@kernc
Copy link
Owner

kernc commented Mar 22, 2020

@nicoloridulfo Can't one backtest arbitrage opportunities by providing the strategy with extra data?

@ridulfo
Copy link

ridulfo commented Mar 22, 2020

@kernc Thanks for answering.

I believe that is not the case. Correct me if I am wrong.
I have studied the code and from what i see: one backtest = one instrument. It is not possible to look at multiple instruments in the same backtest and e.g. go long one instrument and short an other. If the order placing would be instrument specific and with some minor changes to the broker and strategy classes, I believe that it could be possible. The rest of the code is written in such a way that it seems like it was made to support this kind of feature.

I would be interested in trying to implement such a feature if you'll assign me to it.

@kernc
Copy link
Owner

kernc commented Mar 22, 2020

Ah, pairs arbitrage. 😅 I don't know how multiple instruments fit into the existing API. I'd foremost like to keep it simple and straightforward for the 95% use case. If you do care to look into it, however, please certainly base your findings on PR #47 as that's about to get merged soon.

@ridulfo
Copy link

ridulfo commented Mar 22, 2020

Not only for arbitrage! I was thinking multi instrument portfolios.
One of the most important parts of trading is risk management. Portfolio optimization through asset diversification is one way. I'll look into it 👍

@sdmovie
Copy link

sdmovie commented May 27, 2020

Would suggest first make the single equity finished(which is 90+% od the use case) then considering enhance to support multiple equities in one strategy. Can imaging things will go complex towards what backtrader looks like.
Ther are still gaps for single equity case to fill or to verify, suppoorting of Future/Stocks with options of:
Margin/NonMargin
Shortable/NonShortable
T+0 or T+N
If putting everything in one backtest too complicated, possible split another parallel backtestbroker to deal with subset of cases ?

@diegolovison
Copy link
Contributor

You also will need to support TP or SP per group of instruments.
Example:
buy: A, B, and C
TP 5% [A,B,C]
SL 10% [A,B,C]

@ttfreeman
Copy link
Contributor

Is this assigned?

@ttfreeman
Copy link
Contributor

I also was looking at one of the other issues that has suggested adding support for stock options. I think this would be a prerequisite for that, because option strategies are usually a combination of one, two , or more long or short trades on Put or Call options.

@arisliang
Copy link

arisliang commented Jun 16, 2021

What is the API implication to implement this? Though I tend to think this is a feature very worth to have.

@lawrence910426
Copy link

It would be really helpful if we could do pair tradings. Thank you so much :D

@truongthanh96
Copy link

Pair trading seems like a popular algorithm yet no one bothers to develop a proper backtest API for its. Fine, I will do it myself

@BradKML
Copy link

BradKML commented Feb 21, 2024

@truongthanh96 how is the progress?

@kernc kernc changed the title Is there a way to backtest more instruments at once Backtest multiple instruments at once Feb 19, 2025
@kernc kernc marked this as a duplicate of #1105 Feb 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
API Needs API-related discussion enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

10 participants