Overall Statistics |
Total Trades 1 Average Win 0% Average Loss 0% Compounding Annual Return 4.407% Drawdown 20.200% Expectancy 0 Net Profit 5.535% Sharpe Ratio 0.343 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.234 Beta -8.841 Annual Standard Deviation 0.166 Annual Variance 0.028 Information Ratio 0.223 Tracking Error 0.166 Treynor Ratio -0.006 Total Fees $1.84 |
# same error as degue!!! # should write to QC for checking!!! from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * from QuantConnect.Indicators import * from QuantConnect.Data.Market import TradeBar class RollingWindowAlgorithm(QCAlgorithm): def Initialize(self): '''Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.''' self.SetStartDate(2018,1,1) #Set Start Date self.SetEndDate(2019,4,1) #Set End Date self.SetCash(100000) #Set Strategy Cash # Find more symbols here: http://quantconnect.com/data self.AddEquity("SPY", Resolution.Daily) # Creates a Rolling Window indicator to keep the 2 TradeBar self.window = RollingWindow[TradeBar](2) # For other security types, use QuoteBar # Creates an indicator and adds to a rolling window when it is updated self.sma = self.SMA("SPY", 5) self.sma.Updated += self.SmaUpdated self.smaWin = RollingWindow[IndicatorDataPoint](5) # zc add on stockPlot = Chart("Trade Plot") stockPlot.AddSeries(Series("Price", SeriesType.Line, 0)) self.AddChart(stockPlot) self.lastPrice = 0 def SmaUpdated(self, sender, updated): '''Adds updated values to rolling window''' self.smaWin.Add(updated) def OnData(self, data): '''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.''' # Add SPY TradeBar in rollling window self.window.Add(data["SPY"]) # Wait for windows to be ready. if not (self.window.IsReady and self.smaWin.IsReady): return currBar = self.window[0] # Current bar had index zero. pastBar = self.window[1] # Past bar has index one. self.Log("Price: {0} -> {1} ... {2} -> {3}".format(pastBar.Time, pastBar.Close, currBar.Time, currBar.Close)) # zc add on self.lastPrice = currBar.Close self.Plot("Trade Plot", "Price", self.lastPrice) currSma = self.smaWin[0] # Current SMA had index zero. pastSma = self.smaWin[self.smaWin.Count-1] # Oldest SMA has index of window count minus 1. self.Log("SMA: {0} -> {1} ... {2} -> {3}".format(pastSma.Time, pastSma.Value, currSma.Time, currSma.Value)) if not self.Portfolio.Invested and currSma.Value > pastSma.Value: self.SetHoldings("SPY", 1)
from clr import AddReference AddReference("System") AddReference("QuantConnect.Algorithm") AddReference("QuantConnect.Common") from System import * from QuantConnect import * from QuantConnect.Algorithm import * import numpy as np import decimal as d from datetime import timedelta, datetime class CustomChartingAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2018,1,1) self.SetEndDate(2019,4,1) self.SetCash(100000) self.AddEquity("SPY", Resolution.Daily) # In your initialize method: # Chart - Master Container for the Chart: stockPlot = Chart("Trade Plot") # On the Trade Plotter Chart we want 3 series: trades and price: stockPlot.AddSeries(Series("Buy", SeriesType.Scatter, 0)) stockPlot.AddSeries(Series("Sell", SeriesType.Scatter, 0)) stockPlot.AddSeries(Series("Price", SeriesType.Line, 0)) self.AddChart(stockPlot) self.fastMA = 0 self.slowMA = 0 self.lastPrice = 0 self.resample = datetime.min self.resamplePeriod = (self.EndDate - self.StartDate) / 2000 def OnData(self, slice): if slice["SPY"] is None: return self.lastPrice = slice["SPY"].Close if self.fastMA == 0: self.fastMA = self.lastPrice if self.slowMA == 0: self.slowMA = self.lastPrice self.fastMA = (0.01 * self.lastPrice) + (0.99 * self.fastMA) self.slowMA = (0.001 * self.lastPrice) + (0.999 * self.slowMA) if self.Time > self.resample: self.resample = self.Time + self.resamplePeriod # On the 5th days when not invested buy: if not self.Portfolio.Invested and self.Time.day % 13 == 0: self.Order("SPY", (int)(self.Portfolio.MarginRemaining / self.lastPrice)) self.Plot("Trade Plot", "Buy", self.lastPrice) elif self.Time.day % 21 == 0 and self.Portfolio.Invested: self.Plot("Trade Plot", "Sell", self.lastPrice) self.Liquidate() def OnEndOfDay(self): #Log the end of day prices: self.Plot("Trade Plot", "Price", self.lastPrice)