Overall Statistics |
Total Trades 1531 Average Win 0.22% Average Loss -0.24% Compounding Annual Return 0.213% Drawdown 10.000% Expectancy 0.003 Net Profit 1.071% Sharpe Ratio 0.069 Loss Rate 48% Win Rate 52% Profit-Loss Ratio 0.91 Alpha -0.067 Beta 3.588 Annual Standard Deviation 0.044 Annual Variance 0.002 Information Ratio -0.374 Tracking Error 0.044 Treynor Ratio 0.001 Total Fees $0.00 |
# https://quantpedia.com/Screener/Details/118 from QuantConnect.Python import PythonQuandl import numpy as np class TimeSeriesMomentumEffect(QCAlgorithm): def Initialize(self): self.SetStartDate(2014,1, 1) self.SetEndDate(2019,1, 1) self.SetCash(1000000) self.symbols = ["CHRIS/CME_LC1", # Live Cattle Futures, Continuous Contract #1 "CHRIS/CME_LN1", # Lean Hog Futures, Continuous Contract #1 "CHRIS/ICE_B1", # Brent Crude Futures, Continuous Contract "CHRIS/ICE_G1", # Gas Oil Futures, Continuous Contract "CHRIS/ICE_CT1", # Cotton No. 2 Futures, Continuous Contract "CHRIS/ICE_KC1", # Coffee C Futures, Continuous Contract "CHRIS/ICE_CC1", # Cocoa Futures, Continuous Contract "CHRIS/ICE_SB1", # Sugar No. 11 Futures, Continuous Contract "CHRIS/CME_C1", #Corn Futures, Continuous Contract #1 (C1) (Front Month) "CHRIS/CME_S1", #Soybean Futures, Continuous Contract #1 (S1) (Front Month) "CHRIS/CME_SM1", #Soybean Meal Futures, Continuous Contract #1 (SM1) (Front Month) "CHRIS/CME_BO1", #Soybean Oil Futures, Continuous Contract #1 (BO1) (Front Month) "CHRIS/CME_W1", #Wheat Futures, Continuous Contract #1 (W1) (Front Month) ] self.period = 252 self.roc = {} for symbol in self.symbols: self.AddData(QuandlFutures, symbol, Resolution.Daily) self.roc[symbol] = self.ROC(symbol, self.period) #Initialize ROC indicator : ROC is short for RateofChange self.SetWarmup(self.period) self.Schedule.On(self.DateRules.MonthStart("CHRIS/CME_S1"), self.TimeRules.AfterMarketOpen("CHRIS/CME_S1"), self.Rebalance) # Rebalance the portfolio every month def Rebalance(self): # Make a historical data Request to get the daily returns history = self.History(self.symbols, self.period, Resolution.Daily) history = history.value.unstack(level=0).pct_change().dropna() # Compute the inverse of the volatility # The weights are the normalized inverse of the volatility vol_inv = 1 / history.std(ddof=1) vol_sum = vol_inv.sum() weights = (vol_inv / vol_sum).fillna(0).to_dict() self.Liquidate() for symbol, roc in self.roc.items(): percentage = np.sign(roc.Current.Value) * weights[symbol] *.5 self.SetHoldings(symbol, percentage) class QuandlFutures(PythonQuandl): def __init__(self): self.ValueColumnName = "Settle" #set the column name of value to "Settle", because the column name of desired data from Quandl is "Settle".