Overall Statistics |
Total Trades 254 Average Win 0.06% Average Loss -0.17% Compounding Annual Return -0.104% Drawdown 3.500% Expectancy -0.085 Net Profit -1.436% Sharpe Ratio -0.181 Probabilistic Sharpe Ratio 0.000% Loss Rate 33% Win Rate 67% Profit-Loss Ratio 0.37 Alpha 0 Beta -0.01 Annual Standard Deviation 0.005 Annual Variance 0 Information Ratio -0.506 Tracking Error 0.184 Treynor Ratio 0.086 Total Fees $29.07 |
using QuantConnect.Securities; namespace QuantConnect { public partial class Base ///ONDATA { public class Alpha_SYMBOL_DOWN_S2 : AlphaModel { private readonly Symbol _symbol; private string SYMBOL = "CADJPY" ; 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()) { algorithm.Liquidate(); } 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"))) { foreach (var order in open_orders) { if (Base.SYMBOL_OCO1_EO1_DOWN_S2) Base.SYMBOL_OCO1_EO1_DOWN_S2_ID = order.Id; if (algorithm.UtcTime - 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; } } } } foreach (var MINUTE in DATMINUTE.Values) { foreach (var MONTH in DATMONTH.Values) { foreach (var ICHIWEEK in DATICHIWEEK.Values) { foreach (var ICHIMONTH in DATICHIMONTH.Values) { if ( ICHIWEEK.BQIsReady && ICHIMONTH.BQIsReady && MINUTE.BQIsReady && MONTH.BQIsReady && ICHIWEEK.WasJustUpdated(algorithm.Time) && ICHIMONTH.WasJustUpdated(algorithm.Time) && MINUTE.WasJustUpdated(algorithm.Time) && MONTH.WasJustUpdated(algorithm.Time) ) { DOWM_SYMBOL_DOWN_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Monday); DOWT_SYMBOL_DOWN_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Tuesday); DOWW_SYMBOL_DOWN_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Wednesday); DOWTH_SYMBOL_DOWN_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Thursday); DOWR_SYMBOL_DOWN_S2 = DOWM_SYMBOL_DOWN_S2 || DOWT_SYMBOL_DOWN_S2 || DOWW_SYMBOL_DOWN_S2 || DOWTH_SYMBOL_DOWN_S2 || algorithm.UtcTime.DayOfWeek == DayOfWeek.Friday; if (MINUTE.Symbol.Equals(SYMBOL) && MONTH.Symbol.Equals(SYMBOL) && ICHIWEEK.Symbol.Equals(SYMBOL) && ICHIMONTH.Symbol.Equals(SYMBOL)) { if (Base.SYMBOL_OCO1_DOWN_S2_IsReady == false) { Base.SYMBOL_OCO1_DOWN_S2_Monthly_IsReady = false; } if (algorithm.Time == MONTH.B[0].EndTime) { Base.SYMBOL_OCO1_DOWN_S2_Monthly_IsReady = true; } Signal1: if ( ICHIWEEK.Kijun[1] - ICHIWEEK.Kijun[0] > MINUTE.B[0].Close * 0.0008m ) { SYMBOL_Signal_Condition_DOWN_1 = true ; SYMBOL_DOWN_S2_SL_1 = (ICHIWEEK.Kijun[1] - ICHIWEEK.Kijun[0])*10; SYMBOL_DOWN_S2_TP1_1 = SYMBOL_DOWN_S2_SL_1 * 0.25m ; } if ( ICHIWEEK.Kijun[1] - ICHIWEEK.Kijun[0] < MINUTE.B[0].Close * 0.0008m ) { SYMBOL_Signal_Condition_DOWN_1 = false; } if (SYMBOL_Signal_Condition_DOWN_1 && DOWR_SYMBOL_DOWN_S2 && Base.SYMBOL_OCO1_DOWN_S2_IsReady == true) { if (SYMBOL_DOWN_S2_SL_1 != 0) { SYMBOL_quantity_DOWN_S2_1 = -(int)Math.Floor(algorithm.Portfolio.GetBuyingPower(MINUTE.Symbol, 0))/((algorithm.Portfolio.Securities.Count()))*0.2m; } SYMBOL_quantity_SL_DOWN_S2_1 = SYMBOL_quantity_DOWN_S2_1; SYMBOL_quantity_TP1_DOWN_S2_1 = (int)Math.Floor(SYMBOL_quantity_DOWN_S2_1 * 1m); Base.SYMBOL_OCO1_EO1_DOWN_S2 = true; yield return Insight.Price(MINUTE.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Down, null, null, null, 1); SYMBOL_OCO1_MO1_DOWN_S2 = algorithm.MarketOrder(MINUTE.Symbol, SYMBOL_quantity_TP1_DOWN_S2_1, false,"SYMBOL_DOWN_S2_Entry_TP1_OCO1"); Base.SYMBOL_OCO1_EO1_DOWN_S2 = false; Base.SYMBOL_OCO1_DOWN_S2_IsReady = false; if (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 TSMINUTE = TimeSpan.FromMinutes(1); public static TimeSpan TSDAILY = TimeSpan.FromMinutes(1440); public static int RL1m = 2; //3 public static int RL1D = 4; //9 public static Dictionary<string, ICHIWEEK> DATICHIWEEK = new Dictionary<string, ICHIWEEK>(); public static Dictionary<string, ICHIMONTH> DATICHIMONTH = new Dictionary<string, ICHIMONTH>(); public static Dictionary<string, MINUTE> DATMINUTE = new Dictionary<string, MINUTE>(); public static Dictionary<string, MONTH> DATMONTH = new Dictionary<string, MONTH>(); private SYMBOL_UP_S2_OnOrderEvent up_OnOrderEvent; private SYMBOL_DOWN_S2_OnOrderEvent down_OnOrderEvent; List<string> Pairs = new List<string> { /*"EURUSD", "EURJPY", "EURAUD", "EURCHF", "EURGBP", "EURCAD", "EURNZD", "USDJPY", "USDCAD", "USDCHF", "GBPUSD", "GBPCHF", "GBPJPY", "GBPCAD", "GBPAUD", "CHFJPY", */"CADJPY" }; public override void Initialize() { SetStartDate(2007, 1, 1); SetEndDate(DateTime.Now); // SetEndDate(2016, 1, 1); SetCash(1000000); Settings.RebalancePortfolioOnInsightChanges = false; Settings.RebalancePortfolioOnSecurityChanges = false; SetBrokerageModel(BrokerageName.AlphaStreams); SetWarmup(3); foreach (var symbol in Pairs) { var _symbol_D = AddForex(symbol, Resolution.Minute, Market.FXCM); DATICHIWEEK.Add(symbol, new ICHIWEEK(_symbol_D.Symbol, TSDAILY, RL1D)); DATICHIMONTH.Add(symbol, new ICHIMONTH(_symbol_D.Symbol, TSDAILY, RL1D)); DATMINUTE.Add(symbol, new MINUTE(_symbol_D.Symbol, TSMINUTE, RL1m)); DATMONTH.Add(symbol, new MONTH(_symbol_D.Symbol, TSDAILY, RL1D)); } up_OnOrderEvent = new SYMBOL_UP_S2_OnOrderEvent(this); down_OnOrderEvent = new SYMBOL_DOWN_S2_OnOrderEvent(this); foreach (var kvp in DATICHIWEEK) { var ICHIWEEK = kvp.Value; var cons_ichiweek = (IDataConsolidator)new QuoteBarConsolidator(CalendarTypee.Weekly); ICHIWEEK.ichi = new IchimokuKinkoHyo(CreateIndicatorName(ICHIWEEK.Symbol, "ICHIW", Resolution.Daily), RL1D); cons_ichiweek.DataConsolidated += (sender, baseData) => { var bar = (QuoteBar)baseData; ICHIWEEK.ichi.Update(bar); ICHIWEEK.Kijun.Add(ICHIWEEK.ichi.Kijun.Current.Value); }; SubscriptionManager.AddConsolidator(ICHIWEEK.Symbol, cons_ichiweek); } foreach (var kvp in DATICHIMONTH) { var ICHIMONTH = kvp.Value; var cons_ichimonth = (IDataConsolidator)new QuoteBarConsolidator(CalendarTypee.Monthly); ICHIMONTH.ichi = new IchimokuKinkoHyo(CreateIndicatorName(ICHIMONTH.Symbol, "ICHIM", Resolution.Daily), RL1D); cons_ichimonth.DataConsolidated += (sender, baseData) => { var bar = (QuoteBar)baseData; ICHIMONTH.ichi.Update(bar); ICHIMONTH.Kijun.Add(ICHIMONTH.ichi.Kijun.Current.Value); }; SubscriptionManager.AddConsolidator(ICHIMONTH.Symbol, cons_ichimonth); } foreach (var kvp in DATMINUTE) { var MINUTE = kvp.Value; var cons_bar_minute = (IDataConsolidator)new QuoteBarConsolidator(TSMINUTE); cons_bar_minute.DataConsolidated += (sender, baseData) => { var bar = (QuoteBar)baseData; MINUTE.B.Add(bar); }; SubscriptionManager.AddConsolidator(MINUTE.Symbol, cons_bar_minute); } foreach (var kvp in DATMONTH) { var MONTH = kvp.Value; var cons_bar_month = (IDataConsolidator)new QuoteBarConsolidator(TSDAILY); cons_bar_month.DataConsolidated += (sender, baseData) => { var bar = (QuoteBar)baseData; MONTH.B.Add(bar); }; SubscriptionManager.AddConsolidator(MONTH.Symbol, cons_bar_month); } foreach (var ICHIMONTH in DATICHIMONTH.Values) { foreach (var ICHIWEEK in DATICHIWEEK.Values) { PlotIndicator("ichi", ICHIWEEK.ichi, ICHIMONTH.ichi); }} //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 ICHIWEEK { public readonly Symbol Symbol; public readonly TimeSpan TSDAILY; public IchimokuKinkoHyo ichi; public readonly RollingWindow<decimal> Kijun; public ICHIWEEK(Symbol symbol, TimeSpan tsdaily, int RL1D) { Symbol = symbol; TSDAILY = tsdaily; Kijun = new RollingWindow<decimal>(RL1D); } public bool BQIsReady { get { return Kijun.IsReady ;} } public bool WasJustUpdated(DateTime current) { return Kijun.Count > 0 ; } } public class ICHIMONTH { public readonly Symbol Symbol; public readonly TimeSpan TSDAILY; public IchimokuKinkoHyo ichi; public readonly RollingWindow<decimal> Kijun; public ICHIMONTH(Symbol symbol, TimeSpan tsdaily, int RL1D) { Symbol = symbol; TSDAILY = tsdaily; Kijun = new RollingWindow<decimal>(RL1D); } public bool BQIsReady { get { return Kijun.IsReady ;} } public bool WasJustUpdated(DateTime current) { return Kijun.Count > 0 ; } } public class MINUTE { public readonly Symbol Symbol; public readonly RollingWindow<QuoteBar> B; public readonly TimeSpan TSMINUTE; public MINUTE(Symbol symbol, TimeSpan tsminute, int RL1m) { Symbol = symbol; TSMINUTE = tsminute; B = new RollingWindow<QuoteBar>(RL1m); } public bool BQIsReady { get { return B.IsReady ;} } public bool WasJustUpdated(DateTime current) { return B.Count > 0 && B[0].Time > (current - TimeSpan.FromSeconds(5)) - TSMINUTE && B[0].Time < (current + TimeSpan.FromSeconds(5)) - TSMINUTE ; } } public class MONTH { public readonly Symbol Symbol; public readonly RollingWindow<QuoteBar> B; public readonly TimeSpan TSDAILY; public MONTH(Symbol symbol, TimeSpan tsdaily, int RL1D) { Symbol = symbol; TSDAILY = tsdaily; B = new RollingWindow<QuoteBar>(RL1D); } public bool BQIsReady { get { return B.IsReady ;} } public bool WasJustUpdated(DateTime current) { return B.Count > 0 && B[0].EndTime > current - TimeSpan.FromSeconds(5) ; } } }
using QuantConnect.Securities; namespace QuantConnect { public partial class Base ///ONDATA { public class Alpha_SYMBOL_UP_S2 : AlphaModel { private readonly Symbol _symbol; private string SYMBOL = "CADJPY" ; 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.UtcTime - 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 MINUTE in DATMINUTE.Values) { foreach (var MONTH in DATMONTH.Values) { foreach (var ICHIWEEK in DATICHIWEEK.Values) { foreach (var ICHIMONTH in DATICHIMONTH.Values) { if ( ICHIWEEK.BQIsReady && ICHIMONTH.BQIsReady && MINUTE.BQIsReady && MONTH.BQIsReady && ICHIWEEK.WasJustUpdated(algorithm.Time) && ICHIMONTH.WasJustUpdated(algorithm.Time) && MINUTE.WasJustUpdated(algorithm.Time) && MONTH.WasJustUpdated(algorithm.Time) ) { DOWM_SYMBOL_UP_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Monday); DOWT_SYMBOL_UP_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Tuesday); DOWW_SYMBOL_UP_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Wednesday); DOWTH_SYMBOL_UP_S2 = (algorithm.UtcTime.DayOfWeek == DayOfWeek.Thursday); DOWR_SYMBOL_UP_S2 = DOWM_SYMBOL_UP_S2 || DOWT_SYMBOL_UP_S2 || DOWW_SYMBOL_UP_S2 || DOWTH_SYMBOL_UP_S2 || algorithm.UtcTime.DayOfWeek == DayOfWeek.Friday; if (MINUTE.Symbol.Equals(SYMBOL) && MONTH.Symbol.Equals(SYMBOL) && ICHIWEEK.Symbol.Equals(SYMBOL) && ICHIMONTH.Symbol.Equals(SYMBOL)) { if (Base.SYMBOL_OCO1_UP_S2_IsReady == false) { Base.SYMBOL_OCO1_UP_S2_Monthly_IsReady = false; } if (algorithm.Time == MONTH.B[0].EndTime) { Base.SYMBOL_OCO1_UP_S2_Monthly_IsReady = true; } Signal1: if ( ICHIWEEK.Kijun[0] - ICHIWEEK.Kijun[1] > MINUTE.B[0].Close * 0.0001m ) { SYMBOL_Signal_Condition_UP_1 = true ; SYMBOL_UP_S2_SL_1 = (ICHIWEEK.Kijun[0] - ICHIWEEK.Kijun[1])*50m; SYMBOL_UP_S2_TP1_1 = SYMBOL_UP_S2_SL_1 * 10m ; } if ( ICHIWEEK.Kijun[0] - ICHIWEEK.Kijun[1] < MINUTE.B[0].Close * 0.0001m ) { SYMBOL_Signal_Condition_UP_1 = false; } 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) { if (SYMBOL_UP_S2_SL_1 != 0) { SYMBOL_quantity_UP_S2_1 = (int)Math.Floor(algorithm.Portfolio.GetBuyingPower(MINUTE.Symbol, 0))/((algorithm.Portfolio.Securities.Count()))*0.2m; } SYMBOL_quantity_SL_UP_S2_1 = SYMBOL_quantity_UP_S2_1; SYMBOL_quantity_TP1_UP_S2_1 = (int)Math.Floor(SYMBOL_quantity_UP_S2_1 * 1m); Base.SYMBOL_OCO1_EO1_UP_S2 = true; yield return Insight.Price(MINUTE.Symbol, TimeSpan.FromMinutes(5), InsightDirection.Up, null, null, null, 1); SYMBOL_OCO1_MO1_UP_S2 = algorithm.MarketOrder(MINUTE.Symbol, SYMBOL_quantity_TP1_UP_S2_1, 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 int SYMBOL_OCO1_EO1_UP_S2_ID ; public static bool SYMBOL_OCO1_EO1_UP_S2 ; public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_UP_S2> SYMBOL_OOFE_OCO1_UP_S2_1 ; public static SYMBOL_OCO1_UP_S2 SYMBOL_PFO_OCO1_UP_S2_1 ; public static List<SYMBOL_OCO1_UP_S2> SYMBOL_UP_S2_OCO1Sets1 = 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 int SYMBOL_OCO1_EO1_DOWN_S2_ID ; public static bool SYMBOL_OCO1_EO1_DOWN_S2 ; public static Func<QCAlgorithm, string, decimal, decimal, SYMBOL_OCO1_DOWN_S2> SYMBOL_OOFE_OCO1_DOWN_S2_1 ; public static SYMBOL_OCO1_DOWN_S2 SYMBOL_PFO_OCO1_DOWN_S2_1 ; public static List<SYMBOL_OCO1_DOWN_S2> SYMBOL_DOWN_S2_OCO1Sets1 = 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; //////////////////////////// public static decimal SYMBOL_UP_S2_SL_1 {get; set;} public static decimal SYMBOL_UP_S2_TP1_1 {get; set;} public static decimal SYMBOL_DOWN_S2_SL_1 {get; set;} public static decimal SYMBOL_DOWN_S2_TP1_1 {get; set;} public static bool SYMBOL_Signal_Condition_UP_1 ; public static bool SYMBOL_Signal_Condition_DOWN_1 ; public static int SYMBOL_UP_S2_OCO_DELAY_7DAY = 43200; public static int SYMBOL_DOWN_S2_OCO_DELAY_7DAY = 43200; 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_1 ; public static decimal SYMBOL_quantity_SL_UP_S2_1 ; public static decimal SYMBOL_quantity_TP1_UP_S2_1 ; public static decimal SYMBOL_quantity_DOWN_S2_1 ; public static decimal SYMBOL_quantity_SL_DOWN_S2_1 ; public static decimal SYMBOL_quantity_TP1_DOWN_S2_1 ; } }
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 OCO1 CANCEL 2 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 (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_1,"TP1_SYMBOL_UP_S2_OCO1"), algo1.StopMarketOrder(orderEvent.Symbol, -orderEvent.Quantity, orderEvent.FillPrice - Base.SYMBOL_UP_S2_SL_1,"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; } 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; } } } } }
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 OCO1 CANCEL 2 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 (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_1,"SL_TP1_SYMBOL_DOWN_S2_OCO1"), algo1.LimitOrder(orderEvent.Symbol, -orderEvent.Quantity, orderEvent.FillPrice - Base.SYMBOL_DOWN_S2_TP1_1,"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; } 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; } } } } }
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; } }