Beispiel #1
0
        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);
                    }
                }
            }
        }
Beispiel #2
0
        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);
            }
        }