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
Probabilistic 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
1.972
Tracking Error
0.505
Treynor Ratio
0
Total Fees
$0.00
using System;
using System.Collections.Concurrent;
using System.Linq;
using QuantConnect.Data.Market;
using QuantConnect.Data.UniverseSelection;
using QuantConnect.Indicators;

namespace QuantConnect.Algorithm.CSharp
{

    public class CoarseFundamentalTest : QCAlgorithm
    {
        private const decimal TargetPercent = 0.1m;
        private SecurityChanges _changes = SecurityChanges.None;
        // holds our coarse fundamental indicators by symbol
        private readonly ConcurrentDictionary<Symbol, SelectionData> _averages = new ConcurrentDictionary<Symbol, SelectionData>();

		List<Symbol> _invested = new List<Symbol>();

        // class used to improve readability of the coarse selection function
        private class SelectionData
        {
            public readonly ExponentialMovingAverage Fast;
            public readonly ExponentialMovingAverage Slow;

            public SelectionData()
            {
                Fast = new ExponentialMovingAverage(1);
                Slow = new ExponentialMovingAverage(5);
            }

            // computes an object score of how much large the fast is than the slow
            public decimal ScaledDelta
            {
                get { return (Fast - Slow)/((Fast + Slow)); }
            }
            

            // updates the EMA1 and EMA5 indicators, returning true when they're both ready
            public bool Update(DateTime time, decimal value)
            {
                return Fast.Update(time, value) && Slow.Update(time, value);
            }
        }

        public override void Initialize()
        {
            UniverseSettings.Resolution = Resolution.Hour;
            UniverseSettings.ExtendedMarketHours = false;
			//UniverseSettings.FillForward = true;
			//UniverseSettings.DataNormalizationMode = DataNormalizationMode.Raw;

            SetStartDate(2020, 6, 9);
            SetEndDate(2020, 6, 11);
            SetCash(1000);
			
    		AddUniverse(CoarseFilterFunction);
			
        }
		
		IEnumerable<Symbol> CoarseFilterFunction(IEnumerable<CoarseFundamental> coarse) {
			var _symbols = coarse
 				 .Where (x => x.Symbol.Value == "TSLA")
                 .Where(x => 
                    {
                    	var history = History(x.Symbol, 2, Resolution.Daily);
                	    var close = history.FirstOrDefault()?.Close;
                	    var avg = _averages.GetOrAdd(x.Symbol, sym => new SelectionData());
                	    
                	    if (x.Symbol.Value == "TSLA") {
                	    	Debug("====T====");
                	    	//Debug($"'Current price': {x.Price.ToString()}"); not split adjusted, but equals 0dayago close anyway
                	    	Debug($"'1dayago close': {history.ElementAt(0).Close.ToString()}");
                	    	Debug($"'1dayago open': {history.ElementAt(0).Open.ToString()}");
                	    	Debug($"'0dayago close': {history.ElementAt(1).Close.ToString()}");
                	    	Debug($"'0dayago open': {history.ElementAt(1).Open.ToString()}");
                	    	Debug($"1 day EMA: {avg.Fast}");
                	    	var gapup = history.ElementAt(1).Open / history.ElementAt(0).Open;
                	    	gapup = Math.Round((gapup - 1) * 100);
                	    	Debug($"Gap up: {gapup}%");
                	    	Debug("---------");
                	    }
                	    return false;
                    })
                    .Select(x => x.Symbol);
			return _symbols;
		}
    }
}