private void refreshTrades() { _logger.Info("refresh trade thread started"); var periods = new Periods { TradeStart = TimeSpan.FromHours(8.5), TradeEnd = TimeSpan.FromHours(17), FastWaitTime = TimeSpan.FromMilliseconds(500), SlowWaitTime = TimeSpan.FromSeconds(15) }; while (!_stop) { while (_pause) { Thread.Sleep(1000); } bool isHoliday = DateTime.Now.DayOfWeek == DayOfWeek.Friday || DateTime.Now.DayOfWeek == DayOfWeek.Thursday; bool isInTime = !isHoliday && DateTime.Now.TimeOfDay >= periods.TradeStart && DateTime.Now.TimeOfDay <= periods.TradeEnd; if (isInTime) { _engine.RefreshTradesAsync().Wait(); } if (isHoliday) { Thread.Sleep((int)TimeSpan.FromMinutes(10).TotalMilliseconds); } else { if (isInTime) { Thread.Sleep((int)periods.FastWaitTime.TotalMilliseconds); } else { Thread.Sleep((int)periods.SlowWaitTime.TotalMilliseconds); } } } }
private void refreshWorks() { _logger.Info("main thread started"); var periods = new Periods { RefreshInstruments = TimeSpan.FromMinutes(5), TradeStart = TimeSpan.FromHours(8.5), TradeEnd = TimeSpan.FromHours(17), RefreshObserverMessages = TimeSpan.FromSeconds(5), RefreshClosingPrices = TimeSpan.FromHours(23), RefreshCodalMessages = TimeSpan.FromMinutes(1), UpdateDayTradesStart = TimeSpan.FromHours(0), UpdateDayTradesEnd = TimeSpan.FromHours(6), UpdateDayTrades = TimeSpan.FromMinutes(5), FastWaitTime = TimeSpan.FromMilliseconds(500), SlowWaitTime = TimeSpan.FromSeconds(15), InTimeRefreshLiveStates = TimeSpan.FromMinutes(5), OutTimeRefreshLiveStates = TimeSpan.FromHours(1), RefreshIndexes = TimeSpan.FromMinutes(5) }; var lastUpdate = new LastUpdate { RefreshInstruments = DateTime.MinValue, RefreshClosingPrices = DateTime.MinValue, RefreshObserverMessages = DateTime.MinValue, RefreshCodalMessages = DateTime.MinValue, UpdateDayTrades = DateTime.MinValue, RefreshLiveStates = DateTime.MinValue, RefreshIndexes = DateTime.MinValue }; while (!_stop) { while (_pause) { Thread.Sleep(1000); } bool isHoliday = DateTime.Now.DayOfWeek == DayOfWeek.Friday || DateTime.Now.DayOfWeek == DayOfWeek.Thursday; bool isInTime = !isHoliday && DateTime.Now.TimeOfDay >= periods.TradeStart && DateTime.Now.TimeOfDay <= periods.TradeEnd; if (_options.EnableAll || _options.RefreshInstruments) { if (isInTime && DateTime.Now - lastUpdate.RefreshInstruments > periods.RefreshInstruments) { _logger.Trace("start refresh instruments"); AsyncHelper.RunSync(_engine.RefreshInstrumentsAsync); lastUpdate.RefreshInstruments = DateTime.Now; } } if (_options.EnableAll || _options.RefreshObserverMessages) { if (isInTime && DateTime.Now - lastUpdate.RefreshObserverMessages > periods.RefreshObserverMessages) { _logger.Trace("start refresh observer messages"); AsyncHelper.RunSync(_engine.RefreshObserverMessagesAsync); lastUpdate.RefreshObserverMessages = DateTime.Now; } } if (_options.EnableAll || _options.RefreshClosingPrices) { if (!isInTime && DateTime.Now - lastUpdate.RefreshClosingPrices > periods.RefreshClosingPrices) { _logger.Trace("start refresh closing prices"); AsyncHelper.RunSync(_engine.RefreshClosingPricesAsync); lastUpdate.RefreshClosingPrices = DateTime.Now; } } if (_options.EnableAll || _options.RefreshCodalMessages) { if (DateTime.Now - lastUpdate.RefreshCodalMessages > periods.RefreshCodalMessages) { _logger.Trace("start refresh codal messages"); AsyncHelper.RunSync(_engine.RefreshCodalMessagesAsync); lastUpdate.RefreshCodalMessages = DateTime.Now; } } if (_options.EnableAll || _options.UpdateDayTrades) { if ((isHoliday || (DateTime.Now.TimeOfDay > periods.UpdateDayTradesStart && DateTime.Now.TimeOfDay < periods.UpdateDayTradesEnd)) && DateTime.Now - lastUpdate.UpdateDayTrades > periods.UpdateDayTrades) { _logger.Trace("start refresh day trade details"); AsyncHelper.RunSync(() => _engine.UpdateDayTradesAsync(Settings.Default.UpdateDayTradesCount)); lastUpdate.UpdateDayTrades = DateTime.Now; } } if (_options.EnableAll || _options.RefreshLiveStates) { if (!isHoliday && ((isInTime && DateTime.Now - lastUpdate.RefreshLiveStates > periods.InTimeRefreshLiveStates) || (!isInTime && DateTime.Now - lastUpdate.RefreshLiveStates > periods.OutTimeRefreshLiveStates))) { _logger.Trace("start refresh day instrument live state"); AsyncHelper.RunSync(() => _engine.RefreshLiveStates(isInTime)); lastUpdate.RefreshLiveStates = DateTime.Now; } } if (_options.EnableAll || _options.RefreshIndexes) { if (!isHoliday && isInTime && DateTime.Now - lastUpdate.RefreshIndexes > periods.RefreshIndexes) { _logger.Trace("start refresh day indecies time data"); AsyncHelper.RunSync(_engine.RefreshIndexes); lastUpdate.RefreshIndexes = DateTime.Now; } } Thread.Sleep((int)periods.SlowWaitTime.TotalMilliseconds); } }