Back to Community
junk

Please delete this post.

12 responses

Please delete this post.

Pravin, thanks for sharing! Is there any reason why you're not using all of the sectors?

Hey Pravin,

Looks interesting. Can you explain the main thesis behind this algorithm a little more? I unfortunately don't currently have the time to infer it from the code. What are you trying to do and how is the regression helping you get there?

Disclaimer

The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by Quantopian. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. No information contained herein should be regarded as a suggestion to engage in or refrain from any investment-related course of action as none of Quantopian nor any of its affiliates is undertaking to provide investment advice, act as an adviser to any plan or entity subject to the Employee Retirement Income Security Act of 1974, as amended, individual retirement account or individual retirement annuity, or give advice in a fiduciary capacity with respect to the materials presented herein. If you are an individual retirement or other investor, contact your financial advisor or other fiduciary unrelated to Quantopian about whether any given investment idea, strategy, product or service described herein may be appropriate for your circumstances. All investments involve risk, including loss of principal. Quantopian makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances.

Please delete this post.

Please delete this post.

I thought this was quite an interesting algo so I removed some duplicate stuff and created a version where you can use sector ids.

I'll go through the paper and implementation later and try to isolate what drives the performance.

Here is backtest with all sectors with improved sharpe and reduced drawdown.

Clone Algorithm
128
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 57c569c09c8c8e10184de580
There was a runtime error.

Awesome Mikko.

Hello Pravin,

A few thoughts here:

  • This algorithm could likely be far more elegantly expressed using our pipeline API. Let me know if it's not clear how.
  • Evaluating quality of on-the-fly regressions such as the ones you're doing is difficult. One problem can be if you don't use enough of a historical window to compute the betas, your betas can vary a ton day over day as they won't converge. If your residuals are stationary that's a good sign, as it indicates that you're explaining the non-stationarity in prices with equivalent non-stationarity in factors. One thing you shouldn't do is trust any estimates of p-values or parameter standard error that come out of these regressions, as those are very wrong on non-stationary data.
  • In this case you are using regression more as part of a forecast. You probably want to validate the overall model rather than worrying about validating each regression you run. If you think that the regressions are capturing important dependencies between factor and price values, I would think about ways to validate that overall hypothesis rather than worrying about each regression you're running.
  • What you are constructing is effectively a multi-factor alpha model with dynamic alpha combination. The question is whether there is alpha left over. I might try to use pipeline for this and then feed it into alphalens to get a better sense.
  • I ran a tearsheet on your backtest and it seems like it makes a good chunk of its returns during 2008-09. This worries me because usually that's an indication that your strategy is overfit (pricing model fit to N=1 event). I would run it post 2010 and see how it looks during your analysis.
  • At the end of the day consistency is the best check. After you've done a few more analyses, stop developing this strategy and let it accumulate 3 months out of sample while you work on other stuff. Then come back to it and use pyfolio to run an out of sample tearsheet and ensure that the behavior and distribution of returns match historically and in your new window.

Hope this helps, it's difficult for me to say more without reading the paper, which I unfortunately don't have time to do right now. Overall this is a very interesting strategy and there are known examples of being able to trade on noise left over once you've removed principle components from the market.

Thanks,
Delaney

Loading notebook preview...
Notebook previews are currently unavailable.

Thanks Delaney for the very useful feedback. I will comb through it and try to incorporate your feedback into the analysis.

I ported the algorithm to the new "Q1500" and tried it using pipeline. Two issues:

  1. It is painfully slow. 3 hours and backtest has not completed.
  2. All profits are eaten up transaction costs. Don't know what is so different about this.

Try setting the universe to the intersection of the top 1500 largest by market cap with the top 1500 by dollar volume. That should get rid of most of the illiquid stuff, and be fairly quick to run.

I've updated the algo to use pipeline with Q1500US and optimize but there is a problem. For some reason its failing when I use optimize but it doesn't fail on the same stock when using the original ordering. The stock optimize is failing on is DVMT, the day after Dell switched over.

To see the algo work fine on the original ordering, change line 75 to:
useOptimize = True

Any idea whats going on or how to fix it?

Clone Algorithm
18
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 5881843e04fc6a61638c4a6a
There was a runtime error.