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
//Added "SetBenchmark("SPY");", "SetBenchmark(_macd);"
// Add holdings of SPY 

/*
 * 	A simple moving average (SMA) is an arithmetic moving average calculated by adding the closing 
 *	price of the security for a number of time periods and then dividing this total by the number of 
 *	time periods.
 *
 *	An exponential moving average (EMA) is a type of moving average that is similar to a 
 *	simple moving average, except that more weight is given to the latest data. It's also known as the 
 *	exponentially weighted moving average. This type of moving average reacts faster to recent price 
 *	changes than a simple moving average.
 *
 *	Moving average convergence divergence (MACD) is a trend-following momentum indicator that shows 
 *	the relationship between two moving averages of prices. The MACD is calculated by 
 *	subtracting the 26-day exponential moving average (EMA) from the 12-day EMA. 
 *	A nine-day EMA of the MACD, called the "signal line", is then plotted on top of the MACD, 
 *	functioning as a trigger for buy and sell signals.
*/

using System;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;

namespace QuantConnect.Algorithm.CSharp
{
    /// <summary>
    /// Uses daily data and a simple moving average cross to place trades and an ema for stop placement
    /// </summary>
    /// <meta name="tag" content="using data" />
    /// <meta name="tag" content="indicators" />
    /// <meta name="tag" content="trading and orders" />
    public class DailyAlgorithm : QCAlgorithm
    {
        private DateTime _lastAction;
        private MovingAverageConvergenceDivergence _macd;
        private ExponentialMovingAverage _ema;
        private readonly Symbol _cs = QuantConnect.Symbol.Create("CS", SecurityType.Equity, Market.USA);
        private readonly Symbol _spy = QuantConnect.Symbol.Create("SPY", SecurityType.Equity, Market.USA);

        /// <summary>
        /// Initialise the data and resolution required, as well as the cash and start-end dates for your algorithm. All algorithms must initialized.
        /// </summary>
        public override void Initialize()
        {
            SetStartDate(2013, 01, 01);  //Set Start Date
            SetEndDate(DateTime.Now);    //Set End Date
            SetCash(1700);             //Set Strategy Cash

            // Find more symbols here: http://quantconnect.com/data
            AddSecurity(SecurityType.Equity, "CS", Resolution.Hour);
            AddSecurity(SecurityType.Equity, "SPY", Resolution.Daily);
            
            SetBenchmark("SPY");
            
         //Wilders: The standard exponential moving average, using a smoothing factor of 1/n
 //           _macd = MACD(_spy, 12, 26, 9, MovingAverageType.Wilders , Resolution.Daily, Field.Close);
            _macd = MACD(_spy, 12, 26, 9, MovingAverageType.Exponential , Resolution.Daily, Field.Close);
            _ema = EMA(_cs, 15*6, Resolution.Hour, Field.SevenBar);
            
            /*
            *Leverage is the investment strategy of using borrowed money: specifically, the use of various financial 
            *instruments or borrowed capital to increase the potential return of an investment. Leverage can also 
            *refer to the amount of debt used to finance assets. When one refers to something (a company, a property
            *or an investment) as "highly leveraged," it means that item has more debt than equity.
            */
            Securities[_cs].SetLeverage(1.0m); //This is done to be able to short the security below
        }

        /// <summary>
        /// OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
        /// </summary>
        /// <param name="data">TradeBars IDictionary object with your stock data</param>
        public void OnData(TradeBars data)
        {
            if (!_macd.IsReady) return;
            if (!data.ContainsKey(_cs)) return;
            if (_lastAction.Date == Time.Date) return;
            _lastAction = Time;

            var holding = Portfolio[_spy];
            /*
            *	If there are no holdings of SPY, and if SPY's Moving Average Convergence Divergence
            *	is GREATER  than its signal, 
            *	AND if CS's price is ABOVE its exponential moving average, then buy CS on a long position. 
            */
            if (holding.Quantity <= 0 && _macd > _macd.Signal && data[_cs].Price > _ema)
            {
            	//	C#: If you want a numeric real literal to be treated as decimal, use the suffix m or M.
            	//	Without the suffix m, the number is treated as a double, thus generating a compiler error.
                SetHoldings(_cs, 0.25m);
                SetHoldings(_spy, 0.75m);
                
            }
          	/*
            *	Else if there are some or no holdings of SPY, and if SPY's Moving Average Convergence Divergence
            *	is LESS than its signal, 
            *	AND if CS's price is BELOW its exponential moving average, then short CS. 
            */            
            else if (holding.Quantity >= 0 && _macd < _macd.Signal && data[_cs].Price < _ema)
            {
                SetHoldings(_cs, -0.25m);
                SetHoldings(_spy, 0.75m);
            }
            
            Plot("Portfolio", Portfolio.TotalPortfolioValue);
            /*
            *	This example shows that 
            */
        }
    }
}