/// <summary> /// Подстановка значений параметров в строку /// </summary> /// <param name="isStr">Исходная строка</param> /// <param name="ticker"></param> /// <param name="tf"></param> /// <param name="date1"></param> /// <param name="date2"></param> /// <returns>Результат</returns> private string ReplParams(string inStr, string ticker, Timeframes tf, DateTime date1, DateTime date2) { string outStr = inStr; TickerData tickerData = _tickers.FirstOrDefault(t => t.Ticker == ticker); TimeframeData tfData = _tfds.FirstOrDefault(t => t.Tf == tf); outStr = outStr.Replace("{TICKER}", ticker); outStr = outStr.Replace("{ID}", tickerData.ID); outStr = outStr.Replace("{Market}", tickerData.Market); outStr = outStr.Replace("{TfParam}", tfData.TfParam); outStr = outStr.Replace("{TFKey}", tfData.TfKey); outStr = outStr.Replace("{DATF}", tfData.Datf); outStr = outStr.Replace("{YYF}", date1.Date.Year.ToString().Substring(2, 2)); outStr = outStr.Replace("{MMF}", date1.Date.Month.ToString("0#")); outStr = outStr.Replace("{DDF}", date1.Date.Day.ToString("0#")); outStr = outStr.Replace("{YYT}", date2.Date.Year.ToString().Substring(2, 2)); outStr = outStr.Replace("{MMT}", date2.Date.Month.ToString("0#")); outStr = outStr.Replace("{DDT}", date2.Date.Day.ToString("0#")); outStr = outStr.Replace("{DF}", date1.Date.Day.ToString()); outStr = outStr.Replace("{MF}", date1.Date.Month.ToString()); outStr = outStr.Replace("{MF-1}", (date1.Date.Month - 1).ToString()); outStr = outStr.Replace("{DF-1}", (date1.Date.Day - 1).ToString()); outStr = outStr.Replace("{YYYYF}", date1.Date.Year.ToString()); outStr = outStr.Replace("{DT}", date2.Date.Day.ToString()); outStr = outStr.Replace("{MT}", date2.Date.Month.ToString()); outStr = outStr.Replace("{MT-1}", (date2.Date.Month - 1).ToString()); outStr = outStr.Replace("{DT-1}", (date2.Date.Day - 1).ToString()); outStr = outStr.Replace("{YYYYT}", date2.Date.Year.ToString()); return(outStr); }
public async Task Initialize() { _logger.LogInformation("Initialize."); _tfds.Clear(); _tickers.Clear(); try { XDocument xd = await LoadConfig(); if (xd == null) { return; } // timeframes var tfNodes = xd.Root.Element("Timeframes").Elements("Timeframe"); foreach (var tfNode in tfNodes) { var tfAttr = tfNode.Attribute("Tf"); var tfKeyAttr = tfNode.Attribute("TfKey"); var tfParamAttr = tfNode.Attribute("TfParam"); var datfAttr = tfNode.Attribute("Datf"); if (tfAttr == null || tfKeyAttr == null || tfParamAttr == null || datfAttr == null) { continue; } int tf; if (!Int32.TryParse(tfAttr.Value, out tf)) { continue; } TimeframeData tfd = new TimeframeData() { Tf = (Timeframes)tf, TfKey = tfKeyAttr.Value, TfParam = tfParamAttr.Value, Datf = datfAttr.Value }; _tfds.Add(tfd); } // tickers var tickerNodes = xd.Root.Element("Tickers").Elements("Ticker"); foreach (var tickerNode in tickerNodes) { var tickerAttr = tickerNode.Attribute("Ticker"); var shortNameAttr = tickerNode.Attribute("ShortName"); var nameAttr = tickerNode.Attribute("Name"); var lotSizeAttr = tickerNode.Attribute("LotSize"); var digitsAttr = tickerNode.Attribute("Digits"); var marketAttr = tickerNode.Attribute("Market"); var idAttr = tickerNode.Attribute("ID"); if (tickerAttr == null || shortNameAttr == null || marketAttr == null || idAttr == null || nameAttr == null || lotSizeAttr == null || digitsAttr == null) { continue; } int lotSize = 0; if (!Int32.TryParse(lotSizeAttr.Value, out lotSize)) { lotSize = 1; } byte digits = 0; if (!Byte.TryParse(digitsAttr.Value, out digits)) { digits = 0; } TickerData td = new TickerData() { Ticker = tickerAttr.Value, ShortName = shortNameAttr.Value, Name = nameAttr.Value, LotSize = lotSize, Digits = digits, Market = marketAttr.Value, ID = idAttr.Value }; _tickers.Add(td); } _baseUrl = xd.Root.Element("Url").Attribute("Base").Value; } catch (Exception ex) { _logger.LogError(ex, "Initialization error."); throw new Exception("Ошибка при инициализации провайдера исторических данных", ex); } }