| Overall Statistics |
|
Total Trades 3 Average Win 0% Average Loss 0% Compounding Annual Return 7.098% Drawdown 14.600% Expectancy 0 Net Profit 105.544% Sharpe Ratio 1.013 Probabilistic Sharpe Ratio 47.806% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.063 Beta -0.027 Annual Standard Deviation 0.059 Annual Variance 0.003 Information Ratio -0.362 Tracking Error 0.172 Treynor Ratio -2.209 Total Fees $3.68 |
class HorizontalCalibratedThrustAssembly(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 30) # Set Start Date
self.SetCash(100000) # Set Strategy Cash
self.AddEquity('SPY', Resolution.Daily) # SP500 ETF
self.AddEquity('TLT', Resolution.Daily) # Long-Term Treasuries ETF
self.AddEquity('VXX', Resolution.Daily) # VIX ETF
self.AddEquity('GLD', Resolution.Daily) # Gold ETF
commodities = [
'USO', # Oil ETF
'DBA', # Agriculture ETF
'LIT' # Lithium ETF
]
self.adx = {}
for ticker in commodities:
self.AddEquity(ticker, Resolution.Daily)
self.adx[ticker] = self.ADX(ticker, 50, Resolution.Daily)
self.EnableAutomaticIndicatorWarmUp = True
def OnData(self, data):
if self.IsWarmingUp:
return
if not self.Portfolio.Invested:
self.SetHoldings('SPY', .24)
self.SetHoldings('TLT', .18)
self.SetHoldings('VXX', .21)
self.SetHoldings('GLD', .19)
commodities2buy = []
for ticker, adx in self.adx.items():
if adx.PositiveDirectionalIndex.Current.Value > 70:
commodities2buy.append(ticker)
else:
self.Liquidate(ticker)
if len(commodities2buy) > 0:
alloc = .18 / len(commodities2buy)
for ticker in commodities2buy:
self.SetHoldings(ticker, alloc)