20 using System.Collections;
21 using System.Collections.Generic;
36 protected enum ContractExpirationType :
int
53 protected ContractExpirationType
Type = ContractExpirationType.Standard;
64 internal IEnumerable<Symbol> AllSymbols;
78 AllSymbols = allSymbols;
80 Type = ContractExpirationType.Standard;
93 internal T ApplyTypesFilter()
96 var memoizedMap =
new Dictionary<DateTime, bool>();
98 Func<Symbol, bool> memoizedIsStandardType = symbol =>
100 var dt = symbol.ID.Date;
103 if (memoizedMap.TryGetValue(dt, out result))
106 memoizedMap[dt] = res;
111 AllSymbols = AllSymbols.Where(x =>
115 case ContractExpirationType.Weekly:
116 return !memoizedIsStandardType(x);
117 case ContractExpirationType.Standard:
118 return memoizedIsStandardType(x);
119 case ContractExpirationType.Standard | ContractExpirationType.Weekly:
134 public virtual void Refresh(IEnumerable<Symbol> allSymbols, DateTime localTime)
136 AllSymbols = allSymbols;
138 Type = ContractExpirationType.Standard;
148 Type = ContractExpirationType.Standard;
158 Type |= ContractExpirationType.Weekly;
168 Type = ContractExpirationType.Weekly;
178 var ordered = this.OrderBy(x => x.ID.Date).ToList();
179 if (ordered.Count == 0)
return (T)
this;
180 var frontMonth = ordered.TakeWhile(x => ordered[0].ID.Date == x.ID.Date);
182 AllSymbols = frontMonth.ToList();
192 var ordered = this.OrderBy(x => x.ID.Date).ToList();
193 if (ordered.Count == 0)
return (T)
this;
194 var backMonths = ordered.SkipWhile(x => ordered[0].ID.Date == x.ID.Date);
196 AllSymbols = backMonths.ToList();
217 public virtual T
Expiration(TimeSpan minExpiry, TimeSpan maxExpiry)
226 var minExpiryToDate =
LocalTime.Date + minExpiry;
227 var maxExpiryToDate =
LocalTime.Date + maxExpiry;
229 AllSymbols = AllSymbols
230 .Where(symbol => symbol.ID.Date.Date >= minExpiryToDate && symbol.ID.Date.Date <= maxExpiryToDate)
246 return Expiration(TimeSpan.FromDays(minExpiryDays), TimeSpan.FromDays(maxExpiryDays));
257 AllSymbols = contracts.ConvertToSymbolEnumerable();
269 AllSymbols = contracts.ToList();
279 public T
Contracts(Func<IEnumerable<Symbol>, IEnumerable<Symbol>> contractSelector)
282 AllSymbols = contractSelector(AllSymbols).ToList();
291 [Obsolete(
"Deprecated as of 2023-12-13. Filters are always non-dynamic as of now, which means they will only bee applied daily.")]
303 return AllSymbols.GetEnumerator();
309 IEnumerator IEnumerable.GetEnumerator()
311 return AllSymbols.GetEnumerator();