17 using System.Collections;
18 using System.Collections.Generic;
38 public static IEnumerable<TradeBars>
TradeBars(
this IEnumerable<Slice> slices)
40 return slices.Where(x => x.Bars.Count > 0).Select(x => x.Bars);
48 public static IEnumerable<Ticks>
Ticks(
this IEnumerable<Slice> slices)
50 return slices.Where(x => x.Ticks.Count > 0).Select(x => x.Ticks);
59 public static IEnumerable<DataDictionary<BaseDataCollection>>
GetUniverseData(
this IEnumerable<Slice> slices)
61 return slices.SelectMany(x => x.AllData).Select(x =>
75 public static IEnumerable<dynamic>
Get(
this IEnumerable<Slice> slices, Type type,
Symbol symbol =
null)
77 var result = slices.Select(x => x.Get(type));
84 return result.Where(x => x.ContainsKey(symbol)).Select(x => x[symbol]);
94 public static IEnumerable<TradeBar>
Get(
this IEnumerable<Slice> slices,
Symbol symbol)
96 return slices.TradeBars().Where(x => x.ContainsKey(symbol)).Select(x => x[symbol]);
110 return dataDictionaries.Where(x => x.ContainsKey(symbol)).Select(x => x[symbol]);
123 Func<T, decimal> selector;
124 if (typeof (
DynamicData).IsAssignableFrom(typeof (T)))
129 return (decimal) dyn.GetProperty(field);
132 else if (typeof (T) == typeof (List<Tick>))
137 selector = ticks => dataSelector(((List<Tick>) (
object) ticks).Last());
144 foreach (var dataDictionary
in dataDictionaries)
147 if (dataDictionary.TryGetValue(symbol, out item))
149 yield
return selector(item);
160 public static IEnumerable<DataDictionary<T>>
Get<T>(
this IEnumerable<Slice> slices)
163 return slices.Select(x => x.Get<T>()).Where(x => x.Count > 0);
173 public static IEnumerable<T>
Get<T>(
this IEnumerable<Slice> slices,
Symbol symbol)
176 return slices.Select(x => x.Get<T>()).Where(x => x.ContainsKey(symbol)).Select(x => x[symbol]);
187 public static IEnumerable<decimal>
Get(
this IEnumerable<Slice> slices,
Symbol symbol, Func<BaseData, decimal> field)
189 foreach (var slice
in slices)
192 if (slice.TryGetValue(symbol, out item))
194 if (item is List<Tick>) yield
return field(item.Last());
195 else yield
return field(item);
213 if (typeData.ContainsKey(symbol))
215 data = typeData[symbol];
233 var typeData = slice.
Get(type);
234 if (typeData.ContainsKey(symbol))
236 data = typeData[symbol];
250 return decimals.Select(x => (
double) x).ToArray();
259 public static void PushThroughConsolidators(
this IEnumerable<Slice> slices, Dictionary<Symbol, IDataConsolidator> consolidatorsBySymbol)
264 consolidatorsBySymbol.TryGetValue(symbol, out consolidator);
277 slices.PushThrough(data => consolidatorsProvider(data?.
Symbol)?.Update(data));
286 public static void PushThrough(
this IEnumerable<Slice> slices, Action<BaseData> handler)
288 foreach (var slice
in slices)
290 foreach (var symbol
in slice.Keys)
293 if (!slice.TryGetValue(symbol, out value))
298 var list = value as IList;
299 var data = (
BaseData)(list !=
null ? list[list.Count - 1] : value);