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 |
using System; using System.Globalization; using QuantConnect.Data; using QuantConnect.Data.Market; namespace QuantConnect.Algorithm.CSharp.My_Algorithms { public class ES5minData : TradeBar { public decimal UpperShadow { get; set; } public decimal LowerShadow { get; set; } public decimal HighLow { get; set; } public decimal RealBody { get; set; } public decimal UpperShadowPercent { get; set; } public decimal LowerShadowPercent { get; set; } public override SubscriptionDataSource GetSource(SubscriptionDataConfig config, DateTime date, bool isLiveMode) { return new SubscriptionDataSource("https://www.dropbox.com/s/2til1kzb6s4snpw/ES%202016-01-04%20-%202016-12-30%20-%20EST.csv?dl=1", SubscriptionTransportMedium.RemoteFile); } public override BaseData Reader(SubscriptionDataConfig config, string line, DateTime date, bool isLiveMode) { ES5minData cmBar = new ES5minData(); try { var data = line.Split(','); //Required. cmBar.Symbol = "ES"; if (data[1].Length == 5) { var theDate = DateTime.ParseExact(data[0], "yyyyMMdd", CultureInfo.InvariantCulture); var theTime = TimeSpan.ParseExact(data[1].Insert(0, "0"), "hhmmss", CultureInfo.InvariantCulture); cmBar.Time = theDate + theTime; } else { var theDate = DateTime.ParseExact(data[0], "yyyyMMdd", CultureInfo.InvariantCulture); var theTime = TimeSpan.ParseExact(data[1], "hhmmss", CultureInfo.InvariantCulture); cmBar.Time = theDate + theTime; } cmBar.Open = Convert.ToDecimal(data[2], CultureInfo.InvariantCulture); cmBar.High = Convert.ToDecimal(data[3], CultureInfo.InvariantCulture); cmBar.Low = Convert.ToDecimal(data[4], CultureInfo.InvariantCulture); cmBar.Close = Convert.ToDecimal(data[5], CultureInfo.InvariantCulture); cmBar.Volume = Convert.ToInt64(data[6], CultureInfo.InvariantCulture); cmBar.Value = cmBar.Close; if (cmBar.Close > cmBar.Open) { cmBar.UpperShadow = (cmBar.High - cmBar.Close); cmBar.LowerShadow = (cmBar.Open - cmBar.Low); cmBar.RealBody = (cmBar.Close - cmBar.Open); } else { cmBar.UpperShadow = (cmBar.High - cmBar.Open); cmBar.LowerShadow = (cmBar.Close - cmBar.Low); cmBar.RealBody = (cmBar.Open - cmBar.Close); } cmBar.HighLow = (cmBar.High - cmBar.Low); cmBar.UpperShadowPercent = (cmBar.UpperShadow / cmBar.HighLow * 100); cmBar.LowerShadowPercent = (cmBar.LowerShadow / cmBar.HighLow * 100); } catch { } return cmBar; } } }
using System; using QuantConnect.Indicators; using QuantConnect.Indicators.CandlestickPatterns; namespace QuantConnect.Algorithm.CSharp.My_Algorithms { public class SuppCanNrNotAloneLT30_50prct : QCAlgorithm { private string _symbol = "ES"; public RollingWindow<ES5minData> priorBar = new RollingWindow<ES5minData>(3); private SpinningTop _pattern = new SpinningTop(); public override void Initialize() { SetStartDate(2016, 01, 08); //Set Start Date SetEndDate(2016, 01, 08); //Set End Date SetCash(100000); //Set Strategy Cash AddData<ES5minData>(_symbol); _pattern = CandlestickPatterns.SpinningTop(_symbol); } public void OnData(ES5minData data) { if (data.Time.TimeOfDay < new TimeSpan(9, 30, 00) || data.Time.TimeOfDay > new TimeSpan(12, 00, 00)) return; priorBar.Add(data); if (!priorBar.IsReady) return; // priorBar[1] = present Bar; priorBar[2] = previous Bar; priorBar[0] (or data) = nextBar; decimal volumePercentChange = (((priorBar[1].Volume - (decimal)priorBar[2].Volume) / priorBar[1].Volume) * 100);// volume % change decimal vol = volumePercentChange.RoundToSignificantDigits(4); // rounding volume % change decimal priceChange = (priorBar[0].Close - priorBar[1].Close); decimal lowTail = priorBar[1].LowerShadowPercent.RoundToSignificantDigits(4); // if Real Body is Down on higher vol + Low Tail is b/n 30-50% of HighLow + after prior Down Candle - expect a Move Down if (priorBar[1].Close < priorBar[1].Open && priorBar[1].Volume > priorBar[2].Volume && priorBar[1].LowerShadowPercent >= 30 && priorBar[1].LowerShadowPercent <= 50 && priorBar[2].Close < priorBar[2].Open) { Debug(priorBar[1].Time + " Price Drop = " + priceChange); // time of day - found SuppCanNrNotAloneLT30_50prct } } } }