示例#1
0
        private IReadOnlyCollection <string> ValidateQuote(MtQuoteMessage quote)
        {
            var errors = new List <string>();

            if (quote == null)
            {
                errors.Add("Argument 'Order' is null.");
            }
            else
            {
                if (string.IsNullOrEmpty(quote.Instrument))
                {
                    errors.Add("Empty 'Instrument'");
                }
                if (quote.Date.Kind != DateTimeKind.Utc)
                {
                    errors.Add($"Invalid 'Date' Kind (UTC is required): '{quote.Date.Kind}'");
                }
                if (_skipEodQuote && (quote?.IsEod ?? false))
                {
                    errors.Add($"Skipping EOD quote");
                }
            }

            return(errors);
        }
示例#2
0
        private async Task ProcessQuoteAsync(MtQuoteMessage quote)
        {
            try
            {
                var validationErrors = ValidateQuote(quote);
                if (validationErrors.Any())
                {
                    var message = string.Join("\r\n", validationErrors);
                    await _log.WriteWarningAsync(nameof(MtQuotesSubscriber), nameof(ProcessQuoteAsync), quote.ToJson(), message);

                    return;
                }

                await _candlesManager.ProcessMtQuoteAsync(new MtQuoteDto
                {
                    AssetPair = quote.Instrument,
                    Ask       = quote.Ask,
                    Bid       = quote.Bid,
                    Timestamp = quote.Date
                });
            }
            catch (Exception)
            {
                await _log.WriteWarningAsync(nameof(MtQuotesSubscriber), nameof(ProcessQuoteAsync), quote.ToJson(), "Failed to process quote");

                throw;
            }
        }