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
namespace QuantConnect 
{   
    /*
    *   QuantConnect University: Full Basic Template:
    *
    *   The underlying QCAlgorithm class is full of helper methods which enable you to use QuantConnect.
    *   We have explained some of these here, but the full algorithm can be found at:
    *   https://github.com/QuantConnect/Lean/tree/master/Algorithm
    */
    public class BasicTemplateAlgorithm : QCAlgorithm
    {	
    	decimal oldMACD = 0;
        bool first = true;
        bool goingLong = false;
        //Initialize the data and resolution you require for your strategy:
        public override void Initialize() 
        {
			
            //Start and End Date range for the backtest:
            SetStartDate(2015, 1, 1);         
            SetEndDate(DateTime.Now.Date.AddDays(-1));
            
            //Cash allocation
            SetCash(25000);
            
            
            MovingAverageConvergenceDivergence MACD;
            //Add as many securities as you like. All the data will be passed into the event handler:
            SetBrokerageModel(BrokerageName.FxcmBrokerage);
            //AddForex("EURUSD", Resolution.Hour, Market.FXCM);
            AddSecurity(SecurityType.Forex,"EURUSD", Resolution.Hour);
        }

        //Data Event Handler: New data arrives here. "TradeBars" type is a dictionary of strings so you can access it by symbol.
        public void OnData(TradeBars data) 
        {   
        	
        	var macd = MACD("EUROUSD",12,26,9, MovingAverageType.Exponential);
            // "TradeBars" object holds many "TradeBar" objects: it is a dictionary indexed by the symbol:
            // 
            //  e.g.  data["MSFT"] data["GOOG"]
            //(!Portfolio.HoldStock)
            if (oldMACD ==0){
            	oldMACD = macd.Signal;
            	return;
            }
            if (first == true){
            	if(macd.Signal >= oldMACD){
            		goingLong = true;
            		first = false;
            		goLong(data);
            		return;
            	}else if(macd.Signal < oldMACD){
            		goingLong = false;
            		first = false;
            		goShort(data);
            		return;
            	}
            }else if((macd.Signal >= oldMACD) & goingLong == false){
            	goingLong = true;
            	first = false;
            	goLong(data);
            	return;
            }else if((macd.Signal < oldMACD) & goingLong == true){
            	goingLong = false;
            	first = false;
            	goShort(data);
            	return;
            }
            return;
            
            
            

        }
        public void goLong(TradeBars data){
        	Liquidate();
        	do
			{
   			// nothing
			} while (Portfolio.HoldStock);
			
			MarketOrder("EUROUSD", (int)Math.Floor(Portfolio.Cash / data["EUROUSD"].Close));
        }
        
        public void goShort(TradeBars data){
        	Liquidate();
        	do
			{
   			// nothing
			} while (Portfolio.HoldStock);
			
			MarketOrder("EUROUSD", -1*(int)Math.Floor(Portfolio.Cash / data["EUROUSD"].Close));
        }
        
        
        
        
        
        
        
    }
}