17 using System.Collections;
18 using System.Collections.Generic;
31 private readonly Dictionary<Type, Dictionary<Symbol, List<BaseData>>> _auxiliaryData =
new Dictionary<Type, Dictionary<Symbol, List<BaseData>>>();
98 Symbol = canonicalOptionSymbol;
118 public OptionChain(
Symbol canonicalOptionSymbol, DateTime time,
BaseData underlying, IEnumerable<BaseData> trades, IEnumerable<BaseData> quotes, IEnumerable<OptionContract> contracts, IEnumerable<Symbol> filteredContracts)
122 Symbol = canonicalOptionSymbol;
131 foreach (var trade
in trades)
133 var tick = trade as
Tick;
137 if (!
Ticks.TryGetValue(tick.Symbol, out ticks))
139 ticks =
new List<Tick>();
140 Ticks[tick.Symbol] = ticks;
152 foreach (var quote
in quotes)
154 var tick = quote as
Tick;
158 if (!
Ticks.TryGetValue(tick.Symbol, out ticks))
160 ticks =
new List<Tick>();
161 Ticks[tick.Symbol] = ticks;
173 foreach (var contract
in contracts)
188 Dictionary<Symbol, List<BaseData>> dictionary;
189 if (!_auxiliaryData.TryGetValue(typeof(T), out dictionary) || !dictionary.TryGetValue(symbol, out list))
193 return list.OfType<T>().LastOrDefault();
203 Dictionary<Symbol, List<BaseData>> d;
204 if (!_auxiliaryData.TryGetValue(typeof(T), out d))
209 foreach (var kvp
in d)
211 var item = kvp.Value.OfType<T>().LastOrDefault();
214 dictionary.Add(kvp.Key, item);
227 Dictionary<Symbol, List<BaseData>> dictionary;
228 if (!_auxiliaryData.TryGetValue(typeof(T), out dictionary))
230 return new Dictionary<Symbol, List<BaseData>>();
244 Dictionary<Symbol, List<BaseData>> dictionary;
245 if (!_auxiliaryData.TryGetValue(typeof(T), out dictionary) || !dictionary.TryGetValue(symbol, out list))
247 return new List<T>();
249 return list.OfType<T>().ToList();
269 IEnumerator IEnumerable.GetEnumerator()
299 internal void AddAuxData(
BaseData baseData)
301 var type = baseData.GetType();
302 Dictionary<Symbol, List<BaseData>> dictionary;
303 if (!_auxiliaryData.TryGetValue(type, out dictionary))
305 dictionary =
new Dictionary<Symbol, List<BaseData>>();
306 _auxiliaryData[type] = dictionary;
310 if (!dictionary.TryGetValue(baseData.
Symbol, out list))
312 list =
new List<BaseData>();
313 dictionary[baseData.
Symbol] = list;