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                          
            }
        }
    }
}