Overall Statistics
Total Trades
418
Average Win
0.01%
Average Loss
-0.01%
Compounding Annual Return
-0.379%
Drawdown
0.600%
Expectancy
-0.155
Net Profit
-0.310%
Sharpe Ratio
-1.498
Loss Rate
62%
Win Rate
38%
Profit-Loss Ratio
1.21
Alpha
-0.003
Beta
-0.002
Annual Standard Deviation
0.002
Annual Variance
0
Information Ratio
-0.467
Tracking Error
0.116
Treynor Ratio
1.514
Total Fees
$865.09
namespace QuantConnect 
{   
    public class TimeAlphaAlgorithm : QCAlgorithm
    {
    	TradeBars price;
    	Dictionary<string, OrderTicket> stopTickets = new Dictionary<string, OrderTicket>();
    	decimal riskPerTrade = 100;
    	
    	Dictionary<string, StandardDeviation> std = new Dictionary<string, StandardDeviation>();
    	List<string> symbols = new List<string>(){"EURUSD"
    	/*	"AUDCAD",
"AUDCHF",
"AUDJPY",
"AUDNZD",
"AUDUSD",
"CADCHF",
"CADJPY",
"CHFJPY",
"EURAUD",
"EURCAD",
"EURCHF",
"EURGBP",
"EURJPY",
"EURNOK",
"EURNZD",
"EURSEK",
"EURTRY",
"EURUSD",
"GBPAUD",
"GBPCAD",
"GBPCHF",
"GBPJPY",
"GBPNZD",
"GBPUSD",
"NZDCAD",
"NZDCHF",
"NZDJPY",/*
"NZDUSD",
"TRYJPY",
"USDCAD",
"USDCHF",
"USDCNH",
"USDJPY",
"USDMXN",
"USDNOK",
"USDSEK",
"USDTRY",
"USDZAR",
"ZARJPY"*/

    	};
    	
        public override void Initialize() 
        {
            SetStartDate(2016, 1, 1);         
            SetEndDate(DateTime.Now);
            SetCash(1000000);
            
            foreach(var symbol in symbols) {
            	AddSecurity(SecurityType.Forex, symbol, Resolution.Minute);
            	std.Add(symbol, STD(symbol, 390));
            	stopTickets.Add(symbol,null);
            }
            
            var days = new [] {  DayOfWeek.Monday, 
        	 	DayOfWeek.Tuesday, DayOfWeek.Wednesday,
            	DayOfWeek.Thursday, DayOfWeek.Friday
            };
            
            Schedule.On(DateRules.Every(days),TimeRules.At(9, 30), () =>
			{
				foreach(var symbol in symbols) {
					PlaceOrder(symbol);
					}
				
				
			});
            
            Schedule.On(DateRules.Every(days),TimeRules.At(16, 0), () =>
			{
				Plot("STD","EURUSD",std["EURUSD"]);
				foreach(var symbol in symbols) {
					Liquidate(symbol);
				   /* if (stopTickets.ContainsKey(symbol)) { 
						if (stopTickets[symbol] != null) 
							stopTickets[symbol].Cancel();
				    }*/
				}
			});
        }
        
        private void PlaceOrder(Symbol symbol)
        { 		if (!std.ContainsKey(symbol)) return;
        			var deviation = std[symbol];
					var potentialMovement = deviation*2m;
					if (price == null) return;
					if (!price.ContainsKey(symbol)) { return; }
					if (!stopTickets.ContainsKey(symbol)) { return; }

					if (price[symbol].Close == 0) return;
					if (potentialMovement == 0) return;
					
					var qty = ((int)(riskPerTrade / potentialMovement) * 1000) / 1000;
					if (qty > 0){
						Log(symbol+" "+qty.ToString());
						MarketOrder(symbol, qty);
						stopTickets[symbol] = StopMarketOrder(symbol, -qty,  Math.Round(price[symbol].Close - potentialMovement, 5));
					}
        	
        }
        
        public void OnData(TradeBars data) 
        {   
        	price = data;
        }
    }
}