Beispiel #1
0
        protected override void Execute(WorkerExecutionContext executionContext)
        {
            executionContext.ContinuationDelay = TimeSpan.Zero;
            SymbolInfo[] queue;

            lock (_queue)
            {
                if (_queue.Count == 0)
                {
                    Monitor.Wait(_queue, Settings.ContinuationDelay);
                }

                if (_queue.Count == 0)
                {
                    return;
                }

                queue = _queue.ToArray();
                _queue.Clear();
            }

            var quotes = _marketDataService.ToMarketData(queue);

            if (quotes.Count > 0)
            {
                _marketDataEvents.OnUpdate(quotes);
            }
        }
Beispiel #2
0
        //private bool _traceUpdateDataThread = false;

        protected override void Execute(WorkerExecutionContext executionContext)
        {
            if (_connection.CheckConnection(executionContext, pump: true) != ReturnCode.RET_OK)
            {
                return;
            }

            var cancellationToken = executionContext.CancellationToken;
            //if (_traceUpdateDataThread) m_ptrLogger.LogOk("Begin TradesGet");
            var openTrades = _connection.Api.TradesGet();

            //if (_traceUpdateDataThread) m_ptrLogger.LogOk($"End TradesGet: Count = {openTrades.Count}");

            foreach (var openTrade in openTrades)
            {
                cancellationToken.ThrowIfCancellationRequested();
                _host.OnTrade(_serverIndex, openTrade, (TransType)(-1));
            }

            //if (_traceUpdateDataThread) m_ptrLogger.LogOk("Begin MarginsGet");
            var marginLevels = _connection.Api.MarginsGet();

            //if (_traceUpdateDataThread) m_ptrLogger.LogOk($"End MarginsGet: Count = {marginLevels.Count}");

            foreach (var marginLevel in marginLevels)
            {
                cancellationToken.ThrowIfCancellationRequested();
                _host.OnMargin(_serverIndex, marginLevel);
            }
        }
        public ReturnCode CheckConnection(WorkerExecutionContext executionContext, bool pump = false)
        {
            // Check connection

            bool shouldConnect;

            if (_api == null)
            {
                _api          = _mt4Manager.CreateApi();
                shouldConnect = true;
            }
            else
            {
                shouldConnect = Ping() != ReturnCode.RET_OK;
            }

            // Connect

            if (shouldConnect)
            {
                var code = ConnectAndLogin();

                if (code != ReturnCode.RET_OK)
                {
                    executionContext.ContinuationDelay = ReconnectDelay;
                    return(code);
                }
            }

            if (pump && !_isPumpEnabled)
            {
                var code = RefreshSymbols(executionContext.CancellationToken);

                if (code != ReturnCode.RET_OK)
                {
                    LogError("Unable to enable pump because unable refresh symbols", code);
                    return(code);
                }

                code = Api.PumpingSwitchEx(OnPumpEx, 0);

                if (code != ReturnCode.RET_OK)
                {
                    LogError("Unable to enable pump because 'PumpingSwitchEx' method fails", code);
                    return(code);
                }

                _isPumpEnabled = true;
            }

            return(ReturnCode.RET_OK);
        }