/// <summary> /// Resets all data associated with running a day. /// </summary> private void ResetDayData() { DisposeTimer(); AlgoTraderState.CurrentDay = null; AlgoTraderState.WatchListBuilt = false; AlgoTraderState.WatchListBuilding = false; AlgoTraderState.PauseSim = false; AlgoTraderState.MinuteStopWatch.Reset(); AlgoTraderState.StocksDataUpdaterTC = null; AlgoTraderState.OrdersDataUpdaterTC = null; AlgoTraderState.LiveEstimatedNanoOffset = 0; // not positions, they should carry over to the next days //AlgoTraderShared.Positions.Clear(); //AlgoTraderShared.Orders.Clear(); //AlgoTraderShared.StrategyActions.Clear(); AlgoTraderShared.WatchList.Clear(); AlgoTraderShared.NodesData.Clear(); AlgoTraderShared.WatchListNodesData.Clear(); AlgoTraderShared.SimDayNodes.Clear(); AlgoTraderState.TradingManagerRunning = false; StocksDataUpdater.ResetDayData(); OrdersDataUpdater.ResetDayData(); TC.ClearChildren(); }
public static void UpdateHistoricalTicksByDay(List <string> symbols, FD fd, bool force, ThreadControl tc) { tc.Log.AddLine("Starting update histocial ticks by day", Verbosity.Minimal); ZonedDateTime ie = SystemClock.Instance.GetCurrentInstant().InZone(UCDT.TimeZones.Eastern); // safety precaution if (ie.Year == fd.DT.Year && ie.Month == fd.DT.Month && ie.Day == fd.DT.Day) { throw new Exception("What are you doing???"); } int parallelAPICalls = 15; if (!fd.IsOnWeekend()) { bool hasDataForDay = StockAPI.Methods.DateHasData(fd.DT.Year, fd.DT.Month, fd.DT.Day, force); if (hasDataForDay) { if (force) { tc.Log.AddLine("Forcing a historical update", Verbosity.Verbose); } else { tc.Log.AddLine("Date has data", Verbosity.Verbose); } tc.Log.AddLine("About to start API calls as fast as we can go", Verbosity.Minimal); symbols.Shuffle(); for (int s = 0; s < symbols.Count; s += parallelAPICalls) { //string[] syms = new string[parallelAPICalls]; lock (Global.State.ThreadControlTreeLock) { for (int m = 0; m < parallelAPICalls; m++) { if (m + s < symbols.Count) { string sym = symbols[m + s]; ThreadControl singleQuoteTC = new ThreadControl(fd.ToString() + " : " + sym); tc.Children.Add(singleQuoteTC); Task.Factory.StartNew(() => Methods.ThreadRun("AT.SchedulerMethods, AT", "UpdateSingleDayAndSingleSymbolTicks", singleQuoteTC, null, new object[] { sym, fd }), CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); } } } while (tc.Children.Exists(p => p.State != ThreadControlState.Complete && p.State != ThreadControlState.Done)) { } tc.ClearChildren(); tc.Log.AddLine("Done with small batch for " + fd.ToString() + ". About %" + Math.Round(((double)s / (double)symbols.Count) * (double)100, 2) + " done."); if (!tc.CheckNotStopped()) { tc.Log.AddLine("Breaking UpdateHistoricalTicksByDay!"); break; } } } else { tc.Log.AddLine("Not forcing and date does NOT have data for " + fd.ToString()); } } else { tc.Log.AddLine("Date is on weekend " + fd.ToString()); } }