Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio 0 Tracking Error 0 Treynor Ratio 0 Total Fees $0.00 |
namespace QuantConnect.Rotation { public class GlobalRotation : QCAlgorithm { private int N = 3; private int period = 6*21; // these are the growth symbols we'll rotate through List<string> GrowthSymbols = new List<string> { "EWJ", //# iShares MSCI Japan Index ETF "EZU", //# iShares MSCI Eurozone ETF "EFNL", //# iShares MSCI Finland Capped Investable Market Index ETF "EWW", //# iShares MSCI Mexico Inv. Mt. Idx "ERUS", //# iShares MSCI Russia ETF "IVV", //# iShares S&P 500 Index "ICOL", //# Consumer Discretionary Select Sector SPDR Fund "AAXJ", //# iShares MSCI All Country Asia ex Japan Index ETF "AUD", //# Australia Bond Index Fund "EWQ", //# iShares MSCI France Index ETF "BUND", //# Pimco Germany Bond Index Fund "EWH", //# iShares MSCI Hong Kong Index ETF "EPI", //# WisdomTree India Earnings ETF "EIDO", // # iShares MSCI Indonesia Investable Market Index ETF "EWI", //# iShares MSCI Italy Index ETF "GAF", //# SPDR S&P Emerging Middle East & Africa ETF "ENZL", //# iShares MSCI New Zealand Investable Market Index Fund "NORW", //# Global X FTSE Norway 30 ETF "EWY", //# iShares MSCI South Korea Index ETF "EWP", //# iShares MSCI Spain Index ETF "EWD", //# iShares MSCI Sweden Index ETF "EWL", //# iShares MSCI Switzerland Index ETF "GXC", //# SPDR S&P China ETF "EWC", //# iShares MSCI Canada Index ETF "EWZ", ///# iShares MSCI Brazil Index ETF "ARGT", //# Global X FTSE Argentina 20 ETF "AND", //# Global X FTSE Andean 40 ETF "AIA", //# iShares S&P Asia 50 Index ETF "EWO", //# iShares MSCI Austria Investable Mkt Index ETF "EWK", //# iShares MSCI Belgium Investable Market Index ETF "BRAQ", //# Global X Brazil Consumer ETF "ECH", //# iShares MSCI Chile Investable Market Index ETF "CHIB", //# Global X China Technology ETF "EGPT", //# Market Vectors Egypt Index ETF "ADRU", //# BLDRS Europe 100 ADR Index ETF "EDV", //#20+yr treasure bond "SHY", //#1-3y treasure bonds "GLD", //#gold "DBC", //#commodities }; // these are the safety symbols we go to when things are looking bad for growth List<string> SafetySymbols = new List<string> { }; // we'll hold some computed data in these guys List<SymbolData> SymbolData = new List<SymbolData>(); public override void Initialize() { SetStartDate(2017, 12, 25); SetEndDate(2018, 1, 15); SetCash(100000); SetWarmUp(period); foreach (var symbol in GrowthSymbols) { // ideally we would use daily data AddSecurity(SecurityType.Equity, symbol, Resolution.Daily); var threeMonthPerformance = MOM(symbol, period, Resolution.Daily); SymbolData.Add(new SymbolData { Symbol = symbol, ThreeMonthPerformance = threeMonthPerformance }); } //# shcedule the function to fire at the month start Schedule.On(DateRules.MonthStart("IVV"), TimeRules.AfterMarketOpen("IVV"), Rebalance); } public void OnData(TradeBars data) { } public void Rebalance() { if (IsWarmingUp) return; // pick which one is best from growth and safety symbols Debug(Time.ToString()); var orderedObjScores = SymbolData.OrderByDescending(x => x.ObjectiveScore).ToList(); foreach (var t in orderedObjScores) { Debug(t.Symbol + " " + t.ObjectiveScore); } /* foreach (var orderedObjScore in orderedObjScores) { Log(">>SCORE>>" + orderedObjScore.Symbol + ">>" + orderedObjScore.ObjectiveScore); } var top = orderedObjScores.Take(N); //liquidate foreach (var kvp in Portfolio) { var security_hold = kvp.Value; //liquidate the security which is no longer in the top momentum list if (security_hold.Invested) { bool inlist = false; foreach (var t in top) { if (security_hold.Symbol.Value == t.Symbol) inlist = true; } if (inlist) Liquidate(security_hold.Symbol); } } // we'll hold some computed data in these guys List<SymbolData> added_symbols = new List<SymbolData>(); foreach (var symbol in top) { if (!Portfolio[symbol.Symbol].Invested) added_symbols.Add(symbol); } foreach (var symbol in added_symbols) { SetHoldings(symbol.Symbol,1/added_symbols.Count); } */ } } class SymbolData { public string Symbol; public Momentum ThreeMonthPerformance { get; set; } public decimal ObjectiveScore { get { return ThreeMonthPerformance; } } } }