Overall Statistics
Total Trades
2
Average Win
0%
Average Loss
0%
Compounding Annual Return
171.999%
Drawdown
11.200%
Expectancy
0
Net Profit
39.702%
Sharpe Ratio
3.387
Probabilistic Sharpe Ratio
75.282%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
1.535
Beta
-0.058
Annual Standard Deviation
0.449
Annual Variance
0.202
Information Ratio
1.869
Tracking Error
0.687
Treynor Ratio
-26.102
Total Fees
$2.00
using System;
using System.Linq;
using QuantConnect.Indicators;
using QuantConnect.Models;

namespace QuantConnect.Algorithm.Examples
{ 
    public class QCUMovingAverageCross : QCAlgorithm
    {
    	private string _symbol = "SPY";
    	private decimal stoploss_pcnt =0.02m;
    	private decimal profittarget_pcnt =0.02m;
        private Symbol symbol;
        private Security sym;
        private ExponentialMovingAverage ema;
        private DateTime previous;
        private bool sl_set=false;
        private bool is_above, is_below, is_above_last, is_below_last;
        private DateTime StartDay = new DateTime(2020, 02, 29);
        private DateTime EndDay = new DateTime(2020, 06, 29);
        private int startCashAmount = 25000;
        
        private Chart _equityChart;
		string chartName1 = "Chart_1"; 

        public override void Initialize()
        {
            // set up our analysis span
            SetStartDate(StartDay);   
            SetEndDate(EndDay); 
            SetCash(startCashAmount);

            sym = AddSecurity(SecurityType.Equity, _symbol, Resolution.Daily);
			symbol = sym.Symbol;

            ema = EMA(symbol, 20, Resolution.Daily); 
            
            
            // chart underlying equity
            _equityChart = new Chart(chartName1);
            _equityChart.AddSeries(new Series("Plot_my2", SeriesType.Candle));
            AddChart(_equityChart);
        }

    	
        public void OnData(Slice data)
        {
            if (!ema.IsReady) return;
            var holdings = Portfolio[symbol].Quantity;
            decimal cash = Portfolio.Cash;
            
			var X = Securities[symbol];
			var close = X.Close;//price
			
			is_above = close>ema;
			is_below = close<ema;
			var cross_above= is_above && !is_above_last;
			var cross_below= is_below && !is_below_last;
			
            if (holdings <= 0 && cross_above )
            {
                Log("BUY  >> " + Securities[symbol].Price);
                SetHoldings(symbol, 1.0);
                var quantity = CalculateOrderQuantity(_symbol, 1.0);
				//var ord= 
				MarketOrder(_symbol, quantity);
            }
  
            // Candle
            _equityChart.Series["Plot_my2"].AddPoint(Time+ TimeSpan.FromMinutes(1), X.Open);
            _equityChart.Series["Plot_my2"].AddPoint(Time+ TimeSpan.FromMinutes(2), X.High);
            _equityChart.Series["Plot_my2"].AddPoint(Time+ TimeSpan.FromMinutes(3), X.Low);
            _equityChart.Series["Plot_my2"].AddPoint(Time+ TimeSpan.FromMinutes(4), X.Close);
			Plot(chartName1, "ema", ema);
			
			is_above_last = is_above;
			is_below_last = is_below;
        }
    }
}