20 using System.Collections.Generic;
66 DataBySymbol = symbols.ToDictionary(symbol => symbol, symbol =>
new SymbolData(symbol, period));
67 var isTimezoneDifferent =
DataBySymbol.Values.Select(data => data.ExchangeTimeZone).Distinct().Count() > 1;
79 if (!
DataBySymbol.TryGetValue(input.Symbol, out var symbolData))
81 throw new ArgumentException($
"Input symbol {input.Symbol} does not correspond to any " +
82 $
"of the symbols this indicator works on ({string.Join(",
", DataBySymbol.Keys)})");
91 symbolData.CurrentInput = input;
94 if (
DataBySymbol.Values.Select(data => data.CurrentInputEndTimeUtc).Distinct().Count() == 1)
99 data.DataPoints.Add(data.CurrentInput);
132 private void SetResolution(TInput input)
134 var timeDifference = input.EndTime - input.Time;
135 var resolution = timeDifference.TotalHours > 1 ?
Resolution.Daily : timeDifference.ToHigherResolutionEquivalent(
false);
138 data.SetResolution(resolution);
139 if (symbol == input.Symbol)
141 data.CurrentInput = input;
153 private TInput _currentInput;
173 get => _currentInput;
176 _currentInput = value;
177 if (_currentInput !=
null)
180 NewInput?.Invoke(
this, _currentInput);
222 private DateTime AdjustDateToResolution(DateTime date)
229 return date.Date.AddHours(date.Hour);
231 return date.Date.AddHours(date.Hour).AddMinutes(date.Minute);
242 _resolution = resolution;