public override void Initialize() { SetCash(10000); SetStartDate(1998, 1, 1); SetEndDate(DateTime.Now); //SetBenchmark("SPY"); SetWarmup(44); foreach (var symbol in _symbols) { AddSecurity(SecurityType.Equity, symbol, Resolution.Daily); _selectionDatas.AddOrUpdate(symbol, new TrendSelectionData(symbol)); } Schedule.On(DateRules.On(new DateTime(2000, 7, 1), new DateTime(2007, 10, 1)), TimeRules.BeforeMarketClose("SPY"), () => { Log("Sell >> " + Securities["SPY"].Price + " Symbol " + "SPY"); SetHoldings("SPY", -FractionOfPortfolio); }); _chart = new Chart("ICH", ChartType.Overlay); _chart.AddSeries(new Series("Price", SeriesType.Line)); _chart.AddSeries(new Series("Tenkan", SeriesType.Line)); _chart.AddSeries(new Series("Kijun", SeriesType.Line)); _chart.AddSeries(new Series("SenkouA", SeriesType.Line)); _chart.AddSeries(new Series("SenkouB", SeriesType.Line)); _chart.AddSeries(new Series("ADX", SeriesType.Line)); _chart.AddSeries(new Series("ADX.NegativeDirectionalIndex", SeriesType.Line)); _chart.AddSeries(new Series("ADX.PositiveDirectionalIndex", SeriesType.Line)); }
public void RebalanceFunctionDateRules(Language language) { var dateRules = new DateRules(new SecurityManager( new TimeKeeper(new DateTime(2015, 1, 1), DateTimeZone.Utc)), DateTimeZone.Utc); TestPortfolioConstructionModel constructionModel; if (language == Language.Python) { constructionModel = new TestPortfolioConstructionModel(); using (Py.GIL()) { dynamic func = PythonEngine.ModuleFromString("RebalanceFunc", @" import datetime def RebalanceFunc(dateRules): return dateRules.On(datetime.datetime(2015, 1, 10), datetime.datetime(2015, 1, 30))").GetAttr("RebalanceFunc"); constructionModel.SetRebalancingFunc(func(dateRules)); } } else { var dateRule = dateRules.On(new DateTime(2015, 1, 10), new DateTime(2015, 1, 30)); constructionModel = new TestPortfolioConstructionModel(dateRule); } Assert.IsFalse(constructionModel.IsRebalanceDueWrapper(new DateTime(2015, 1, 1), new Insight[0])); Assert.IsTrue(constructionModel.IsRebalanceDueWrapper(new DateTime(2015, 1, 10), new Insight[0])); Assert.IsFalse(constructionModel.IsRebalanceDueWrapper(new DateTime(2015, 1, 20), new Insight[0])); Assert.IsFalse(constructionModel.IsRebalanceDueWrapper(new DateTime(2015, 1, 29), new Insight[0])); Assert.IsTrue(constructionModel.IsRebalanceDueWrapper(new DateTime(2020, 2, 1), new Insight[0])); Assert.IsFalse(constructionModel.IsRebalanceDueWrapper(new DateTime(2020, 2, 2), new Insight[0])); Assert.IsFalse(constructionModel.IsRebalanceDueWrapper(new DateTime(2020, 10, 2), new Insight[0])); }
/// <summary> /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized. /// </summary> public override void Initialize() { SetStartDate(2013, 10, 07); //Set Start Date SetEndDate(2013, 10, 11); //Set End Date SetCash(100000); //Set Strategy Cash // Find more symbols here: http://quantconnect.com/data AddSecurity(SecurityType.Equity, "SPY", Resolution.Minute); // events are scheduled using date and time rules // date rules specify on what dates and event will fire // time rules specify at what time on thos dates the event will fire // schedule an event to fire at a specific date/time Schedule.On(DateRules.On(2013, 10, 7), TimeRules.At(13, 0), () => { Log("SpecificTime: Fired at : " + Time); }); // schedule an event to fire every trading day for a security // the time rule here tells it to fire 10 minutes after SPY's market open Schedule.On(DateRules.EveryDay("SPY"), TimeRules.AfterMarketOpen("SPY", 10), () => { Log("EveryDay.SPY 10 min after open: Fired at: " + Time); }); // schedule an event to fire every trading day for a security // the time rule here tells it to fire 10 minutes before SPY's market close Schedule.On(DateRules.EveryDay("SPY"), TimeRules.BeforeMarketClose("SPY", 10), () => { Log("EveryDay.SPY 10 min before close: Fired at: " + Time); }); // schedule an event to fire on certain days of the week Schedule.On(DateRules.Every(DayOfWeek.Monday, DayOfWeek.Friday), TimeRules.At(12, 0), () => { Log("Mon/Fri at 12pm: Fired at: " + Time); }); // the scheduling methods return the ScheduledEvent object which can be used for other things // here I set the event up to check the portfolio value every 10 minutes, and liquidate if we have too many losses Schedule.On(DateRules.EveryDay(), TimeRules.Every(TimeSpan.FromMinutes(10)), () => { // if we have over 1000 dollars in unrealized losses, liquidate if (Portfolio.TotalUnrealizedProfit < -1000) { Log("Liquidated due to unrealized losses at: " + Time); Liquidate(); } }); // schedule an event to fire at the beginning of the month, the symbol is optional if // specified, it will fire the first trading day for that symbol of the month, if not specified // it will fire on the first day of the month Schedule.On(DateRules.MonthStart("SPY"), TimeRules.AfterMarketOpen("SPY"), () => { // good spot for rebalancing code? }); }
public override void Initialize() { SetStartDate(2013, 10, 07); //Set Start Date SetEndDate(2013, 10, 11); //Set End Date SetCash(2500000); SetCash("TRY", 111000, 1); //Set Strategy Cash security = AddSecurity(SecurityType.Equity, BIST_SECURITY_NAME, Resolution.Second); Schedule.On(DateRules.On(2016, 05, 11), TimeRules.At(11, 38), () => { Log("SpecificTime: Fired at : " + Time); }); // schedule an event to fire every trading day for a security // the time rule here tells it to fire 10 minutes after SPY's market open Schedule.On(DateRules.EveryDay(BIST_SECURITY_NAME), TimeRules.AfterMarketOpen(BIST_SECURITY_NAME, 10), () => { Log("EveryDay.GARAN 10 min after open: Fired at: " + Time); }); // schedule an event to fire every trading day for a security // the time rule here tells it to fire 10 minutes before SPY's market close Schedule.On(DateRules.EveryDay(BIST_SECURITY_NAME), TimeRules.BeforeMarketClose(BIST_SECURITY_NAME, 10), () => { Log("EveryDay.GARAN 10 min before close: Fired at: " + Time); }); // schedule an event to fire on certain days of the week Schedule.On(DateRules.Every(DayOfWeek.Monday, DayOfWeek.Friday), TimeRules.At(12, 0), () => { Log("Mon/Fri at 12pm: Fired at: " + Time); }); // the scheduling methods return the ScheduledEvent object which can be used for other things // here I set the event up to check the portfolio value every 10 minutes, and liquidate if we have too many losses Schedule.On(DateRules.EveryDay(), TimeRules.Every(TimeSpan.FromMinutes(10)), () => { Log("EveryDay 10 min Fired at: " + Time); // if we have over 1000 dollars in unrealized losses, liquidate if (Portfolio.TotalUnrealizedProfit < -1000) { Log("Liquidated due to unrealized losses at: " + Time); Liquidate(); } }); //SetBrokerageModel(BrokerageName.TEB); //QuantConnect.Securities.Security sec = AddSecurity(SecurityType.Equity, SECURITY_NAME, Resolution.Second); //security.DataFilter = new CustomDataFilter(); //Securities[securityName].DataFilter = new CustomDataFilter(); //sec.FeeModel = new QuantConnect.Orders.Fees.TEBFeeModel(0); //sec.FillModel = new QuantConnect.Orders.Fills.TEBFillModel(); //sec.MarginModel = new QuantConnect.Securities.TEBSecurityMarginModel(1m); //sec.SlippageModel = new QuantConnect.Orders.Slippage.TEBSlippageModel(0m); }
public void DateRulesToFunc() { var dateRules = new DateRules(new SecurityManager( new TimeKeeper(new DateTime(2015, 1, 1), DateTimeZone.Utc)), DateTimeZone.Utc); var first = new DateTime(2015, 1, 10); var second = new DateTime(2015, 1, 30); var dateRule = dateRules.On(first, second); var func = dateRule.ToFunc(); Assert.AreEqual(first, func(new DateTime(2015, 1, 1))); Assert.AreEqual(first, func(new DateTime(2015, 1, 5))); Assert.AreEqual(second, func(first)); Assert.AreEqual(Time.EndOfTime, func(second)); Assert.AreEqual(Time.EndOfTime, func(second)); }
public void Rebalance(Universe universe, List <Symbol> newPortfolio) { List <Symbol> portfolio = GetPortfolioSymbols(); List <Symbol> sellList = this.minus(portfolio, newPortfolio); List <Symbol> buyList = this.minus(newPortfolio, portfolio); int diff = sellList.Count() - buyList.Count(); while (diff > 0) { sellList.RemoveAt(0); diff--; } foreach (var symbol in sellList) { Security security = universe.Members[symbol]; DateTime nextOpen = security.Exchange.Hours.GetNextMarketOpen(new DateTime(Time.Year, Time.Month, Time.Day), false); Schedule.On( DateRules.On(nextOpen.Year, nextOpen.Month, nextOpen.Day), TimeRules.AfterMarketOpen(symbol, 60), () => { //Debug("sold " + symbol); Liquidate(symbol); } ); } foreach (var symbol in buyList) { Security security = universe.Members[symbol]; DateTime nextOpen = security.Exchange.Hours.GetNextMarketOpen(new DateTime(Time.Year, Time.Month, Time.Day), false); Schedule.On( DateRules.On(nextOpen.Year, nextOpen.Month, nextOpen.Day), TimeRules.AfterMarketOpen(symbol, 90), () => { //Debug("bought " + symbol); SetHoldings(symbol, 0.95m / newPortfolio.Count); } ); } }