Overall Statistics |
Total Trades 11 Average Win 0% Average Loss 0% Compounding Annual Return 24.574% Drawdown 32.600% Expectancy 0 Net Profit 0% Sharpe Ratio 0.791 Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0.227 Beta -0.09 Annual Standard Deviation 0.275 Annual Variance 0.076 Information Ratio 0.38 Tracking Error 0.317 Treynor Ratio -2.409 Total Fees $11.99 |
namespace QuantConnect { public class DonchianBreakout : QCAlgorithm { //Variables int quantity = 0; decimal close = 0; string symbol = "SPY"; RollingWindow<decimal> _top = new RollingWindow<decimal>(2); RollingWindow<decimal> _bottom = new RollingWindow<decimal>(2); decimal top = 0; decimal bottom = 0; Maximum max; Minimum min; public override void Initialize() { SetCash(25000); SetStartDate(2010, 1, 1); SetEndDate(DateTime.Now.Date.AddDays(-1)); int period = 5; AddSecurity(SecurityType.Equity, symbol, Resolution.Daily); max = MAX(symbol, period, Resolution.Daily); min = MIN(symbol, period, Resolution.Daily); } private DateTime previous; public void OnData(TradeBars data) { if (!max.IsReady) return; if (previous.Date == data.Time.Date) return; close = Securities[symbol].Close; int quantity = Convert.ToInt32(Portfolio.Cash/close); int holdings = Portfolio[symbol].Quantity; var top = max; //NEED TO FIGURE OUT HOW TO LAG THIS var bottom = min; //NEED TO FIGURE OUT HOW TO LAG THIS Console.WriteLine("close " + close); Console.WriteLine("top " + top); Console.WriteLine("bottom " + bottom); Console.WriteLine("quantity " + quantity); _top.Add(new IndicatorDataPoint(Time, top)); if(!_top.IsReady) return; var historicMax = _top[1]; Console.WriteLine("max lagged " + historicMax); _bottom.Add(bottom); if(!_bottom.IsReady) return; var historicMin = _bottom[1]; Console.WriteLine("min lagged " + historicMin); if (close > historicMax && holdings < 1) { Order(symbol, quantity); Debug("Long"); } if (close < historicMin && holdings > 0) { Order(symbol, -quantity); Debug("Short"); } Plot("High", historicMax); Plot("Low", historicMin); Plot("Close", close); } } }