Quant BuffetRelax, Not Over Thinking

Trading Commodity ETFs versus Equity ETFs

Log in to collect

Academic paper

Strategy in a nutshell

This strategy trades SPY and a broad commodity ETF daily. If the stock market was bullish the previous day, it goes long commodities and short SPY, holding positions for one day to capture short-term market sentiment.

Economic rationale

Equity market sentiment can influence commodity ETF prices due to separate trading venues and limited arbitrage. These sentiment-driven deviations create exploitable short-term inefficiencies between equities and commodities.

Backtest performance

Annualised return31.1%
Beta-0.226
Win rate33%

Full Python code

from AlgorithmImports import *
#endregion
class TradingCommodityVersusEquity(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1)
self.SetCash(100000)

data = self.AddEquity('SPY', Resolution.Daily)
data.SetLeverage(5)
self.market:Symbol = data.Symbol

data = self.AddEquity('DBC', Resolution.Daily)
data.SetLeverage(5)
self.commodities:Symbol = data.Symbol

self.data:RollingWindow = RollingWindow[float](2)

def OnData(self, data):
# store market price
if self.market in data and data[self.market] and self.commodities in data and data[self.commodities]:
    market_price:float = data[self.market].Value
    self.data.Add(market_price)
    
    if self.data.IsReady:
        prevoius_day_return:float = self.data[0] / self.data[1] - 1
        if prevoius_day_return > 0:
            self.SetHoldings(self.commodities, 1)
            self.SetHoldings(self.market, -1)
        else:
            self.Liquidate()