Overall Statistics
Total Trades
5
Average Win
0%
Average Loss
-1.54%
Compounding Annual Return
-39.487%
Drawdown
3.300%
Expectancy
-1
Net Profit
-2.877%
Sharpe Ratio
-4.207
Loss Rate
100%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
-0.317
Beta
-0.022
Annual Standard Deviation
0.079
Annual Variance
0.006
Information Ratio
-7.098
Tracking Error
0.137
Treynor Ratio
15.077
Total Fees
$10.00
namespace QuantConnect 
{   
    
    public class BasicTemplateAlgorithm : QCAlgorithm
    {
    	//parameters go here
    	const decimal StopLossPercent = 0.02m;
    	const decimal TakeProfitPercent = 0.04m;

    	private OrderTicket CurrentOrder;
    	private OrderTicket StopLoss;
    	private OrderTicket ProfitTarget;

        int quantity = 10000;
        decimal price = 0;
        decimal tolerance = 0m; //0.1% safety margin in prices to avoid bouncing.
        DateTime sampledToday = DateTime.Now;
        SimpleMovingAverage smaShort;
        SimpleMovingAverage smaLong;
        String symbol = "USDCAD" ;
        private Identity yesterdayClose;
        int holdings = 0;
       
        //int leverage = 50; Enable for borrowing abilities (max is 50x for fx, 2x? for equities)
        
        public override void Initialize() 
        {
			//AddSecurity(SecurityType.Equity, Symbol, Resolution.Minute); Uncomment this for stocks
			AddSecurity(SecurityType.Forex, symbol, Resolution.Minute);
		
			//Set backtest dates here
            SetStartDate(2016, 3, 1);         
            SetEndDate(2016, 3, 18);
            
            //Set Backtest cash amount here
            SetCash(100000);
            
            //MA's go here
            smaShort = SMA(symbol, 5, Resolution.Minute);
            smaLong = SMA(symbol, 25, Resolution.Minute);
           
            // this will get us an indicator that represents our symbol's closing price
            yesterdayClose = Identity(symbol, Resolution.Minute, Field.Close);
        }
        
        public void OnData(TradeBars data) 
        {   
             // set price based on previous minute bar
            price = data[symbol].Close;

            
            //Algo buying logic below
            if (!Portfolio.Invested && smaShort > smaLong && price > smaShort) 
            {
            	// Calculate quantity based on available cash
            	var quantity = (int) (Portfolio.Cash / price);
            	
               // Buy Stock
               CurrentOrder = Order(symbol,  quantity);
               // Set StopLoss order
               StopLoss = StopMarketOrder(symbol, -quantity, price * (1m - StopLossPercent));
               // Set Profit Target 
               ProfitTarget = LimitOrder(symbol, -quantity, price * (1m + TakeProfitPercent));
           	}

        }
        
        // If the StopLoss or ProfitTarget is filled, cancel the other
        // If you don't do this, then  the ProfitTarget or StopLoss order will remain outstanding
        // indefinitely, which will cause very bad behaviors in your algorithm
        public override void OnOrderEvent(OrderEvent orderEvent)
		{
			// Ignore OrderEvents that are not closed
			if (!orderEvent.Status.IsClosed())
			{
				return;
			}
			
			// Defensive check
			if (ProfitTarget == null || StopLoss == null)
			{
				return;
			}
			
			var filledOrderId = orderEvent.OrderId;

			// If the ProfitTarget order was filled, close the StopLoss order
			if (ProfitTarget.OrderId == filledOrderId)
			{
				StopLoss.Cancel();
			}

			// If the StopLoss order was filled, close the ProfitTarget
			if (StopLoss.OrderId == filledOrderId)
			{
				ProfitTarget.Cancel();
			}
			
		}
    }
}