Overall Statistics
Total Trades
18
Average Win
0.00%
Average Loss
0%
Compounding Annual Return
0.001%
Drawdown
0.000%
Expectancy
0
Net Profit
0.007%
Sharpe Ratio
0.346
Probabilistic Sharpe Ratio
0.166%
Loss Rate
0%
Win Rate
100%
Profit-Loss Ratio
0
Alpha
0
Beta
0
Annual Standard Deviation
0
Annual Variance
0
Information Ratio
-0.494
Tracking Error
0.183
Treynor Ratio
-4.799
Total Fees
$0.54
namespace QuantConnect 
{
	
	
				////////// USDCHF DOWN S1///////////////
		/*				prices_BID_Open[0] - prices_ASK_Close[0] > 0.002m &&
						prices_BID_Open[0] - prices_ASK_Close[0] < 0.003m &&
						
						prices_ASK_Close[0] - prices_BID_Close[0] > 0.00001m &&
						prices_ASK_Close[0] - prices_BID_Close[0] < 0.0015m

						SYMBOL_DOWN_S2_SL = 0.0045m;
	                    SYMBOL_DOWN_S2_TP1 =  SYMBOL_DOWN_S2_SL * 5;
	                    
	                    // 30 DAY
	    */

	    
}
namespace QuantConnect 
{
public partial class Base	///ONDATA
{
	public class Alpha_SYMBOL_DOWN_S2 : AlphaModel
    {   
    	private readonly Symbol _symbol;
    	
    	private string SYMBOL = "AUDCHF" ;
    	
        public Alpha_SYMBOL_DOWN_S2(Symbol symbol)
        {
            _symbol = symbol;
        }

		public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
        {  
        	var open_orders = algorithm.Transactions.GetOpenOrders(x=>x.Status == OrderStatus.Submitted);

			if (!open_orders.Any(x=>x.Tag.Contains("SYMBOL_DOWN_S2_OCO1")))
			{
				Base.SYMBOL_OCO1_DOWN_S2_IsReady = true;
			}
			
			if (!open_orders.Any(x=>x.Tag.Contains("SYMBOL_DOWN_S2_OCO2")))
			{
				Base.SYMBOL_OCO2_DOWN_S2_IsReady = true;
			}
			
			if (!open_orders.Any(x=>x.Tag.Contains("SYMBOL_DOWN_S2_OCO3")))
			{
				Base.SYMBOL_OCO3_DOWN_S2_IsReady = true;
			}
			
			if (!open_orders.Any(x=>x.Tag.Contains("SYMBOL_DOWN_S2_OCO4")))
			{
				Base.SYMBOL_OCO4_DOWN_S2_IsReady = true;
			}
			
			if (open_orders.Any(x=>x.Tag.Contains("SYMBOL_DOWN_S2")))
			{
        	foreach (var order in open_orders)
		    {
				if (Base.SYMBOL_OCO1_EO1_DOWN_S2)
	                Base.SYMBOL_OCO1_EO1_DOWN_S2_ID = order.Id;
	            if (Base.SYMBOL_OCO1_EO2_DOWN_S2)
	                Base.SYMBOL_OCO1_EO2_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO1_EO3_DOWN_S2)
	                Base.SYMBOL_OCO1_EO3_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO1_EO4_DOWN_S2)
	                Base.SYMBOL_OCO1_EO4_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO1_EO5_DOWN_S2)
	                Base.SYMBOL_OCO1_EO5_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO1_EO6_DOWN_S2)
	                Base.SYMBOL_OCO1_EO6_DOWN_S2_ID = order.Id;
	
			        if (algorithm.Time - order.CreatedTime >= TimeSpan.FromMinutes(Base.SYMBOL_DOWN_S2_OCO_DELAY_7DAY))
			        {
			        	int SYMBOL_OCO1S1_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets1.Count; SYMBOL_OCO1S1_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets1[SYMBOL_OCO1S1_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets1[SYMBOL_OCO1S1_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_1__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets1.Clear();
		                        SYMBOL_OCO1S1_DOWN_S2 = 0;
		                        break;
		                    }
		            
		                int SYMBOL_OCO1S2_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets2.Count; SYMBOL_OCO1S2_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets2[SYMBOL_OCO1S2_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets2[SYMBOL_OCO1S2_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_2__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets2.Clear();
		                        SYMBOL_OCO1S2_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO1S3_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets3.Count; SYMBOL_OCO1S3_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets3[SYMBOL_OCO1S3_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets3[SYMBOL_OCO1S3_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_3__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets3.Clear();
		                        SYMBOL_OCO1S3_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO1S4_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets4.Count; SYMBOL_OCO1S4_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets4[SYMBOL_OCO1S4_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets4[SYMBOL_OCO1S4_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_4__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets4.Clear();
		                        SYMBOL_OCO1S4_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO1S5_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S5_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets5.Count; SYMBOL_OCO1S5_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets5[SYMBOL_OCO1S5_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets5[SYMBOL_OCO1S5_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_5__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets5.Clear();
		                        SYMBOL_OCO1S5_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO1S6_DOWN_S2 = 0;
		                for (; SYMBOL_OCO1S6_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets6.Count; SYMBOL_OCO1S6_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO1Sets6[SYMBOL_OCO1S6_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO1Sets6[SYMBOL_OCO1S6_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_6__Time out_OCO1");
		                        Base.SYMBOL_DOWN_S2_OCO1Sets6.Clear();
		                        SYMBOL_OCO1S6_DOWN_S2 = 0;
		                        break;
		                    }
			        }
			        
			    if (Base.SYMBOL_OCO2_EO1_DOWN_S2)
	                Base.SYMBOL_OCO2_EO1_DOWN_S2_ID = order.Id;
	            if (Base.SYMBOL_OCO2_EO2_DOWN_S2)
	                Base.SYMBOL_OCO2_EO2_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO2_EO3_DOWN_S2)
	                Base.SYMBOL_OCO2_EO3_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO2_EO4_DOWN_S2)
	                Base.SYMBOL_OCO2_EO4_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO2_EO5_DOWN_S2)
	                Base.SYMBOL_OCO2_EO5_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO2_EO6_DOWN_S2)
	                Base.SYMBOL_OCO2_EO6_DOWN_S2_ID = order.Id;
	
			        if (algorithm.Time - order.CreatedTime >= TimeSpan.FromMinutes(Base.SYMBOL_DOWN_S2_OCO_DELAY_7DAY))
			        {
			        	int SYMBOL_OCO2S1_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets1.Count; SYMBOL_OCO2S1_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets1[SYMBOL_OCO2S1_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets1[SYMBOL_OCO2S1_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_1__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets1.Clear();
		                        SYMBOL_OCO2S1_DOWN_S2 = 0;
		                        break;
		                    }
		            
		                int SYMBOL_OCO2S2_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets2.Count; SYMBOL_OCO2S2_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets2[SYMBOL_OCO2S2_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets2[SYMBOL_OCO2S2_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_2__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets2.Clear();
		                        SYMBOL_OCO2S2_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO2S3_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets3.Count; SYMBOL_OCO2S3_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets3[SYMBOL_OCO2S3_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets3[SYMBOL_OCO2S3_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_3__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets3.Clear();
		                        SYMBOL_OCO2S3_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO2S4_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets4.Count; SYMBOL_OCO2S4_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets4[SYMBOL_OCO2S4_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets4[SYMBOL_OCO2S4_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_4__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets4.Clear();
		                        SYMBOL_OCO2S4_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO2S5_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S5_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets5.Count; SYMBOL_OCO2S5_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets5[SYMBOL_OCO2S5_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets5[SYMBOL_OCO2S5_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_5__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets5.Clear();
		                        SYMBOL_OCO2S5_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO2S6_DOWN_S2 = 0;
		                for (; SYMBOL_OCO2S6_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets6.Count; SYMBOL_OCO2S6_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO2Sets6[SYMBOL_OCO2S6_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO2Sets6[SYMBOL_OCO2S6_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_6__Time out_OCO2");
		                        Base.SYMBOL_DOWN_S2_OCO2Sets6.Clear();
		                        SYMBOL_OCO2S6_DOWN_S2 = 0;
		                        break;
		                    }
			        }
			        
			    if (Base.SYMBOL_OCO3_EO1_DOWN_S2)
	                Base.SYMBOL_OCO3_EO1_DOWN_S2_ID = order.Id;
	            if (Base.SYMBOL_OCO3_EO2_DOWN_S2)
	                Base.SYMBOL_OCO3_EO2_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO3_EO3_DOWN_S2)
	                Base.SYMBOL_OCO3_EO3_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO3_EO4_DOWN_S2)
	                Base.SYMBOL_OCO3_EO4_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO3_EO5_DOWN_S2)
	                Base.SYMBOL_OCO3_EO5_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO3_EO6_DOWN_S2)
	                Base.SYMBOL_OCO3_EO6_DOWN_S2_ID = order.Id;
	
			        if (algorithm.Time - order.CreatedTime >= TimeSpan.FromMinutes(Base.SYMBOL_DOWN_S2_OCO_DELAY_7DAY))
			        {
			        	int SYMBOL_OCO3S1_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets1.Count; SYMBOL_OCO3S1_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets1[SYMBOL_OCO3S1_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets1[SYMBOL_OCO3S1_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_1__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets1.Clear();
		                        SYMBOL_OCO3S1_DOWN_S2 = 0;
		                        break;
		                    }
		            
		                int SYMBOL_OCO3S2_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets2.Count; SYMBOL_OCO3S2_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets2[SYMBOL_OCO3S2_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets2[SYMBOL_OCO3S2_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_2__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets2.Clear();
		                        SYMBOL_OCO3S2_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO3S3_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets3.Count; SYMBOL_OCO3S3_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets3[SYMBOL_OCO3S3_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets3[SYMBOL_OCO3S3_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_3__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets3.Clear();
		                        SYMBOL_OCO3S3_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO3S4_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets4.Count; SYMBOL_OCO3S4_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets4[SYMBOL_OCO3S4_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets4[SYMBOL_OCO3S4_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_4__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets4.Clear();
		                        SYMBOL_OCO3S4_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO3S5_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S5_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets5.Count; SYMBOL_OCO3S5_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets5[SYMBOL_OCO3S5_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets5[SYMBOL_OCO3S5_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_5__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets5.Clear();
		                        SYMBOL_OCO3S5_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO3S6_DOWN_S2 = 0;
		                for (; SYMBOL_OCO3S6_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets6.Count; SYMBOL_OCO3S6_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO3Sets6[SYMBOL_OCO3S6_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO3Sets6[SYMBOL_OCO3S6_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_6__Time out_OCO3");
		                        Base.SYMBOL_DOWN_S2_OCO3Sets6.Clear();
		                        SYMBOL_OCO3S6_DOWN_S2 = 0;
		                        break;
		                    }
			        }
			        
			    if (Base.SYMBOL_OCO4_EO1_DOWN_S2)
	                Base.SYMBOL_OCO4_EO1_DOWN_S2_ID = order.Id;
	            if (Base.SYMBOL_OCO4_EO2_DOWN_S2)
	                Base.SYMBOL_OCO4_EO2_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO4_EO3_DOWN_S2)
	                Base.SYMBOL_OCO4_EO3_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO4_EO4_DOWN_S2)
	                Base.SYMBOL_OCO4_EO4_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO4_EO5_DOWN_S2)
	                Base.SYMBOL_OCO4_EO5_DOWN_S2_ID = order.Id;
	        	if (Base.SYMBOL_OCO4_EO6_DOWN_S2)
	                Base.SYMBOL_OCO4_EO6_DOWN_S2_ID = order.Id;
	
			        if (algorithm.Time - order.CreatedTime >= TimeSpan.FromMinutes(Base.SYMBOL_DOWN_S2_OCO_DELAY_7DAY))
			        {
			        	int SYMBOL_OCO4S1_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets1.Count; SYMBOL_OCO4S1_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets1[SYMBOL_OCO4S1_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets1[SYMBOL_OCO4S1_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_1__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets1.Clear();
		                        SYMBOL_OCO4S1_DOWN_S2 = 0;
		                        break;
		                    }
		            
		                int SYMBOL_OCO4S2_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets2.Count; SYMBOL_OCO4S2_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets2[SYMBOL_OCO4S2_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets2[SYMBOL_OCO4S2_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_2__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets2.Clear();
		                        SYMBOL_OCO4S2_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO4S3_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets3.Count; SYMBOL_OCO4S3_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets3[SYMBOL_OCO4S3_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets3[SYMBOL_OCO4S3_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_3__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets3.Clear();
		                        SYMBOL_OCO4S3_DOWN_S2 = 0;
		                        break;
		                    }
		                    
		                int SYMBOL_OCO4S4_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets4.Count; SYMBOL_OCO4S4_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets4[SYMBOL_OCO4S4_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets4[SYMBOL_OCO4S4_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_4__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets4.Clear();
		                        SYMBOL_OCO4S4_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO4S5_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S5_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets5.Count; SYMBOL_OCO4S5_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets5[SYMBOL_OCO4S5_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets5[SYMBOL_OCO4S5_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_5__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets5.Clear();
		                        SYMBOL_OCO4S5_DOWN_S2 = 0;
		                        break;
		                    }
		                
		                int SYMBOL_OCO4S6_DOWN_S2 = 0;
		                for (; SYMBOL_OCO4S6_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets6.Count; SYMBOL_OCO4S6_DOWN_S2++)
		                    if (Base.SYMBOL_DOWN_S2_OCO4Sets6[SYMBOL_OCO4S6_DOWN_S2].InOrders(order.Id)) 
		                    {
		                        Base.SYMBOL_DOWN_S2_OCO4Sets6[SYMBOL_OCO4S6_DOWN_S2].TimeOut();
		                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Up, null, null, null, 1);
		                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_DOWN_S2_Entry_6__Time out_OCO4");
		                        Base.SYMBOL_DOWN_S2_OCO4Sets6.Clear();
		                        SYMBOL_OCO4S6_DOWN_S2 = 0;
		                        break;
		                    }
			        }
		    }
			}
			
		    
	        foreach (var SY1D in D1D.Values)
	        {
	            if (SY1D.BQIsReady && SY1D.WasJustUpdated(algorithm.Time))
	            {
	            	if (SY1D.BQ[0] != SY1D.BQ[1])
	            	{
	            		Base.SymbolCount = SY1D.Symbol.Value.Count();
	            	}
	            	
	            	if (SY1D.BQM[0].Close != 0)
	            	{
	            		algorithm.Debug("High : " + SY1D.BQM[0].High + "  Low : " + SY1D.BQM[0].Low + "  Time : " + SY1D.BQM[0].Time + "  ENDTime : " + SY1D.BQM[0].EndTime);
	            	}
	            	
					DOWM_SYMBOL_DOWN_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Monday);
					DOWT_SYMBOL_DOWN_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Tuesday);
					DOWW_SYMBOL_DOWN_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Wednesday);
					DOWTH_SYMBOL_DOWN_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Thursday);
					DOWR_SYMBOL_DOWN_S2 = DOWM_SYMBOL_DOWN_S2 || DOWT_SYMBOL_DOWN_S2 || DOWW_SYMBOL_DOWN_S2 || DOWTH_SYMBOL_DOWN_S2 || algorithm.Time.DayOfWeek == DayOfWeek.Friday;

	            	//if (SY1D.Symbol.Equals(SYMBOL))
	            	//{
	            		var prices_BID_Open = SY1D.BQ.Select(x => x.Bid.Open).ToList();
	            		var prices_ASK_Open = SY1D.BQ.Select(x => x.Ask.Open).ToList();
						var prices_ASK_Close = SY1D.BQ.Select(x => x.Ask.Close).ToList(); //
						var prices_BID_Close = SY1D.BQ.Select(x => x.Bid.Close).ToList(); //
						var prices_ASK_Low = SY1D.BQ.Select(x => x.Ask.Low).ToList(); //
						var prices_BID_Low = SY1D.BQ.Select(x => x.Bid.Low).ToList(); //
						var prices_ASK_High = SY1D.BQ.Select(x => x.Ask.High).ToList(); //
						var prices_BID_High = SY1D.BQ.Select(x => x.Bid.High).ToList(); //
						
						var pricesM_BID_Open = SY1D.BQM.Select(x => x.Bid.Open).ToList();
	            		var pricesM_ASK_Open = SY1D.BQM.Select(x => x.Ask.Open).ToList();
						var pricesM_ASK_Close = SY1D.BQM.Select(x => x.Ask.Close).ToList(); //
						var pricesM_BID_Close = SY1D.BQM.Select(x => x.Bid.Close).ToList(); //
						var pricesM_ASK_Low = SY1D.BQM.Select(x => x.Ask.Low).ToList(); //
						var pricesM_BID_Low = SY1D.BQM.Select(x => x.Bid.Low).ToList(); //
						var pricesM_ASK_High = SY1D.BQM.Select(x => x.Ask.High).ToList(); //
						var pricesM_BID_High = SY1D.BQM.Select(x => x.Bid.High).ToList(); //
						
						
	                    decimal coefS2 = prices_ASK_Close[0] - prices_BID_Close[0];
	                    int coefIntS2 = (int)(coefS2/0.0001m);
	                    
	                    if (Base.SYMBOL_OCO1_DOWN_S2_IsReady == false ||
	                    	Base.SYMBOL_OCO2_DOWN_S2_IsReady == false ||
	                    	Base.SYMBOL_OCO3_DOWN_S2_IsReady == false ||
	                    	Base.SYMBOL_OCO4_DOWN_S2_IsReady == false)
	                    {
	                    	Base.SYMBOL_OCO1_DOWN_S2_Monthly_IsReady = false;
	                    	Base.SYMBOL_OCO2_DOWN_S2_Monthly_IsReady = false;
	                    	Base.SYMBOL_OCO3_DOWN_S2_Monthly_IsReady = false;
	                    	Base.SYMBOL_OCO4_DOWN_S2_Monthly_IsReady = false;
	                    }

	            		if (algorithm.Time == SY1D.BQM[0].EndTime)
                    	{
                    		Base.SYMBOL_OCO1_DOWN_S2_Monthly_IsReady = true;
                    		Base.SYMBOL_OCO2_DOWN_S2_Monthly_IsReady = true;
                    		Base.SYMBOL_OCO3_DOWN_S2_Monthly_IsReady = true;
                    		Base.SYMBOL_OCO4_DOWN_S2_Monthly_IsReady = true;
                    	}

	                	SYMBOL_Signal_Condition_DOWN_1 =	
	                									(
		                										pricesM_ASK_Open[0] - pricesM_BID_Close[0] > Base.Oth_Min_Size
		                										
		                										&&
		                										
		                										(
		                										
		                											prices_ASK_High[0] > pricesM_ASK_High[0] + ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.382m)
		                										
		                										)
		                							
		                										&&
		                										
																prices_ASK_Close[0] - prices_BID_Close[0] > 0 &&
																prices_ASK_Close[0] - prices_BID_Close[0] < Base.Oth_Min_SPRD
	                									);
	                									
	                	SYMBOL_Signal_Condition_DOWN_2 =	
	                									(
		                										pricesM_ASK_Open[0] - pricesM_BID_Close[0] > Base.Oth_Min_Size
		                										
		                										&&
		                										
		                										(
		                										
		                											prices_ASK_High[0] > pricesM_ASK_High[0] + ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.5m)
		                										
		                										)
		                										
		                										&&
		                										
																prices_ASK_Close[0] - prices_BID_Close[0] > 0 &&
																prices_ASK_Close[0] - prices_BID_Close[0] < Base.Oth_Min_SPRD
	                									);
	                									
	                									
	                	SYMBOL_Signal_Condition_DOWN_3 =	
	                									(
		                										pricesM_ASK_Open[0] - pricesM_BID_Close[0] > Base.Oth_Min_Size
		                										
		                										&&
		                										
		                										(

		                											prices_ASK_High[0] > pricesM_ASK_High[0] + ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.618m)
		                										
		                										)
		                										
		                										&&
		                										
																prices_ASK_Close[0] - prices_BID_Close[0] > 0 &&
																prices_ASK_Close[0] - prices_BID_Close[0] < Base.Oth_Min_SPRD
	                									);
	                									
	                	if (SYMBOL_Signal_Condition_DOWN_1)
	                	{
	                    	SYMBOL_DOWN_S2_SL  = ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.618m);
	                	}
	                	
	                	if (SYMBOL_Signal_Condition_DOWN_2)
	                	{
	                    	SYMBOL_DOWN_S2_SL  = ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.618m);
	                	}
	                	
	                	if (SYMBOL_Signal_Condition_DOWN_3)
	                	{
	                    	SYMBOL_DOWN_S2_SL  = ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.618m);
	                	}
	                	
	                	
	                	if (SYMBOL_Signal_Condition_DOWN_1)
	                	{
	                    	SYMBOL_DOWN_S2_TP1  =  (pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.05m ;
	                	}
	                	
	                	if (SYMBOL_Signal_Condition_DOWN_2)
	                	{
	                    	SYMBOL_DOWN_S2_TP1  =  (pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.1m ;
	                	}
	                	
	                	if (SYMBOL_Signal_Condition_DOWN_3)
	                	{
	                    	SYMBOL_DOWN_S2_TP1  =  (pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.2m ;
	                	}
	                	
	                    SYMBOL_DOWN_S2_TP2 =  SYMBOL_DOWN_S2_SL * 0;
	                    SYMBOL_DOWN_S2_TP3 =  SYMBOL_DOWN_S2_SL * 0;
	                    SYMBOL_DOWN_S2_TP4 =  SYMBOL_DOWN_S2_SL * 0;
	                    SYMBOL_DOWN_S2_TP5 =  SYMBOL_DOWN_S2_SL * 0;
	                    SYMBOL_DOWN_S2_TP6 =  SYMBOL_DOWN_S2_SL * 0;

	                    if (coefIntS2 != 0 && SYMBOL_DOWN_S2_SL !=  0)
	                    {
	                    SYMBOL_quantity_DOWN_S2 = -(int)Math.Floor(algorithm.Portfolio.GetBuyingPower(SY1D.Symbol, 0)*0.015m);
	                    SYMBOL_quantity_SL_DOWN_S2 = SYMBOL_quantity_DOWN_S2;
	                    SYMBOL_quantity_TP1_DOWN_S2 = (SYMBOL_quantity_DOWN_S2 );
	                    SYMBOL_quantity_TP2_DOWN_S2 = (SYMBOL_quantity_TP1_DOWN_S2 * 0);
	                    SYMBOL_quantity_TP3_DOWN_S2 = (SYMBOL_quantity_TP2_DOWN_S2 * 0);
	                    SYMBOL_quantity_TP4_DOWN_S2 = (SYMBOL_quantity_TP3_DOWN_S2 * 0);
	                    SYMBOL_quantity_TP5_DOWN_S2 = (SYMBOL_quantity_TP4_DOWN_S2 * 0);
	                    SYMBOL_quantity_TP6_DOWN_S2 = (SYMBOL_quantity_TP5_DOWN_S2 * 0);
	                    }
	                    
	                    oco1:
	                    if ((SYMBOL_Signal_Condition_DOWN_1 || SYMBOL_Signal_Condition_DOWN_2 || SYMBOL_Signal_Condition_DOWN_3)  && 
	                    DOWR_SYMBOL_DOWN_S2 && 
	                    Base.SYMBOL_OCO1_DOWN_S2_IsReady == true &&
	                    Base.SYMBOL_OCO1_DOWN_S2_Monthly_IsReady == true)
	                    {
	                         Base.SYMBOL_OCO1_EO1_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO1_MO1_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP1_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP1_OCO1");
	                         Base.SYMBOL_OCO1_EO1_DOWN_S2 = false;
	                         
	                         Base.SYMBOL_OCO1_EO2_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO1_MO2_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP2_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP2_OCO1");
	                         Base.SYMBOL_OCO1_EO2_DOWN_S2 = false;
	
	                         Base.SYMBOL_OCO1_EO3_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO1_MO3_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP3_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP3_OCO1");
	                         Base.SYMBOL_OCO1_EO3_DOWN_S2 = false;
	                    
	                         Base.SYMBOL_OCO1_EO4_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO1_MO4_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP4_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP4_OCO1");
	                         Base.SYMBOL_OCO1_EO4_DOWN_S2 = false;

							Base.SYMBOL_OCO1_DOWN_S2_IsReady = false;
							
							if (Base.SYMBOL_OCO1_DOWN_S2_IsReady == false)
							break;

	                    }
	                    
	                    oco2:
	                    if ((SYMBOL_Signal_Condition_DOWN_1 || SYMBOL_Signal_Condition_DOWN_2 || SYMBOL_Signal_Condition_DOWN_3)  && 
	                    DOWR_SYMBOL_DOWN_S2 && 
	                    Base.SYMBOL_OCO2_DOWN_S2_IsReady == true &&
	                    Base.SYMBOL_OCO1_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO2_DOWN_S2_Monthly_IsReady == true)
	                    {
	                         Base.SYMBOL_OCO2_EO1_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO2_MO1_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP1_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP1_OCO2");
	                         Base.SYMBOL_OCO2_EO1_DOWN_S2 = false;
	                         
	                         Base.SYMBOL_OCO2_EO2_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO2_MO2_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP2_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP2_OCO2");
	                         Base.SYMBOL_OCO2_EO2_DOWN_S2 = false;
	
	                         Base.SYMBOL_OCO2_EO3_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO2_MO3_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP3_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP3_OCO2");
	                         Base.SYMBOL_OCO2_EO3_DOWN_S2 = false;
	                    
	                         Base.SYMBOL_OCO2_EO4_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO2_MO4_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP4_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP4_OCO2");
	                         Base.SYMBOL_OCO2_EO4_DOWN_S2 = false;

							Base.SYMBOL_OCO2_DOWN_S2_IsReady = false;
							
							if (Base.SYMBOL_OCO2_DOWN_S2_IsReady == false && Base.SYMBOL_OCO1_DOWN_S2_IsReady == false)
							break;

	                    }
	                    
	                    oco3:
	                    if ((SYMBOL_Signal_Condition_DOWN_1 || SYMBOL_Signal_Condition_DOWN_2 || SYMBOL_Signal_Condition_DOWN_3)  && 
	                    DOWR_SYMBOL_DOWN_S2 &&
	                    Base.SYMBOL_OCO3_DOWN_S2_IsReady == true &&
	                    Base.SYMBOL_OCO1_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO2_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO3_DOWN_S2_Monthly_IsReady == true)
	                    {
	                         Base.SYMBOL_OCO3_EO1_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO3_MO1_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP1_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP1_OCO3");
	                         Base.SYMBOL_OCO3_EO1_DOWN_S2 = false;
	                         
	                         Base.SYMBOL_OCO3_EO2_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO3_MO2_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP2_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP2_OCO3");
	                         Base.SYMBOL_OCO3_EO2_DOWN_S2 = false;
	
	                         Base.SYMBOL_OCO3_EO3_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO3_MO3_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP3_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP3_OCO3");
	                         Base.SYMBOL_OCO3_EO3_DOWN_S2 = false;
	                    
	                         Base.SYMBOL_OCO3_EO4_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO3_MO4_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP4_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP4_OCO3");
	                         Base.SYMBOL_OCO3_EO4_DOWN_S2 = false;

							Base.SYMBOL_OCO3_DOWN_S2_IsReady = false;
							
							if (Base.SYMBOL_OCO3_DOWN_S2_IsReady == false && Base.SYMBOL_OCO2_DOWN_S2_IsReady == false && Base.SYMBOL_OCO1_DOWN_S2_IsReady == false)
							break;

	                    }
	                    
	                    oco4:
	                    if ((SYMBOL_Signal_Condition_DOWN_1 || SYMBOL_Signal_Condition_DOWN_2 || SYMBOL_Signal_Condition_DOWN_3)  && 
	                    DOWR_SYMBOL_DOWN_S2 && 
	                    Base.SYMBOL_OCO4_DOWN_S2_IsReady == true &&
	                    Base.SYMBOL_OCO1_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO2_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO3_DOWN_S2_IsReady == false &&
	                    Base.SYMBOL_OCO4_DOWN_S2_Monthly_IsReady == true)
	                    {
	                         Base.SYMBOL_OCO4_EO1_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO4_MO1_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP1_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP1_OCO4");
	                         Base.SYMBOL_OCO4_EO1_DOWN_S2 = false;
	                         
	                         Base.SYMBOL_OCO4_EO2_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO4_MO2_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP2_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP2_OCO4");
	                         Base.SYMBOL_OCO4_EO2_DOWN_S2 = false;
	
	                         Base.SYMBOL_OCO4_EO3_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO4_MO3_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP3_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP3_OCO4");
	                         Base.SYMBOL_OCO4_EO3_DOWN_S2 = false;
	                    
	                         Base.SYMBOL_OCO4_EO4_DOWN_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1);
	                         SYMBOL_OCO4_MO4_DOWN_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP4_DOWN_S2, false,"SYMBOL_DOWN_S2_Entry_TP4_OCO4");
	                         Base.SYMBOL_OCO4_EO4_DOWN_S2 = false;

							Base.SYMBOL_OCO4_DOWN_S2_IsReady = false;
							
							if (Base.SYMBOL_OCO4_DOWN_S2_IsReady == false && Base.SYMBOL_OCO3_DOWN_S2_IsReady == false && Base.SYMBOL_OCO2_DOWN_S2_IsReady == false && Base.SYMBOL_OCO1_DOWN_S2_IsReady == false)
							break;
	                    }
	                yield break;
	            }
	        //}
	    }
	}
	}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
using QuantConnect.Indicators;
using QuantConnect.Orders;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Selection;

namespace QuantConnect
{   
    public partial class Base : QCAlgorithm
    {

        public static TimeSpan BP1m = TimeSpan.FromMinutes(1);
        public static TimeSpan BP1M = TimeSpan.FromDays(1);
        public static int RLLWS = 8;
        public static int RLLWSM = 8;
        
        public static decimal Yen_Min_SPRD = 0.01m;
        public static decimal Oth_Min_SPRD = 0.01m;
        
        public static decimal Yen_Min_Size = 0.2m;
        public static decimal Oth_Min_Size = 0.2m;
        
        public static decimal Yen_TP_1 = 0.05m; 
		public static decimal Oth_TP_1 = 0.0005m; 
 
        public static int SymbolCount = 0;
        
        public static Dictionary<string, SY1D> D1D = new Dictionary<string, SY1D>();

    	private SYMBOL_UP_S2_OnOrderEvent up_OnOrderEvent;
        private SYMBOL_DOWN_S2_OnOrderEvent down_OnOrderEvent;
        
        private readonly SecurityManager _securities;
        
        List<string> Pairs = new List<string>
        {
        	//"AUDUSD",
        	//"EURCHF",
        	//"EURGBP",
        	//"EURJPY",
        	//"EURUSD",
        	//"GBPUSD",
        	//"NZDUSD",
        	//"USDCAD",
        	//"USDCHF",
        	//"USDJPY"
        	"USDCHF",
        };

	    public override void Initialize()
	    {
	        SetStartDate(2007, 1, 1);
	        SetEndDate(DateTime.Now);
	        
	        SetCash(1000000);

	        Settings.RebalancePortfolioOnInsightChanges = false;
            Settings.RebalancePortfolioOnSecurityChanges = false;

	        SetBrokerageModel(BrokerageName.AlphaStreams);

			foreach (var symbol in Pairs)
            {
		        var _symbol = AddForex(symbol, Resolution.Minute, Market.FXCM);
		        D1D.Add(symbol, new SY1D(_symbol.Symbol, BP1m, BP1M, RLLWS, RLLWSM));
	
				up_OnOrderEvent = new SYMBOL_UP_S2_OnOrderEvent(this);
				down_OnOrderEvent = new SYMBOL_DOWN_S2_OnOrderEvent(this);
            }

	        foreach (var kvp in D1D)
	        {
	            var SY1D = kvp.Value;
	            var consolidator1D_Q = (IDataConsolidator)new QuoteBarConsolidator(BP1m);
	            var consolidator1D_QM = (IDataConsolidator)new QuoteBarConsolidator(CalendarTypee.Weekly);

	            consolidator1D_Q.DataConsolidated += (sender, baseData) =>
	            {
	                var bar = (QuoteBar)baseData;
	                SY1D.BQ.Add(bar);
	            };
	            SubscriptionManager.AddConsolidator(SY1D.Symbol, consolidator1D_Q);
	            
	            consolidator1D_QM.DataConsolidated += (sender, baseData) =>
	            {
	                var bar = (QuoteBar)baseData;
	                SY1D.BQM.Add(bar);
	            };
	            SubscriptionManager.AddConsolidator(SY1D.Symbol, consolidator1D_QM);
	        }
	        
	        foreach (var symbol in Pairs)
            {
	    	AddAlpha(new Alpha_SYMBOL_UP_S2(_SYMBOL));
	        //AddAlpha(new Alpha_SYMBOL_DOWN_S2(_SYMBOL)); 
            }

	    }

	    public override void OnOrderEvent(OrderEvent orderEvent)
	    {
			up_OnOrderEvent.OnOrderEvent(this, orderEvent);
	    	down_OnOrderEvent.OnOrderEvent(this, orderEvent);
	    }

        public void OnInsightsGeneratedVerifier(IAlgorithm algorithm, GeneratedInsightsCollection insightsCollection)
    	{
	        if (
		        	insightsCollection.Insights.Count(insight => insight.Symbol.Value.Equals("GBPNZD")) != 1
	        	)
	        {
	            throw new Exception("Unexpected insights were emitted");
	        }
        }
    }
    
    

    public class SY1D
    {
        public readonly Symbol Symbol;
        public readonly RollingWindow<QuoteBar> BQ;
        public readonly RollingWindow<QuoteBar> BQM;
        public readonly TimeSpan BP1m;
        public readonly TimeSpan BP1M;
        public RelativeStrengthIndex RSI;


        public SY1D(Symbol symbol, TimeSpan bP1m, TimeSpan BARM, int RLLWSM, int RLLWS)
        {
            Symbol = symbol;
            BP1m = bP1m;
            BP1M = BARM;
            
            BQ = new RollingWindow<QuoteBar>(RLLWS);
            BQM = new RollingWindow<QuoteBar>(RLLWSM);
        }
        
        public bool BQIsReady
        {
            get { return	
            
            		BQ.IsReady &&
            		BQM.IsReady
            	;}
        }

        public bool WasJustUpdated(DateTime current)
        {
            return 
            
            	BQ.Count > 0 && 
            	BQM.Count > 0 && 
            	BQ[0].Time == current - BP1m;
        }
    }
}
using QuantConnect.Securities;

namespace QuantConnect 
{
public partial class Base	///ONDATA
{
	public class Alpha_SYMBOL_UP_S2 : AlphaModel
    {   
    	private readonly Symbol _symbol;
    	
    	private string SYMBOL = "USDCHF" ;
    	
        public Alpha_SYMBOL_UP_S2(Symbol symbol)
        {
            _symbol = symbol;
        }

		public override IEnumerable<Insight> Update(QCAlgorithm algorithm, Slice data)
        {  
        	var open_orders = algorithm.Transactions.GetOpenOrders(x=>x.Status == OrderStatus.Submitted);
			
			if (!open_orders.Any())
			{
				algorithm.Liquidate();
			}
			
			if (!open_orders.Any(x=>x.Tag.Contains("SYMBOL_UP_S2_OCO1")))
			{
				Base.SYMBOL_OCO1_UP_S2_IsReady = true;
			}

			
			if (open_orders.Any(x=>x.Tag.Contains("SYMBOL_UP_S2")))
			{
				foreach (var order in open_orders)
			    {
					if (Base.SYMBOL_OCO1_EO1_UP_S2)
		                Base.SYMBOL_OCO1_EO1_UP_S2_ID = order.Id;
		
				        if (algorithm.Time - order.CreatedTime >= TimeSpan.FromMinutes(Base.SYMBOL_UP_S2_OCO_DELAY_7DAY))
				        {
				        	int SYMBOL_OCO1S1_UP_S2 = 0;
			                for (; SYMBOL_OCO1S1_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets1.Count; SYMBOL_OCO1S1_UP_S2++)
			                    if (Base.SYMBOL_UP_S2_OCO1Sets1[SYMBOL_OCO1S1_UP_S2].InOrders(order.Id)) 
			                    {
			                        Base.SYMBOL_UP_S2_OCO1Sets1[SYMBOL_OCO1S1_UP_S2].TimeOut();
			                        yield return Insight.Price(SYMBOL, TimeSpan.FromMilliseconds(1001), InsightDirection.Down, null, null, null, 1);
			                        algorithm.MarketOrder(SYMBOL, order.Quantity, false, "SYMBOL_UP_S2_Entry_1__Time out_OCO1");
			                        Base.SYMBOL_UP_S2_OCO1Sets1.Clear();
			                        SYMBOL_OCO1S1_UP_S2 = 0;
			                        break;
			                    }
				        }
				}
			}
			

	        foreach (var SY1D in D1D.Values)
	        {
	            if (SY1D.BQIsReady && SY1D.WasJustUpdated(algorithm.Time))
	            {
	            	
	            //	MarketOpen = algorithm.Securities[SY1D.Symbol].Exchange.Hours.GetNextMarketOpen(algorithm.Time, false);
	            var holdings = algorithm.Portfolio[SY1D.Symbol].Quantity;
	            	
	            	if (SY1D.BQ[0] != SY1D.BQ[1])
	            	{
	            		Base.SymbolCount = SY1D.Symbol.Value.Count();
	            	}

	            	if (SY1D.BQM[0].Close != 0)
	            	{
	            		//algorithm.Debug("High : " + SY1D.BQM[0].High + "  Low : " + SY1D.BQM[0].Low + "  Time : " + SY1D.BQM[0].Time + "  ENDTime : " + SY1D.BQM[0].EndTime);
	            		//algorithm.Debug("MarketOpenTime : " + MarketOpen);
	            		//algorithm.Debug("holdings : " + holdings);
	            		algorithm.Debug("SYMBOL : " + SY1D.Symbol.Value);
	            	}
	            	
	            	//foreach (KeyValuePair<string, SY1D> d1d in D1D)  
			        //{  
			        //    Console.WriteLine("Clé: {0}, Valeur: {1}",  
		            //    d1d.Key, d1d.Value); 
			        //} 

					if(!algorithm.Portfolio.Invested && holdings != 0)
					{
						algorithm.Liquidate();
					}
	            	
	            	DOWM_SYMBOL_UP_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Monday);
					DOWT_SYMBOL_UP_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Tuesday);
					DOWW_SYMBOL_UP_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Wednesday);
					DOWTH_SYMBOL_UP_S2 = (algorithm.Time.DayOfWeek == DayOfWeek.Thursday);
					DOWR_SYMBOL_UP_S2 = DOWM_SYMBOL_UP_S2 || DOWT_SYMBOL_UP_S2 || DOWW_SYMBOL_UP_S2 || DOWTH_SYMBOL_UP_S2 || algorithm.Time.DayOfWeek == DayOfWeek.Friday;

					if (SY1D.Symbol.Equals(SYMBOL)) 
			        {

						var prices_BID_Open = SY1D.BQ.Select(x => x.Bid.Open).ToList();
	            		var prices_ASK_Open = SY1D.BQ.Select(x => x.Ask.Open).ToList();
						var prices_ASK_Close = SY1D.BQ.Select(x => x.Ask.Close).ToList(); //
						var prices_BID_Close = SY1D.BQ.Select(x => x.Bid.Close).ToList(); //
						var prices_ASK_Low = SY1D.BQ.Select(x => x.Ask.Low).ToList(); //
						var prices_BID_Low = SY1D.BQ.Select(x => x.Bid.Low).ToList(); //
						var prices_ASK_High = SY1D.BQ.Select(x => x.Ask.High).ToList(); //
						var prices_BID_High = SY1D.BQ.Select(x => x.Bid.High).ToList(); //
						
						var pricesM_BID_Open = SY1D.BQM.Select(x => x.Bid.Open).ToList();
	            		var pricesM_ASK_Open = SY1D.BQM.Select(x => x.Ask.Open).ToList();
						var pricesM_ASK_Close = SY1D.BQM.Select(x => x.Ask.Close).ToList(); //
						var pricesM_BID_Close = SY1D.BQM.Select(x => x.Bid.Close).ToList(); //
						var pricesM_ASK_Low = SY1D.BQM.Select(x => x.Ask.Low).ToList(); //
						var pricesM_BID_Low = SY1D.BQM.Select(x => x.Bid.Low).ToList(); //
						var pricesM_ASK_High = SY1D.BQM.Select(x => x.Ask.High).ToList(); //
						var pricesM_BID_High = SY1D.BQM.Select(x => x.Bid.High).ToList(); //
						
						
	                    decimal coefS2 = prices_ASK_Close[0] - prices_BID_Close[0];
	                    int coefIntS2 = (int)Math.Floor(algorithm.Portfolio.GetBuyingPower(SY1D.Symbol, 0)*0.015m);
	                    
	                    if (Base.SYMBOL_OCO1_UP_S2_IsReady == false)
	                    {
	                    	Base.SYMBOL_OCO1_UP_S2_Monthly_IsReady = false;
	                    }

	            		if (algorithm.Time == SY1D.BQM[0].EndTime)
                    	{
                    		Base.SYMBOL_OCO1_UP_S2_Monthly_IsReady = true;
                    	}
						
						
	                	SYMBOL_Signal_Condition_UP_1 =	
	                									(
		                										pricesM_BID_Close[0] - pricesM_ASK_Open[0] > 0.007m &&
		                										
		                										SY1D.BQ[7].Ask.High - SY1D.BQ[0].Bid.Low > 0.00m &&
		                										SY1D.BQ[7].Ask.High - SY1D.BQ[0].Bid.Low < 0.005m
		                										
		                										&&
		                										
		                										(
		                										
		                											prices_BID_Low[7] < pricesM_BID_Low[0] - ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.5m) &&
		                											prices_BID_Low[0] < pricesM_BID_Low[0] - ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.5m) &&
		                											(pricesM_BID_Low[0] - ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.5m)) - prices_BID_Low[0] > 0.0001m
		                										
		                										)
		                							
		                										&&
		                										
																prices_ASK_Close[0] - prices_BID_Close[0] > 0 &&
																prices_ASK_Close[0] - prices_BID_Close[0] < 0.001m
	                									);

	                									
	                	if (SYMBOL_Signal_Condition_UP_1)
	                	{
	                    	SYMBOL_UP_S2_SL  = ((pricesM_ASK_High[0] - pricesM_BID_Low[0])*0.382m);
	                	}
	                	
	                	
	                	if (SYMBOL_Signal_Condition_UP_1)
	                	{
	                    	SYMBOL_UP_S2_TP1  =  Base.Oth_TP_1 ;
	                	}


	                    if (coefIntS2 > 1)
	                    {	
		                    SYMBOL_quantity_UP_S2 = (int)Math.Floor(algorithm.Portfolio.GetBuyingPower(SY1D.Symbol, 0)*0.015m);
		                    SYMBOL_quantity_SL_UP_S2 = SYMBOL_quantity_UP_S2;
		                    SYMBOL_quantity_TP1_UP_S2 = (int)Math.Floor(SYMBOL_quantity_UP_S2 * 1m);
	                    }

						oco1:
	                    if (SYMBOL_Signal_Condition_UP_1 && 
	                    DOWR_SYMBOL_UP_S2 && 
	                    Base.SYMBOL_OCO1_UP_S2_IsReady == true &&
	                    Base.SYMBOL_OCO1_UP_S2_Monthly_IsReady == true)
	                    {
	                         Base.SYMBOL_OCO1_EO1_UP_S2 = true;
	                         yield return Insight.Price(SY1D.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Up, null, null, null, 1);
	                         SYMBOL_OCO1_MO1_UP_S2 = algorithm.MarketOrder(SY1D.Symbol, SYMBOL_quantity_TP1_UP_S2, false,"SYMBOL_UP_S2_Entry_TP1_OCO1");
	                         Base.SYMBOL_OCO1_EO1_UP_S2 = false;

							Base.SYMBOL_OCO1_UP_S2_IsReady = false;
							
							if (Base.SYMBOL_OCO1_UP_S2_IsReady == false)
							break;

	                    }
	                yield break;
	            	}
	            }
	        }
        }
    }
	}
}
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
using QuantConnect.Indicators;
using QuantConnect.Orders;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Selection;

namespace QuantConnect
{   
    public partial class Base
    {
    	
    	public static Symbol _SYMBOL;
		
    	///oco1 up
    	public static OrderTicket SYMBOL_OCO1_MO1_UP_S2;
    	public static OrderTicket SYMBOL_OCO1_MO2_UP_S2;
    	public static OrderTicket SYMBOL_OCO1_MO3_UP_S2;
    	public static OrderTicket SYMBOL_OCO1_MO4_UP_S2;
    	public static OrderTicket SYMBOL_OCO1_MO5_UP_S2;
    	public static OrderTicket SYMBOL_OCO1_MO6_UP_S2;
    	
    	public static int SYMBOL_OCO1_EO1_UP_S2_ID ;
        public static int SYMBOL_OCO1_EO2_UP_S2_ID ;
        public static int SYMBOL_OCO1_EO3_UP_S2_ID ;
        public static int SYMBOL_OCO1_EO4_UP_S2_ID ;
        public static int SYMBOL_OCO1_EO5_UP_S2_ID ;
        public static int SYMBOL_OCO1_EO6_UP_S2_ID ;
        
        public static bool SYMBOL_OCO1_EO1_UP_S2 ;
        public static bool SYMBOL_OCO1_EO2_UP_S2 ;
        public static bool SYMBOL_OCO1_EO3_UP_S2 ;
        public static bool SYMBOL_OCO1_EO4_UP_S2 ;
        public static bool SYMBOL_OCO1_EO5_UP_S2 ;
        public static bool SYMBOL_OCO1_EO6_UP_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_6 ;
        
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_1 ;
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_2 ;
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_3 ;
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_4 ;
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_5 ;
        public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_6 ;
        
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets1 = new List<SYMBOL_OCO1_UP_S2>();
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets2 = new List<SYMBOL_OCO1_UP_S2>();
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets3 = new List<SYMBOL_OCO1_UP_S2>();
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets4 = new List<SYMBOL_OCO1_UP_S2>();
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets5 = new List<SYMBOL_OCO1_UP_S2>();
        public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets6 = new List<SYMBOL_OCO1_UP_S2>();
        
        public static bool SYMBOL_OCO1_UP_S2_IsReady = true;
        public static bool SYMBOL_OCO1_UP_S2_Monthly_IsReady = true;

        
        //oco1 down
		public static OrderTicket SYMBOL_OCO1_MO1_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO1_MO2_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO1_MO3_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO1_MO4_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO1_MO5_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO1_MO6_DOWN_S2 ;
    	
    	public static int SYMBOL_OCO1_EO1_DOWN_S2_ID ;
        public static int SYMBOL_OCO1_EO2_DOWN_S2_ID ;
        public static int SYMBOL_OCO1_EO3_DOWN_S2_ID ;
        public static int SYMBOL_OCO1_EO4_DOWN_S2_ID ;
        public static int SYMBOL_OCO1_EO5_DOWN_S2_ID ;
        public static int SYMBOL_OCO1_EO6_DOWN_S2_ID ;
        
        public static bool SYMBOL_OCO1_EO1_DOWN_S2 ;
        public static bool SYMBOL_OCO1_EO2_DOWN_S2 ;
        public static bool SYMBOL_OCO1_EO3_DOWN_S2 ;
        public static bool SYMBOL_OCO1_EO4_DOWN_S2 ;
        public static bool SYMBOL_OCO1_EO5_DOWN_S2 ;
        public static bool SYMBOL_OCO1_EO6_DOWN_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_6 ;
        
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_1 ;
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_2 ;
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_3 ;
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_4 ;
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_5 ;
        public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_6 ;
        
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets1 = new List<SYMBOL_OCO1_DOWN_S2>();
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets2 = new List<SYMBOL_OCO1_DOWN_S2>();
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets3 = new List<SYMBOL_OCO1_DOWN_S2>();
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets4 = new List<SYMBOL_OCO1_DOWN_S2>();
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets5 = new List<SYMBOL_OCO1_DOWN_S2>();
        public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets6 = new List<SYMBOL_OCO1_DOWN_S2>();
        
        public static bool SYMBOL_OCO1_DOWN_S2_IsReady = true;
        public static bool SYMBOL_OCO1_DOWN_S2_Monthly_IsReady = true;

        
        //oco2 up
        public static OrderTicket SYMBOL_OCO2_MO1_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO2_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO3_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO4_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO5_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO6_UP_S2 ;
    	
    	public static int SYMBOL_OCO2_EO1_UP_S2_ID ;
        public static int SYMBOL_OCO2_EO2_UP_S2_ID ;
        public static int SYMBOL_OCO2_EO3_UP_S2_ID ;
        public static int SYMBOL_OCO2_EO4_UP_S2_ID ;
        public static int SYMBOL_OCO2_EO5_UP_S2_ID ;
        public static int SYMBOL_OCO2_EO6_UP_S2_ID ;
        
        public static bool SYMBOL_OCO2_EO1_UP_S2 ;
        public static bool SYMBOL_OCO2_EO2_UP_S2 ;
        public static bool SYMBOL_OCO2_EO3_UP_S2 ;
        public static bool SYMBOL_OCO2_EO4_UP_S2 ;
        public static bool SYMBOL_OCO2_EO5_UP_S2 ;
        public static bool SYMBOL_OCO2_EO6_UP_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_UP_S2> SYMBOL_OOFE_OCO2_UP_S2_6 ;
        
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_1 ;
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_2 ;
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_3 ;
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_4 ;
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_5 ;
        public static SYMBOL_OCO2_UP_S2 SYMBOL_PFO_OCO2_UP_S2_6 ;
        
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets1 = new List<SYMBOL_OCO2_UP_S2>();
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets2 = new List<SYMBOL_OCO2_UP_S2>();
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets3 = new List<SYMBOL_OCO2_UP_S2>();
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets4 = new List<SYMBOL_OCO2_UP_S2>();
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets5 = new List<SYMBOL_OCO2_UP_S2>();
        public static List<SYMBOL_OCO2_UP_S2> SYMBOL_UP_S2_OCO2Sets6 = new List<SYMBOL_OCO2_UP_S2>();
        
        public static bool SYMBOL_OCO2_UP_S2_IsReady = true;
        public static bool SYMBOL_OCO2_UP_S2_Monthly_IsReady = true;

        
        //oco2 down
        public static OrderTicket SYMBOL_OCO2_MO1_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO2_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO3_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO4_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO5_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO2_MO6_DOWN_S2 ;
    	
    	public static int SYMBOL_OCO2_EO1_DOWN_S2_ID ;
        public static int SYMBOL_OCO2_EO2_DOWN_S2_ID ;
        public static int SYMBOL_OCO2_EO3_DOWN_S2_ID ;
        public static int SYMBOL_OCO2_EO4_DOWN_S2_ID ;
        public static int SYMBOL_OCO2_EO5_DOWN_S2_ID ;
        public static int SYMBOL_OCO2_EO6_DOWN_S2_ID ;
        
        public static bool SYMBOL_OCO2_EO1_DOWN_S2 ;
        public static bool SYMBOL_OCO2_EO2_DOWN_S2 ;
        public static bool SYMBOL_OCO2_EO3_DOWN_S2 ;
        public static bool SYMBOL_OCO2_EO4_DOWN_S2 ;
        public static bool SYMBOL_OCO2_EO5_DOWN_S2 ;
        public static bool SYMBOL_OCO2_EO6_DOWN_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO2_DOWN_S2> SYMBOL_OOFE_OCO2_DOWN_S2_6 ;
        
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_1 ;
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_2 ;
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_3 ;
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_4 ;
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_5 ;
        public static SYMBOL_OCO2_DOWN_S2 SYMBOL_PFO_OCO2_DOWN_S2_6 ;
        
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets1 = new List<SYMBOL_OCO2_DOWN_S2>();
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets2 = new List<SYMBOL_OCO2_DOWN_S2>();
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets3 = new List<SYMBOL_OCO2_DOWN_S2>();
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets4 = new List<SYMBOL_OCO2_DOWN_S2>();
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets5 = new List<SYMBOL_OCO2_DOWN_S2>();
        public static List<SYMBOL_OCO2_DOWN_S2> SYMBOL_DOWN_S2_OCO2Sets6 = new List<SYMBOL_OCO2_DOWN_S2>();
        
        public static bool SYMBOL_OCO2_DOWN_S2_IsReady = true;
        public static bool SYMBOL_OCO2_DOWN_S2_Monthly_IsReady = true;
 
        
        //oco3 up
        public static OrderTicket SYMBOL_OCO3_MO1_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO2_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO3_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO4_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO5_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO6_UP_S2 ;
    	
    	public static int SYMBOL_OCO3_EO1_UP_S2_ID ;
        public static int SYMBOL_OCO3_EO2_UP_S2_ID ;
        public static int SYMBOL_OCO3_EO3_UP_S2_ID ;
        public static int SYMBOL_OCO3_EO4_UP_S2_ID ;
        public static int SYMBOL_OCO3_EO5_UP_S2_ID ;
        public static int SYMBOL_OCO3_EO6_UP_S2_ID ;
        
        public static bool SYMBOL_OCO3_EO1_UP_S2 ;
        public static bool SYMBOL_OCO3_EO2_UP_S2 ;
        public static bool SYMBOL_OCO3_EO3_UP_S2 ;
        public static bool SYMBOL_OCO3_EO4_UP_S2 ;
        public static bool SYMBOL_OCO3_EO5_UP_S2 ;
        public static bool SYMBOL_OCO3_EO6_UP_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_UP_S2> SYMBOL_OOFE_OCO3_UP_S2_6 ;
        
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_1 ;
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_2 ;
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_3 ;
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_4 ;
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_5 ;
        public static SYMBOL_OCO3_UP_S2 SYMBOL_PFO_OCO3_UP_S2_6 ;
        
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets1 = new List<SYMBOL_OCO3_UP_S2>();
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets2 = new List<SYMBOL_OCO3_UP_S2>();
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets3 = new List<SYMBOL_OCO3_UP_S2>();
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets4 = new List<SYMBOL_OCO3_UP_S2>();
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets5 = new List<SYMBOL_OCO3_UP_S2>();
        public static List<SYMBOL_OCO3_UP_S2> SYMBOL_UP_S2_OCO3Sets6 = new List<SYMBOL_OCO3_UP_S2>();
        
        public static bool SYMBOL_OCO3_UP_S2_IsReady = true;
        public static bool SYMBOL_OCO3_UP_S2_Monthly_IsReady = true;

        
        //oco3 down
        public static OrderTicket SYMBOL_OCO3_MO1_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO2_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO3_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO4_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO5_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO3_MO6_DOWN_S2 ;
    	
    	public static int SYMBOL_OCO3_EO1_DOWN_S2_ID ;
        public static int SYMBOL_OCO3_EO2_DOWN_S2_ID ;
        public static int SYMBOL_OCO3_EO3_DOWN_S2_ID ;
        public static int SYMBOL_OCO3_EO4_DOWN_S2_ID ;
        public static int SYMBOL_OCO3_EO5_DOWN_S2_ID ;
        public static int SYMBOL_OCO3_EO6_DOWN_S2_ID ;
        
        public static bool SYMBOL_OCO3_EO1_DOWN_S2 ;
        public static bool SYMBOL_OCO3_EO2_DOWN_S2 ;
        public static bool SYMBOL_OCO3_EO3_DOWN_S2 ;
        public static bool SYMBOL_OCO3_EO4_DOWN_S2 ;
        public static bool SYMBOL_OCO3_EO5_DOWN_S2 ;
        public static bool SYMBOL_OCO3_EO6_DOWN_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO3_DOWN_S2> SYMBOL_OOFE_OCO3_DOWN_S2_6 ;
        
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_1 ;
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_2 ;
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_3 ;
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_4 ;
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_5 ;
        public static SYMBOL_OCO3_DOWN_S2 SYMBOL_PFO_OCO3_DOWN_S2_6 ;
        
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets1 = new List<SYMBOL_OCO3_DOWN_S2>();
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets2 = new List<SYMBOL_OCO3_DOWN_S2>();
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets3 = new List<SYMBOL_OCO3_DOWN_S2>();
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets4 = new List<SYMBOL_OCO3_DOWN_S2>();
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets5 = new List<SYMBOL_OCO3_DOWN_S2>();
        public static List<SYMBOL_OCO3_DOWN_S2> SYMBOL_DOWN_S2_OCO3Sets6 = new List<SYMBOL_OCO3_DOWN_S2>();
        
        public static bool SYMBOL_OCO3_DOWN_S2_IsReady = true;
        public static bool SYMBOL_OCO3_DOWN_S2_Monthly_IsReady = true;

        
        //oco4 up
        public static OrderTicket SYMBOL_OCO4_MO1_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO2_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO3_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO4_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO5_UP_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO6_UP_S2 ;
    	
    	public static int SYMBOL_OCO4_EO1_UP_S2_ID ;
        public static int SYMBOL_OCO4_EO2_UP_S2_ID ;
        public static int SYMBOL_OCO4_EO3_UP_S2_ID ;
        public static int SYMBOL_OCO4_EO4_UP_S2_ID ;
        public static int SYMBOL_OCO4_EO5_UP_S2_ID ;
        public static int SYMBOL_OCO4_EO6_UP_S2_ID ;
        
        public static bool SYMBOL_OCO4_EO1_UP_S2 ;
        public static bool SYMBOL_OCO4_EO2_UP_S2 ;
        public static bool SYMBOL_OCO4_EO3_UP_S2 ;
        public static bool SYMBOL_OCO4_EO4_UP_S2 ;
        public static bool SYMBOL_OCO4_EO5_UP_S2 ;
        public static bool SYMBOL_OCO4_EO6_UP_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_UP_S2> SYMBOL_OOFE_OCO4_UP_S2_6 ;
        
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_1 ;
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_2 ;
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_3 ;
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_4 ;
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_5 ;
        public static SYMBOL_OCO4_UP_S2 SYMBOL_PFO_OCO4_UP_S2_6 ;
        
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets1 = new List<SYMBOL_OCO4_UP_S2>();
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets2 = new List<SYMBOL_OCO4_UP_S2>();
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets3 = new List<SYMBOL_OCO4_UP_S2>();
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets4 = new List<SYMBOL_OCO4_UP_S2>();
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets5 = new List<SYMBOL_OCO4_UP_S2>();
        public static List<SYMBOL_OCO4_UP_S2> SYMBOL_UP_S2_OCO4Sets6 = new List<SYMBOL_OCO4_UP_S2>();
        
        public static bool SYMBOL_OCO4_UP_S2_IsReady = true;
        public static bool SYMBOL_OCO4_UP_S2_Monthly_IsReady = true;

        
        //oco4 down
        public static OrderTicket SYMBOL_OCO4_MO1_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO2_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO3_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO4_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO5_DOWN_S2 ;
    	public static OrderTicket SYMBOL_OCO4_MO6_DOWN_S2 ;
    	
    	public static int SYMBOL_OCO4_EO1_DOWN_S2_ID ;
        public static int SYMBOL_OCO4_EO2_DOWN_S2_ID ;
        public static int SYMBOL_OCO4_EO3_DOWN_S2_ID ;
        public static int SYMBOL_OCO4_EO4_DOWN_S2_ID ;
        public static int SYMBOL_OCO4_EO5_DOWN_S2_ID ;
        public static int SYMBOL_OCO4_EO6_DOWN_S2_ID ;
        
        public static bool SYMBOL_OCO4_EO1_DOWN_S2 ;
        public static bool SYMBOL_OCO4_EO2_DOWN_S2 ;
        public static bool SYMBOL_OCO4_EO3_DOWN_S2 ;
        public static bool SYMBOL_OCO4_EO4_DOWN_S2 ;
        public static bool SYMBOL_OCO4_EO5_DOWN_S2 ;
        public static bool SYMBOL_OCO4_EO6_DOWN_S2 ;
        
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_1 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_2 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_3 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_4 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_5 ;
        public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO4_DOWN_S2> SYMBOL_OOFE_OCO4_DOWN_S2_6 ;
        
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_1 ;
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_2 ;
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_3 ;
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_4 ;
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_5 ;
        public static SYMBOL_OCO4_DOWN_S2 SYMBOL_PFO_OCO4_DOWN_S2_6 ;
        
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets1 = new List<SYMBOL_OCO4_DOWN_S2>();
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets2 = new List<SYMBOL_OCO4_DOWN_S2>();
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets3 = new List<SYMBOL_OCO4_DOWN_S2>();
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets4 = new List<SYMBOL_OCO4_DOWN_S2>();
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets5 = new List<SYMBOL_OCO4_DOWN_S2>();
        public static List<SYMBOL_OCO4_DOWN_S2> SYMBOL_DOWN_S2_OCO4Sets6 = new List<SYMBOL_OCO4_DOWN_S2>();
        
        public static bool SYMBOL_OCO4_DOWN_S2_IsReady = true;
        public static bool SYMBOL_OCO4_DOWN_S2_Monthly_IsReady = true;

        
        
////////////////////////////
		public static decimal SYMBOL_UP_S2_SL {get; set;}
		public static decimal SYMBOL_UP_S2_TP1 {get; set;}
		public static decimal SYMBOL_UP_S2_TP2 {get; set;}
		public static decimal SYMBOL_UP_S2_TP3 {get; set;}
		public static decimal SYMBOL_UP_S2_TP4 {get; set;}
		public static decimal SYMBOL_UP_S2_TP5 {get; set;}
		public static decimal SYMBOL_UP_S2_TP6 {get; set;}
		
		public static decimal SYMBOL_DOWN_S2_SL {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP1 {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP2 {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP3 {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP4 {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP5 {get; set;}
		public static decimal SYMBOL_DOWN_S2_TP6 {get; set;}

        public static bool SYMBOL_Signal_Condition_UP_1 ;
        public static bool SYMBOL_Signal_Condition_UP_2 ;
        public static bool SYMBOL_Signal_Condition_UP_3 ;
        
        public static bool SYMBOL_Signal_Condition_DOWN_1 ;
        public static bool SYMBOL_Signal_Condition_DOWN_2 ;
        public static bool SYMBOL_Signal_Condition_DOWN_3 ;
        
        public static int SYMBOL_UP_S2_OCO_DELAY_30DAY = 10080;
        public static int SYMBOL_UP_S2_OCO_DELAY_7DAY = 10080;
        public static int SYMBOL_UP_S2_OCOM_DELAY_DAY = 4320;
		public static int SYMBOL_UP_S2_OCOT_DELAY_DAY = 2880;
		public static int SYMBOL_UP_S2_OCOW_DELAY_DAY = 1440;
		public static int SYMBOL_UP_S2_OCOTH_DELAY_DAY = 720;
		
		public static int SYMBOL_DOWN_S2_OCO_DELAY_30DAY = 10080;
		public static int SYMBOL_DOWN_S2_OCO_DELAY_7DAY = 10080;
		public static int SYMBOL_DOWN_S2_OCOM_DELAY_DAY = 4320;
		public static int SYMBOL_DOWN_S2_OCOT_DELAY_DAY = 2880;
		public static int SYMBOL_DOWN_S2_OCOW_DELAY_DAY = 1440;
		public static int SYMBOL_DOWN_S2_OCOTH_DELAY_DAY = 720;
		
		public static bool DOWR_SYMBOL_UP_S2 ;
        public static bool DOWM_SYMBOL_UP_S2 ;
        public static bool DOWT_SYMBOL_UP_S2 ;
        public static bool DOWW_SYMBOL_UP_S2 ;
        public static bool DOWTH_SYMBOL_UP_S2 ;
        
		public static bool DOWR_SYMBOL_DOWN_S2 ;
        public static bool DOWM_SYMBOL_DOWN_S2 ;
        public static bool DOWT_SYMBOL_DOWN_S2 ;
        public static bool DOWW_SYMBOL_DOWN_S2 ;
        public static bool DOWTH_SYMBOL_DOWN_S2 ;

        
		public static decimal SYMBOL_quantity_UP_S2 ;
		public static decimal SYMBOL_quantity_SL_UP_S2 ;
		public static decimal SYMBOL_quantity_TP1_UP_S2 ;
		public static decimal SYMBOL_quantity_TP2_UP_S2 ;
		public static decimal SYMBOL_quantity_TP3_UP_S2 ;
		public static decimal SYMBOL_quantity_TP4_UP_S2 ;
		public static decimal SYMBOL_quantity_TP5_UP_S2;
		public static decimal SYMBOL_quantity_TP6_UP_S2 ;
		
		public static decimal SYMBOL_quantity_DOWN_S2 ;
		public static decimal SYMBOL_quantity_SL_DOWN_S2 ;
		public static decimal SYMBOL_quantity_TP1_DOWN_S2 ;
		public static decimal SYMBOL_quantity_TP2_DOWN_S2 ;
		public static decimal SYMBOL_quantity_TP3_DOWN_S2 ;
		public static decimal SYMBOL_quantity_TP4_DOWN_S2 ;
		public static decimal SYMBOL_quantity_TP5_DOWN_S2;
		public static decimal SYMBOL_quantity_TP6_DOWN_S2 ;
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
using QuantConnect.Orders;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Selection;

namespace QuantConnect
{  	
	public struct SYMBOL_UP_S2_OnOrderEvent
	{
		private QCAlgorithm _algorithm;

		public SYMBOL_UP_S2_OnOrderEvent(QCAlgorithm algorithm)
		{
			_algorithm = algorithm;
		}

		public void OnOrderEvent(QCAlgorithm _algorithm, OrderEvent orderEvent)
		{
				var OrderID = _algorithm.Transactions.GetOrderById(orderEvent.OrderId);

				if (orderEvent.Status == OrderStatus.Filled)
		        {	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 1 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 1 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 1 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 1 UP S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 2 UP S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 2 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 2 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 2 UP S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 3 UP S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 3 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 3 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 3 UP S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 4 UP S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 4 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 4 UP S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 4 UP S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        }
		        
				if (Base.SYMBOL_OCO1_EO1_UP_S2)
	                Base.SYMBOL_OCO1_EO1_UP_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO1_EO2_UP_S2)
	                Base.SYMBOL_OCO1_EO2_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO3_UP_S2)
	                Base.SYMBOL_OCO1_EO3_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO4_UP_S2)
	                Base.SYMBOL_OCO1_EO4_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO5_UP_S2)
	                Base.SYMBOL_OCO1_EO5_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO6_UP_S2)
	                Base.SYMBOL_OCO1_EO6_UP_S2_ID = orderEvent.OrderId;

		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO1_UP_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP1,"TP1_SYMBOL_UP_S2_OCO1"),
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP1_SYMBOL_UP_S2_OCO1"));
		                 };
		                Base.SYMBOL_UP_S2_OCO1Sets1.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO1_UP_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO2_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP2,"TP2_SYMBOL_UP_S2_OCO1"),
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP2_SYMBOL_UP_S2_OCO1"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO1Sets2.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO2_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO3_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP3,"TP3_SYMBOL_UP_S2_OCO1"),
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP3_SYMBOL_UP_S2_OCO1"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO1Sets3.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO3_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO4_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP4,"TP4_SYMBOL_UP_S2_OCO1"),
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP4_SYMBOL_UP_S2_OCO1"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO1Sets4.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO4_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO5_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_5 = (algo5, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo5.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP5,"TP5_SYMBOL_UP_S2_OCO1"),
		                        algo5.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP5_SYMBOL_UP_S2_OCO1"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO1Sets5.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_5(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO5_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO6_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_UP_S2_6 = (algo6, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_UP_S2(
		                        algo6.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP6,"TP6_SYMBOL_UP_S2_OCO1"),
		                        algo6.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP6_SYMBOL_UP_S2_OCO1"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO1Sets6.Add( Base.SYMBOL_OOFE_OCO1_UP_S2_6(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO6_UP_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO1S1_UP_S2 = 0;
	                for (; SYMBOL_OCO1S1_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets1.Count; SYMBOL_OCO1S1_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets1[SYMBOL_OCO1S1_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets1[SYMBOL_OCO1S1_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets1.RemoveAt(SYMBOL_OCO1S1_UP_S2);
	                        SYMBOL_OCO1S1_UP_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO1S2_UP_S2 = 0;
	                for (; SYMBOL_OCO1S2_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets2.Count; SYMBOL_OCO1S2_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets2[SYMBOL_OCO1S2_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets2[SYMBOL_OCO1S2_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets2.RemoveAt(SYMBOL_OCO1S2_UP_S2);
	                        SYMBOL_OCO1S2_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO1S3_UP_S2 = 0;
	                for (; SYMBOL_OCO1S3_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets3.Count; SYMBOL_OCO1S3_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets3[SYMBOL_OCO1S3_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets3[SYMBOL_OCO1S3_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets3.RemoveAt(SYMBOL_OCO1S3_UP_S2);
	                        SYMBOL_OCO1S3_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO1S4_UP_S2 = 0;
	                for (; SYMBOL_OCO1S4_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets4.Count; SYMBOL_OCO1S4_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets4[SYMBOL_OCO1S4_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets4[SYMBOL_OCO1S4_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets4.RemoveAt(SYMBOL_OCO1S4_UP_S2);
	                        SYMBOL_OCO1S4_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO1S5_UP_S2 = 0;
	                for (; SYMBOL_OCO1S5_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets5.Count; SYMBOL_OCO1S5_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets5[SYMBOL_OCO1S5_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets5[SYMBOL_OCO1S5_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets5.RemoveAt(SYMBOL_OCO1S5_UP_S2);
	                        SYMBOL_OCO1S5_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO1S6_UP_S2 = 0;
	                for (; SYMBOL_OCO1S6_UP_S2 < Base.SYMBOL_UP_S2_OCO1Sets6.Count; SYMBOL_OCO1S6_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO1Sets6[SYMBOL_OCO1S6_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO1Sets6[SYMBOL_OCO1S6_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO1Sets6.RemoveAt(SYMBOL_OCO1S6_UP_S2);
	                        SYMBOL_OCO1S6_UP_S2 = 0;
	                        break;
	                    }
		        }

		        if (Base.SYMBOL_OCO2_EO1_UP_S2)
	                Base.SYMBOL_OCO2_EO1_UP_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO2_EO2_UP_S2)
	                Base.SYMBOL_OCO2_EO2_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO3_UP_S2)
	                Base.SYMBOL_OCO2_EO3_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO4_UP_S2)
	                Base.SYMBOL_OCO2_EO4_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO5_UP_S2)
	                Base.SYMBOL_OCO2_EO5_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO6_UP_S2)
	                Base.SYMBOL_OCO2_EO6_UP_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO1_UP_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP1,"TP1_SYMBOL_UP_S2_OCO2"),
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP1_SYMBOL_UP_S2_OCO2"));
		                 };
		                Base.SYMBOL_UP_S2_OCO2Sets1.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO1_UP_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO2_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP2,"TP2_SYMBOL_UP_S2_OCO2"),
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP2_SYMBOL_UP_S2_OCO2"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO2Sets2.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO2_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO3_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP3,"TP3_SYMBOL_UP_S2_OCO2"),
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP3_SYMBOL_UP_S2_OCO2"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO2Sets3.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO3_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO4_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP4,"TP4_SYMBOL_UP_S2_OCO2"),
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP4_SYMBOL_UP_S2_OCO2"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO2Sets4.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO4_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO5_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_5 = (algo5, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo5.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP5,"TP5_SYMBOL_UP_S2_OCO2"),
		                        algo5.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP5_SYMBOL_UP_S2_OCO2"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO2Sets5.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_5(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO5_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO6_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_UP_S2_6 = (algo6, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_UP_S2(
		                        algo6.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP6,"TP6_SYMBOL_UP_S2_OCO2"),
		                        algo6.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP6_SYMBOL_UP_S2_OCO2"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO2Sets6.Add( Base.SYMBOL_OOFE_OCO2_UP_S2_6(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO6_UP_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO2S1_UP_S2 = 0;
	                for (; SYMBOL_OCO2S1_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets1.Count; SYMBOL_OCO2S1_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets1[SYMBOL_OCO2S1_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets1[SYMBOL_OCO2S1_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets1.RemoveAt(SYMBOL_OCO2S1_UP_S2);
	                        SYMBOL_OCO2S1_UP_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO2S2_UP_S2 = 0;
	                for (; SYMBOL_OCO2S2_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets2.Count; SYMBOL_OCO2S2_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets2[SYMBOL_OCO2S2_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets2[SYMBOL_OCO2S2_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets2.RemoveAt(SYMBOL_OCO2S2_UP_S2);
	                        SYMBOL_OCO2S2_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO2S3_UP_S2 = 0;
	                for (; SYMBOL_OCO2S3_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets3.Count; SYMBOL_OCO2S3_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets3[SYMBOL_OCO2S3_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets3[SYMBOL_OCO2S3_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets3.RemoveAt(SYMBOL_OCO2S3_UP_S2);
	                        SYMBOL_OCO2S3_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO2S4_UP_S2 = 0;
	                for (; SYMBOL_OCO2S4_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets4.Count; SYMBOL_OCO2S4_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets4[SYMBOL_OCO2S4_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets4[SYMBOL_OCO2S4_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets4.RemoveAt(SYMBOL_OCO2S4_UP_S2);
	                        SYMBOL_OCO2S4_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO2S5_UP_S2 = 0;
	                for (; SYMBOL_OCO2S5_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets5.Count; SYMBOL_OCO2S5_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets5[SYMBOL_OCO2S5_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets5[SYMBOL_OCO2S5_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets5.RemoveAt(SYMBOL_OCO2S5_UP_S2);
	                        SYMBOL_OCO2S5_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO2S6_UP_S2 = 0;
	                for (; SYMBOL_OCO2S6_UP_S2 < Base.SYMBOL_UP_S2_OCO2Sets6.Count; SYMBOL_OCO2S6_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO2Sets6[SYMBOL_OCO2S6_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO2Sets6[SYMBOL_OCO2S6_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO2Sets6.RemoveAt(SYMBOL_OCO2S6_UP_S2);
	                        SYMBOL_OCO2S6_UP_S2 = 0;
	                        break;
	                    }
		        }
		        
		        if (Base.SYMBOL_OCO3_EO1_UP_S2)
	                Base.SYMBOL_OCO3_EO1_UP_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO3_EO2_UP_S2)
	                Base.SYMBOL_OCO3_EO2_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO3_UP_S2)
	                Base.SYMBOL_OCO3_EO3_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO4_UP_S2)
	                Base.SYMBOL_OCO3_EO4_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO5_UP_S2)
	                Base.SYMBOL_OCO3_EO5_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO6_UP_S2)
	                Base.SYMBOL_OCO3_EO6_UP_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO1_UP_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP1,"TP1_SYMBOL_UP_S2_OCO3"),
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP1_SYMBOL_UP_S2_OCO3"));
		                 };
		                Base.SYMBOL_UP_S2_OCO3Sets1.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO1_UP_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO2_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP2,"TP2_SYMBOL_UP_S2_OCO3"),
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP2_SYMBOL_UP_S2_OCO3"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO3Sets2.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO2_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO3_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP3,"TP3_SYMBOL_UP_S2_OCO3"),
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP3_SYMBOL_UP_S2_OCO3"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO3Sets3.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO3_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO4_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP4,"TP4_SYMBOL_UP_S2_OCO3"),
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP4_SYMBOL_UP_S2_OCO3"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO3Sets4.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO4_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO5_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_5 = (algo5, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo5.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP5,"TP5_SYMBOL_UP_S2_OCO3"),
		                        algo5.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP5_SYMBOL_UP_S2_OCO3"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO3Sets5.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_5(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO5_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO6_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_UP_S2_6 = (algo6, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_UP_S2(
		                        algo6.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP6,"TP6_SYMBOL_UP_S2_OCO3"),
		                        algo6.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP6_SYMBOL_UP_S2_OCO3"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO3Sets6.Add( Base.SYMBOL_OOFE_OCO3_UP_S2_6(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO6_UP_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO3S1_UP_S2 = 0;
	                for (; SYMBOL_OCO3S1_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets1.Count; SYMBOL_OCO3S1_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets1[SYMBOL_OCO3S1_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets1[SYMBOL_OCO3S1_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets1.RemoveAt(SYMBOL_OCO3S1_UP_S2);
	                        SYMBOL_OCO3S1_UP_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO3S2_UP_S2 = 0;
	                for (; SYMBOL_OCO3S2_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets2.Count; SYMBOL_OCO3S2_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets2[SYMBOL_OCO3S2_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets2[SYMBOL_OCO3S2_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets2.RemoveAt(SYMBOL_OCO3S2_UP_S2);
	                        SYMBOL_OCO3S2_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO3S3_UP_S2 = 0;
	                for (; SYMBOL_OCO3S3_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets3.Count; SYMBOL_OCO3S3_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets3[SYMBOL_OCO3S3_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets3[SYMBOL_OCO3S3_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets3.RemoveAt(SYMBOL_OCO3S3_UP_S2);
	                        SYMBOL_OCO3S3_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO3S4_UP_S2 = 0;
	                for (; SYMBOL_OCO3S4_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets4.Count; SYMBOL_OCO3S4_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets4[SYMBOL_OCO3S4_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets4[SYMBOL_OCO3S4_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets4.RemoveAt(SYMBOL_OCO3S4_UP_S2);
	                        SYMBOL_OCO3S4_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO3S5_UP_S2 = 0;
	                for (; SYMBOL_OCO3S5_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets5.Count; SYMBOL_OCO3S5_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets5[SYMBOL_OCO3S5_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets5[SYMBOL_OCO3S5_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets5.RemoveAt(SYMBOL_OCO3S5_UP_S2);
	                        SYMBOL_OCO3S5_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO3S6_UP_S2 = 0;
	                for (; SYMBOL_OCO3S6_UP_S2 < Base.SYMBOL_UP_S2_OCO3Sets6.Count; SYMBOL_OCO3S6_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO3Sets6[SYMBOL_OCO3S6_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO3Sets6[SYMBOL_OCO3S6_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO3Sets6.RemoveAt(SYMBOL_OCO3S6_UP_S2);
	                        SYMBOL_OCO3S6_UP_S2 = 0;
	                        break;
	                    }
		        }
		        
		        if (Base.SYMBOL_OCO4_EO1_UP_S2)
	                Base.SYMBOL_OCO4_EO1_UP_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO4_EO2_UP_S2)
	                Base.SYMBOL_OCO4_EO2_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO3_UP_S2)
	                Base.SYMBOL_OCO4_EO3_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO4_UP_S2)
	                Base.SYMBOL_OCO4_EO4_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO5_UP_S2)
	                Base.SYMBOL_OCO4_EO5_UP_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO6_UP_S2)
	                Base.SYMBOL_OCO4_EO6_UP_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO1_UP_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP1,"TP1_SYMBOL_UP_S2_OCO4"),
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP1_SYMBOL_UP_S2_OCO4"));
		                 };
		                Base.SYMBOL_UP_S2_OCO4Sets1.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO1_UP_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO2_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP2,"TP2_SYMBOL_UP_S2_OCO4"),
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP2_SYMBOL_UP_S2_OCO4"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO4Sets2.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO2_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO3_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP3,"TP3_SYMBOL_UP_S2_OCO4"),
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP3_SYMBOL_UP_S2_OCO4"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO4Sets3.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO3_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO4_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP4,"TP4_SYMBOL_UP_S2_OCO4"),
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP4_SYMBOL_UP_S2_OCO4"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO4Sets4.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO4_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO5_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_5 = (algo5, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo5.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP5,"TP5_SYMBOL_UP_S2_OCO4"),
		                        algo5.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP5_SYMBOL_UP_S2_OCO4"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO4Sets5.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_5(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO5_UP_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO6_UP_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_UP_S2_6 = (algo6, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_UP_S2(
		                        algo6.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_UP_S2_TP6,"TP6_SYMBOL_UP_S2_OCO4"),
		                        algo6.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL,"SL_TP6_SYMBOL_UP_S2_OCO4"));
		                 };
	                    Base.SYMBOL_UP_S2_OCO4Sets6.Add( Base.SYMBOL_OOFE_OCO4_UP_S2_6(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO6_UP_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO4S1_UP_S2 = 0;
	                for (; SYMBOL_OCO4S1_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets1.Count; SYMBOL_OCO4S1_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets1[SYMBOL_OCO4S1_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets1[SYMBOL_OCO4S1_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets1.RemoveAt(SYMBOL_OCO4S1_UP_S2);
	                        SYMBOL_OCO4S1_UP_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO4S2_UP_S2 = 0;
	                for (; SYMBOL_OCO4S2_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets2.Count; SYMBOL_OCO4S2_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets2[SYMBOL_OCO4S2_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets2[SYMBOL_OCO4S2_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets2.RemoveAt(SYMBOL_OCO4S2_UP_S2);
	                        SYMBOL_OCO4S2_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO4S3_UP_S2 = 0;
	                for (; SYMBOL_OCO4S3_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets3.Count; SYMBOL_OCO4S3_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets3[SYMBOL_OCO4S3_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets3[SYMBOL_OCO4S3_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets3.RemoveAt(SYMBOL_OCO4S3_UP_S2);
	                        SYMBOL_OCO4S3_UP_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO4S4_UP_S2 = 0;
	                for (; SYMBOL_OCO4S4_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets4.Count; SYMBOL_OCO4S4_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets4[SYMBOL_OCO4S4_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets4[SYMBOL_OCO4S4_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets4.RemoveAt(SYMBOL_OCO4S4_UP_S2);
	                        SYMBOL_OCO4S4_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO4S5_UP_S2 = 0;
	                for (; SYMBOL_OCO4S5_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets5.Count; SYMBOL_OCO4S5_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets5[SYMBOL_OCO4S5_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets5[SYMBOL_OCO4S5_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets5.RemoveAt(SYMBOL_OCO4S5_UP_S2);
	                        SYMBOL_OCO4S5_UP_S2 = 0;
	                        break;
	                    }
	                
	                int SYMBOL_OCO4S6_UP_S2 = 0;
	                for (; SYMBOL_OCO4S6_UP_S2 < Base.SYMBOL_UP_S2_OCO4Sets6.Count; SYMBOL_OCO4S6_UP_S2++)
	                    if (Base.SYMBOL_UP_S2_OCO4Sets6[SYMBOL_OCO4S6_UP_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_UP_S2_OCO4Sets6[SYMBOL_OCO4S6_UP_S2].Filled();
	                        Base.SYMBOL_UP_S2_OCO4Sets6.RemoveAt(SYMBOL_OCO4S6_UP_S2);
	                        SYMBOL_OCO4S6_UP_S2 = 0;
	                        break;
	                    }
		    
		        }
		}
	}
}
using System.Linq;
using System.Collections.Generic;
using QuantConnect.Orders;
using NodaTime;
using NodaTime.TimeZones;

namespace QuantConnect 
{
    public struct SYMBOL_OCO1_DOWN_S2
    {
        public SYMBOL_OCO1_DOWN_S2(params OrderTicket[] orderTickets)
        {
            this.OrderTickets = orderTickets;
        }

        private OrderTicket[] OrderTickets { get; set; }

        public void Filled()
        {
        	
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTickets)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 1 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 2 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 3 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 4 DOWN S2");
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTickets)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 1 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 2 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 3 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 4 DOWN S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTickets)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO1_UP_S2
    {
        public SYMBOL_OCO1_UP_S2(params OrderTicket[] orderTicketsUp)
        {
            this.OrderTicketsUp = orderTicketsUp;
        }

        private OrderTicket[] OrderTicketsUp { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 1 UP S2");
                	}

                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 2 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 3 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 4 UP S2");
                	}
                }
            }
        }

        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 1 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 2 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 3 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO1" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO1"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 4 UP S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsUp)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO2_DOWN_S2
    {
        public SYMBOL_OCO2_DOWN_S2(params OrderTicket[] orderTicketsDown)
        {
            this.OrderTicketsDown = orderTicketsDown;
        }

        private OrderTicket[] OrderTicketsDown { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 1 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 2 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 3 DOWN S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 4 DOWN S2");
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 1 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 2 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 3 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO1 CANCEL 4 DOWN S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsDown)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO2_UP_S2
    {
        public SYMBOL_OCO2_UP_S2(params OrderTicket[] orderTicketsUp)
        {
            this.OrderTicketsUp = orderTicketsUp;
        }

        private OrderTicket[] OrderTicketsUp { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 1 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 2 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 3 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 4 UP S2");
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 1 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 2 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 3 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO2" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO2"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO2 CANCEL 4 UP S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsUp)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO3_DOWN_S2
    {
        public SYMBOL_OCO3_DOWN_S2(params OrderTicket[] orderTicketsDown)
        {
            this.OrderTicketsDown = orderTicketsDown;
        }

        private OrderTicket[] OrderTicketsDown { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 1 DOWN S2");
                		
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 2 DOWN S2");
                    	
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 3 DOWN S2");
                    	
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 4 DOWN S2");
                    	
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 1 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 2 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 3 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 4 DOWN S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsDown)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO3_UP_S2
    {
        public SYMBOL_OCO3_UP_S2(params OrderTicket[] orderTicketsUp)
        {
            this.OrderTicketsUp = orderTicketsUp;
        }

        private OrderTicket[] OrderTicketsUp { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {

                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 1 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 2 UP S2");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 3 UP S2");

                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 4 UP S2");
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 1 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 2 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 3 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO3" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO3"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO3 CANCEL 4 UP S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsUp)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO4_DOWN_S2
    {
        public SYMBOL_OCO4_DOWN_S2(params OrderTicket[] orderTicketsDown)
        {
            this.OrderTicketsDown = orderTicketsDown;
        }

        private OrderTicket[] OrderTicketsDown { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 1 DOWN S2");
                		
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 2 DOWN S2");
                    	
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 3 DOWN S2");
                    	
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 4 DOWN S2");
                    	
                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsDown)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 1 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 2 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 3 DOWN S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_DOWN_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_DOWN_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 4 DOWN S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsDown)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
    
    public struct SYMBOL_OCO4_UP_S2
    {
        public SYMBOL_OCO4_UP_S2(params OrderTicket[] orderTicketsUp)
        {
            this.OrderTicketsUp = orderTicketsUp;
        }

        private OrderTicket[] OrderTicketsUp { get; set; }

        public void Filled()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 1 UP S2");
                    	
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 2 UP S2");

                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 3 UP S2");

                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 4 UP S2");

                	}
                }
            }
        }
        
        public void TimeOut()
        {
            // Cancel all the outstanding tickets.
            foreach (var orderTicket in this.OrderTicketsUp)
            {
                if (orderTicket.Status == OrderStatus.Submitted)
                {
                	if(orderTicket.Tag.StartsWith("TP1_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP1_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 1 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP2_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP2_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 2 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP3_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP3_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 3 UP S2 TIMEOUT");
                	}
                	
                	if(orderTicket.Tag.StartsWith("TP4_SYMBOL_UP_S2_OCO4" ) || orderTicket.Tag.StartsWith("SL_TP4_SYMBOL_UP_S2_OCO4"))
                	{
                    	orderTicket.Cancel("SYMBOL OCO4 CANCEL 4 UP S2 TIMEOUT");
                	}
                }
            }
        }

        public bool InOrders(int orderId)
        {
            foreach (var orderTicket in this.OrderTicketsUp)
                if (orderTicket.OrderId == orderId)
                    return true;
            return false;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using QuantConnect.Data;
using QuantConnect.Data.Consolidators;
using QuantConnect.Data.Market;
using QuantConnect.Indicators;
using QuantConnect.Orders;
using QuantConnect.Algorithm.Framework.Alphas;
using QuantConnect.Algorithm.Framework.Execution;
using QuantConnect.Algorithm.Framework.Portfolio;
using QuantConnect.Algorithm.Framework.Selection;

namespace QuantConnect
{  	
	public struct SYMBOL_DOWN_S2_OnOrderEvent
	{
		private QCAlgorithm _algorithm;

		public SYMBOL_DOWN_S2_OnOrderEvent(QCAlgorithm algorithm)
		{
			_algorithm = algorithm;
		}

		public void OnOrderEvent(QCAlgorithm _algorithm, OrderEvent orderEvent)
		{
				var OrderID = _algorithm.Transactions.GetOrderById(orderEvent.OrderId);
				
				if (orderEvent.Status == OrderStatus.Filled)
		        {	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 1 DOWN S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 1 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 1 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 1 DOWN S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 2 DOWN S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 2 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 2 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 2 DOWN S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 3 DOWN S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 3 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 3 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 3 DOWN S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        	
		        	if (OrderID.Tag.StartsWith("SYMBOL OCO1 CANCEL 4 DOWN S2") || 
		        		OrderID.Tag.StartsWith("SYMBOL OCO2 CANCEL 4 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO3 CANCEL 4 DOWN S2") ||
		        		OrderID.Tag.StartsWith("SYMBOL OCO4 CANCEL 4 DOWN S2"))
		        	{ 
		        		_algorithm.MarketOrder(OrderID.Symbol, -OrderID.Quantity, false, "OrderID rescue SYMBOL S2");
		        	}
		        }
		        
				if (Base.SYMBOL_OCO1_EO1_DOWN_S2)
	                Base.SYMBOL_OCO1_EO1_DOWN_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO1_EO2_DOWN_S2)
	                Base.SYMBOL_OCO1_EO2_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO3_DOWN_S2)
	                Base.SYMBOL_OCO1_EO3_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO1_EO4_DOWN_S2)
	                Base.SYMBOL_OCO1_EO4_DOWN_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO1_DOWN_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO1_DOWN_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_DOWN_S2(
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP1_SYMBOL_DOWN_S2_OCO1"),
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP1,"TP1_SYMBOL_DOWN_S2_OCO1"));
		                 };
		                Base.SYMBOL_DOWN_S2_OCO1Sets1.Add( Base.SYMBOL_OOFE_OCO1_DOWN_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO1_DOWN_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO2_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_DOWN_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_DOWN_S2(
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP2_SYMBOL_DOWN_S2_OCO1"),
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP2,"TP2_SYMBOL_DOWN_S2_OCO1"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO1Sets2.Add( Base.SYMBOL_OOFE_OCO1_DOWN_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO2_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO3_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_DOWN_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_DOWN_S2(
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP3_SYMBOL_DOWN_S2_OCO1"),
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP3,"TP3_SYMBOL_DOWN_S2_OCO1"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO1Sets3.Add( Base.SYMBOL_OOFE_OCO1_DOWN_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO3_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO1_EO4_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO1_DOWN_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO1_DOWN_S2(
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP4_SYMBOL_DOWN_S2_OCO1"),
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP4,"TP4_SYMBOL_DOWN_S2_OCO1"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO1Sets4.Add( Base.SYMBOL_OOFE_OCO1_DOWN_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO1_EO4_DOWN_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO1S1_DOWN_S2 = 0;
	                for (; SYMBOL_OCO1S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets1.Count; SYMBOL_OCO1S1_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO1Sets1[SYMBOL_OCO1S1_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO1Sets1[SYMBOL_OCO1S1_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO1Sets1.RemoveAt(SYMBOL_OCO1S1_DOWN_S2);
	                        SYMBOL_OCO1S1_DOWN_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO1S2_DOWN_S2 = 0;
	                for (; SYMBOL_OCO1S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets2.Count; SYMBOL_OCO1S2_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO1Sets2[SYMBOL_OCO1S2_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO1Sets2[SYMBOL_OCO1S2_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO1Sets2.RemoveAt(SYMBOL_OCO1S2_DOWN_S2);
	                        SYMBOL_OCO1S2_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO1S3_DOWN_S2 = 0;
	                for (; SYMBOL_OCO1S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets3.Count; SYMBOL_OCO1S3_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO1Sets3[SYMBOL_OCO1S3_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO1Sets3[SYMBOL_OCO1S3_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO1Sets3.RemoveAt(SYMBOL_OCO1S3_DOWN_S2);
	                        SYMBOL_OCO1S3_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO1S4_DOWN_S2 = 0;
	                for (; SYMBOL_OCO1S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO1Sets4.Count; SYMBOL_OCO1S4_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO1Sets4[SYMBOL_OCO1S4_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO1Sets4[SYMBOL_OCO1S4_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO1Sets4.RemoveAt(SYMBOL_OCO1S4_DOWN_S2);
	                        SYMBOL_OCO1S4_DOWN_S2 = 0;
	                        break;
	                    }
		        }
		        
		        if (Base.SYMBOL_OCO2_EO1_DOWN_S2)
	                Base.SYMBOL_OCO2_EO1_DOWN_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO2_EO2_DOWN_S2)
	                Base.SYMBOL_OCO2_EO2_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO3_DOWN_S2)
	                Base.SYMBOL_OCO2_EO3_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO2_EO4_DOWN_S2)
	                Base.SYMBOL_OCO2_EO4_DOWN_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO1_DOWN_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO2_DOWN_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_DOWN_S2(
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP1_SYMBOL_DOWN_S2_OCO2"),
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP1,"TP1_SYMBOL_DOWN_S2_OCO2"));
		                 };
		                Base.SYMBOL_DOWN_S2_OCO2Sets1.Add( Base.SYMBOL_OOFE_OCO2_DOWN_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO1_DOWN_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO2_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_DOWN_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_DOWN_S2(
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP2_SYMBOL_DOWN_S2_OCO2"),
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP2,"TP2_SYMBOL_DOWN_S2_OCO2"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO2Sets2.Add( Base.SYMBOL_OOFE_OCO2_DOWN_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO2_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO3_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_DOWN_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_DOWN_S2(
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP3_SYMBOL_DOWN_S2_OCO2"),
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP3,"TP3_SYMBOL_DOWN_S2_OCO2"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO2Sets3.Add( Base.SYMBOL_OOFE_OCO2_DOWN_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO3_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO2_EO4_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO2_DOWN_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO2_DOWN_S2(
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP4_SYMBOL_DOWN_S2_OCO2"),
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP4,"TP4_SYMBOL_DOWN_S2_OCO2"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO2Sets4.Add( Base.SYMBOL_OOFE_OCO2_DOWN_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO2_EO4_DOWN_S2_ID = -1;
	                }
	                
	                int SYMBOL_OCO2S1_DOWN_S2 = 0;
	                for (; SYMBOL_OCO2S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets1.Count; SYMBOL_OCO2S1_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO2Sets1[SYMBOL_OCO2S1_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO2Sets1[SYMBOL_OCO2S1_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO2Sets1.RemoveAt(SYMBOL_OCO2S1_DOWN_S2);
	                        SYMBOL_OCO2S1_DOWN_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO2S2_DOWN_S2 = 0;
	                for (; SYMBOL_OCO2S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets2.Count; SYMBOL_OCO2S2_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO2Sets2[SYMBOL_OCO2S2_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO2Sets2[SYMBOL_OCO2S2_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO2Sets2.RemoveAt(SYMBOL_OCO2S2_DOWN_S2);
	                        SYMBOL_OCO2S2_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO2S3_DOWN_S2 = 0;
	                for (; SYMBOL_OCO2S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets3.Count; SYMBOL_OCO2S3_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO2Sets3[SYMBOL_OCO2S3_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO2Sets3[SYMBOL_OCO2S3_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO2Sets3.RemoveAt(SYMBOL_OCO2S3_DOWN_S2);
	                        SYMBOL_OCO2S3_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO2S4_DOWN_S2 = 0;
	                for (; SYMBOL_OCO2S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO2Sets4.Count; SYMBOL_OCO2S4_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO2Sets4[SYMBOL_OCO2S4_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO2Sets4[SYMBOL_OCO2S4_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO2Sets4.RemoveAt(SYMBOL_OCO2S4_DOWN_S2);
	                        SYMBOL_OCO2S4_DOWN_S2 = 0;
	                        break;
	                    }
		        }
		        
		        if (Base.SYMBOL_OCO3_EO1_DOWN_S2)
	                Base.SYMBOL_OCO3_EO1_DOWN_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO3_EO2_DOWN_S2)
	                Base.SYMBOL_OCO3_EO2_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO3_DOWN_S2)
	                Base.SYMBOL_OCO3_EO3_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO3_EO4_DOWN_S2)
	                Base.SYMBOL_OCO3_EO4_DOWN_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO1_DOWN_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO3_DOWN_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_DOWN_S2(
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP1_SYMBOL_DOWN_S2_OCO3"),
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP1,"TP1_SYMBOL_DOWN_S2_OCO3"));
		                 };
		                Base.SYMBOL_DOWN_S2_OCO3Sets1.Add( Base.SYMBOL_OOFE_OCO3_DOWN_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO1_DOWN_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO2_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_DOWN_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_DOWN_S2(
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP2_SYMBOL_DOWN_S2_OCO3"),
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP2,"TP2_SYMBOL_DOWN_S2_OCO3"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO3Sets2.Add( Base.SYMBOL_OOFE_OCO3_DOWN_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO2_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO3_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_DOWN_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_DOWN_S2(
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP3_SYMBOL_DOWN_S2_OCO3"),
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP3,"TP3_SYMBOL_DOWN_S2_OCO3"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO3Sets3.Add( Base.SYMBOL_OOFE_OCO3_DOWN_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO3_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO3_EO4_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO3_DOWN_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO3_DOWN_S2(
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP4_SYMBOL_DOWN_S2_OCO3"),
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP4,"TP4_SYMBOL_DOWN_S2_OCO3"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO3Sets4.Add( Base.SYMBOL_OOFE_OCO3_DOWN_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO3_EO4_DOWN_S2_ID = -1;
	                }

	                
	                int SYMBOL_OCO3S1_DOWN_S2 = 0;
	                for (; SYMBOL_OCO3S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets1.Count; SYMBOL_OCO3S1_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO3Sets1[SYMBOL_OCO3S1_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO3Sets1[SYMBOL_OCO3S1_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO3Sets1.RemoveAt(SYMBOL_OCO3S1_DOWN_S2);
	                        SYMBOL_OCO3S1_DOWN_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO3S2_DOWN_S2 = 0;
	                for (; SYMBOL_OCO3S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets2.Count; SYMBOL_OCO3S2_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO3Sets2[SYMBOL_OCO3S2_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO3Sets2[SYMBOL_OCO3S2_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO3Sets2.RemoveAt(SYMBOL_OCO3S2_DOWN_S2);
	                        SYMBOL_OCO3S2_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO3S3_DOWN_S2 = 0;
	                for (; SYMBOL_OCO3S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets3.Count; SYMBOL_OCO3S3_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO3Sets3[SYMBOL_OCO3S3_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO3Sets3[SYMBOL_OCO3S3_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO3Sets3.RemoveAt(SYMBOL_OCO3S3_DOWN_S2);
	                        SYMBOL_OCO3S3_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO3S4_DOWN_S2 = 0;
	                for (; SYMBOL_OCO3S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO3Sets4.Count; SYMBOL_OCO3S4_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO3Sets4[SYMBOL_OCO3S4_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO3Sets4[SYMBOL_OCO3S4_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO3Sets4.RemoveAt(SYMBOL_OCO3S4_DOWN_S2);
	                        SYMBOL_OCO3S4_DOWN_S2 = 0;
	                        break;
	                    }
		        }
		        
		        if (Base.SYMBOL_OCO4_EO1_DOWN_S2)
	                Base.SYMBOL_OCO4_EO1_DOWN_S2_ID = orderEvent.OrderId;
	            if (Base.SYMBOL_OCO4_EO2_DOWN_S2)
	                Base.SYMBOL_OCO4_EO2_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO3_DOWN_S2)
	                Base.SYMBOL_OCO4_EO3_DOWN_S2_ID = orderEvent.OrderId;
	        	if (Base.SYMBOL_OCO4_EO4_DOWN_S2)
	                Base.SYMBOL_OCO4_EO4_DOWN_S2_ID = orderEvent.OrderId;
	                
		        if (orderEvent.Status == OrderStatus.Filled || orderEvent.Status == OrderStatus.PartiallyFilled)
		        {	
		            if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO1_DOWN_S2_ID)
	                {
	                	Base.SYMBOL_OOFE_OCO4_DOWN_S2_1 = (algo1, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_DOWN_S2(
		                        algo1.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP1_SYMBOL_DOWN_S2_OCO4"),
		                        algo1.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP1,"TP1_SYMBOL_DOWN_S2_OCO4"));
		                 };
		                Base.SYMBOL_DOWN_S2_OCO4Sets1.Add( Base.SYMBOL_OOFE_OCO4_DOWN_S2_1(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO1_DOWN_S2_ID = -1;
	                }

	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO2_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_DOWN_S2_2 = (algo2, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_DOWN_S2(
		                        algo2.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP2_SYMBOL_DOWN_S2_OCO4"),
		                        algo2.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP2,"TP2_SYMBOL_DOWN_S2_OCO4"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO4Sets2.Add( Base.SYMBOL_OOFE_OCO4_DOWN_S2_2(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO2_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO3_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_DOWN_S2_3 = (algo3, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_DOWN_S2(
		                        algo3.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP3_SYMBOL_DOWN_S2_OCO4"),
		                        algo3.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP3,"TP3_SYMBOL_DOWN_S2_OCO4"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO4Sets3.Add( Base.SYMBOL_OOFE_OCO4_DOWN_S2_3(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO3_DOWN_S2_ID = -1;
	                }
	                
	                if (orderEvent.OrderId == Base.SYMBOL_OCO4_EO4_DOWN_S2_ID) 
	                {
	                	Base.SYMBOL_OOFE_OCO4_DOWN_S2_4 = (algo4, symbol, filledPrice, fillQ) =>
		                {
		                    return new SYMBOL_OCO4_DOWN_S2(
		                        algo4.StopMarketOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice + Base.SYMBOL_DOWN_S2_SL,"SL_TP4_SYMBOL_DOWN_S2_OCO4"),
		                        algo4.LimitOrder(orderEvent.Symbol,  -orderEvent.Quantity,  orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP4,"TP4_SYMBOL_DOWN_S2_OCO4"));
		                 };
	                    Base.SYMBOL_DOWN_S2_OCO4Sets4.Add( Base.SYMBOL_OOFE_OCO4_DOWN_S2_4(_algorithm, orderEvent.Symbol, orderEvent.FillPrice, orderEvent.Quantity));
	                    Base.SYMBOL_OCO4_EO4_DOWN_S2_ID = -1;
	                }

	                
	                int SYMBOL_OCO4S1_DOWN_S2 = 0;
	                for (; SYMBOL_OCO4S1_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets1.Count; SYMBOL_OCO4S1_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO4Sets1[SYMBOL_OCO4S1_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO4Sets1[SYMBOL_OCO4S1_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO4Sets1.RemoveAt(SYMBOL_OCO4S1_DOWN_S2);
	                        SYMBOL_OCO4S1_DOWN_S2 = 0;
	                        break;
	                    }
	            
	                int SYMBOL_OCO4S2_DOWN_S2 = 0;
	                for (; SYMBOL_OCO4S2_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets2.Count; SYMBOL_OCO4S2_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO4Sets2[SYMBOL_OCO4S2_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO4Sets2[SYMBOL_OCO4S2_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO4Sets2.RemoveAt(SYMBOL_OCO4S2_DOWN_S2);
	                        SYMBOL_OCO4S2_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO4S3_DOWN_S2 = 0;
	                for (; SYMBOL_OCO4S3_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets3.Count; SYMBOL_OCO4S3_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO4Sets3[SYMBOL_OCO4S3_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO4Sets3[SYMBOL_OCO4S3_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO4Sets3.RemoveAt(SYMBOL_OCO4S3_DOWN_S2);
	                        SYMBOL_OCO4S3_DOWN_S2 = 0;
	                        break;
	                    }
	                    
	                int SYMBOL_OCO4S4_DOWN_S2 = 0;
	                for (; SYMBOL_OCO4S4_DOWN_S2 < Base.SYMBOL_DOWN_S2_OCO4Sets4.Count; SYMBOL_OCO4S4_DOWN_S2++)
	                    if (Base.SYMBOL_DOWN_S2_OCO4Sets4[SYMBOL_OCO4S4_DOWN_S2].InOrders(orderEvent.OrderId)) 
	                    {
	                        Base.SYMBOL_DOWN_S2_OCO4Sets4[SYMBOL_OCO4S4_DOWN_S2].Filled();
	                        Base.SYMBOL_DOWN_S2_OCO4Sets4.RemoveAt(SYMBOL_OCO4S4_DOWN_S2);
	                        SYMBOL_OCO4S4_DOWN_S2 = 0;
	                        break;
	                    }
		        }
		}
	}
}
using System;

namespace QuantConnect.Data.Consolidators
{
    [Obsolete("CalendarType is obsolete, please use Calendar instead")]
    public static class CalendarTypee
    {
        /// <summary>
        /// Computes the start of week (previous Monday) of given date/time
        /// </summary>
        public static Func<DateTime, CalendarInfo> Weekly => Calendar.Weekly;

        /// <summary>
        /// Computes the start of month (1st of the current month) of given date/time
        /// </summary>
        public static Func<DateTime, CalendarInfo> Monthly => Calendar.Monthly;
        
        public static Func<DateTime, CalendarInfo> Yearly => Calendar.Yearly;
        
        public static Func<DateTime, CalendarInfo> Quarterly => Calendar.Quarterly;
    }
}