A big thank you to the entire Quantopian team for a very well organized conference. I gained valuable insights every day, and I look forward to being able to read the presentation decks of the many speakers that I missed (with 4 presentation streams to choose from every hour on Friday, I had to make some very difficult choices).
While I had only half the time for the hackathon (I had to leave at 1:30pm to catch my flight back to Hong Kong), I really appreciated being "forced" to use some of the key zipline APIs in an environment where I had all these experts ready to answer my questions. I definitely feel that I significantly improved my understanding of pipeline custom factors and the optimize API thanks to the Hackathon.
As I knew I had a very short amount of time for the hackathon (I only had 2.5hours), I decided that it made a lot more sense to start from something that was already satisfying competition criteria and was already working. I therefore just cloned the long/short example from Delaney's lectures as a starting point. I just replaced the value factor with a custom factor for earnings growth. I then made minor adjustments to the momentum factor and I transformed the momentum factor ranking using a quadratic manipulation (to lower the ranking score of the top ranked scores - Alpha lens analysis showed me that 1yr momentum is a reliable and persistent factor, but it's not linear as the top quintile of momentum ranked stocks are all over the place depending on different time periods. Momentum leadership downwards persists a lot more than leadership upwards...).
While I'm sure that my very minor changes caused a weird bug, I was stunned that backtested returns were so volatile with more than 300 positions at all times, and a net exposure close to 0. How can a very diversified market neutral portfolio with a gross exposure close to 100% lose around 14% between December 28 and December 29 2016. Something is really weird! If only I could understand the magic done by the Optimize API, it would be a lot easier to debug this type of algo. I guess the first step would be to look at all the individual positions held when this big drawdown occured, but that seems quite time consuming with close to 400 positions...
Any advice on this would be greatly appreciated.
|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|