コード例 #1
0
        public async void ScheduleTradingEndWorkingEventAsync()
        {
            try
            {
                //We are after trading!
                if (EndTradingTimeLocal <= DateTime.Now)
                {
                    return;
                }
                //Raise event 1 minutes before trading end:
                var ms = (int)Math.Abs(EndTradingTimeLocal.Subtract(DateTime.Now).TotalMilliseconds) - 60000;

                await Task.Delay(ms, _cancellationTokenSource.Token);

                Trading60SecondsToEnd?.Invoke();

                await Task.Delay(30000, _cancellationTokenSource.Token);

                Trading30SecondsToEnd?.Invoke();

                //Raise event 2 secs before the end time to catch the trading in the middle!
                await Task.Delay(28000, _cancellationTokenSource.Token);

                TradingEnd?.Invoke();
            }
            // *** If cancellation is requested, an OperationCanceledException results.
            catch (OperationCanceledException)
            {
                Logger.Notice("ScheduleTradingEndWorkingEventAsync was canceled!!!");
            }
            catch (Exception ex1)
            {
                Logger.Error(ex1.Message, ex1);
            }
        }
コード例 #2
0
ファイル: UNLManager.cs プロジェクト: avneraz/RoboTrader
        private void AddTimeEventTask(ETradingTimeEventType eventType, int startTimeDelaySec = 0)
        {
            var tradingTimeEvent = new TradingTimeEvent(eventType);

            switch (eventType)
            {
            case ETradingTimeEventType.StartTrading:
                tradingTimeEvent.EventTime = startTimeDelaySec == 0 ? StartTradingTimeLocal : DateTime.Now.AddSeconds(startTimeDelaySec);

                break;

            case ETradingTimeEventType.EndTradingIn60Seconds:
                tradingTimeEvent.EventTime = EndTradingTimeLocal.AddSeconds(-60);
                break;

            case ETradingTimeEventType.EndTradingIn30Seconds:
                tradingTimeEvent.EventTime = EndTradingTimeLocal.AddSeconds(-30);
                break;

            case ETradingTimeEventType.EndTrading:
                tradingTimeEvent.EventTime = EndTradingTimeLocal;
                break;

            default:
                return;
            }
            //Verify task time is logical
            if (DateTime.Now >= tradingTimeEvent.EventTime)
            {
                return;
            }

            AddTradingTimeEvent(tradingTimeEvent);
            Logger.InfoFormat("{0}: Event Registration: ***** {1} ", Symbol, tradingTimeEvent);
        }