17 using System.Collections.Generic;
20 using System.Reflection;
21 using System.Globalization;
55 private readonly HashSet<SubscriptionDataConfig> _subscriptionsBag;
60 internal bool IsInitialized {
get;
set; }
81 lock (_subscriptionsBag)
83 return _subscriptionsBag.ToList();
122 [Obsolete(
"This property is obsolete. Use the 'SubscriptionDataConfig' exposed by 'SubscriptionManager'")]
128 [Obsolete(
"This property is obsolete. Use the 'SubscriptionDataConfig' exposed by 'SubscriptionManager'")]
134 [Obsolete(
"This property is obsolete. Use the 'SubscriptionDataConfig' exposed by 'SubscriptionManager'")]
140 [Obsolete(
"This property is obsolete. Use the 'SubscriptionDataConfig' exposed by 'SubscriptionManager'")]
146 [Obsolete(
"This property returns only the first subscription. Use the 'Subscriptions' property for all of this security's subscriptions.")]
151 lock (_subscriptionsBag)
153 return _subscriptionsBag.FirstOrDefault();
349 registeredTypesProvider,
381 registeredTypesProvider,
409 if (symbolProperties ==
null)
420 _subscriptionsBag =
new ();
445 UpdateSubscriptionProperties();
485 registeredTypesProvider,
486 marginInterestRateModel
489 _subscriptionsBag.Add(config);
490 UpdateSubscriptionProperties();
510 if (_localTimeKeeper ==
null)
603 _localTimeKeeper = localTimeKeeper;
604 Exchange.SetLocalDateTimeFrontierProvider(localTimeKeeper);
614 if (data ==
null)
return;
617 UpdateMarketPrice(data);
628 public void Update(IReadOnlyList<BaseData> data,
Type dataType,
bool? containsFillForwardData =
null)
632 UpdateMarketPrice(data[data.Count - 1]);
638 [Obsolete(
"This method is obsolete. Use the 'SubscriptionDataConfig' exposed by" +
639 " 'SubscriptionManager' and the 'IsCustomData()' extension method")]
667 [Obsolete(
"This method is obsolete. Use the 'SubscriptionDataConfig' exposed by" +
668 " 'SubscriptionManager' and the 'SetDataNormalizationMode()' extension method")]
671 lock (_subscriptionsBag)
673 foreach (var subscription
in _subscriptionsBag)
675 subscription.DataNormalizationMode = mode;
677 UpdateSubscriptionProperties();
688 lock (_subscriptionsBag)
691 .Select(x => x.DataNormalizationMode)
859 throw new Exception($
"SetShortableProvider: {pyObject.Repr()} is not a valid argument");
892 throw new ArgumentException($
"SetDataFilter: {pyObject.Repr()} is not a valid argument");
906 #region DynamicObject Overrides and Helper Methods
911 public override bool TryGetMember(GetMemberBinder binder, out
object result)
919 public override bool TrySetMember(SetMemberBinder binder,
object value)
928 public override bool TryInvokeMember(InvokeMemberBinder binder,
object[] args, out
object result)
933 CultureInfo.InvariantCulture);
949 public void Add(
string key,
object value)
960 public void Set(
string key,
object value)
976 value = CastDynamicPropertyValue<T>(obj);
1016 value = CastDynamicPropertyValue<T>(objectValue);
1034 public object this[
string key]
1038 return Get<object>(key);
1066 lock (_subscriptionsBag)
1076 _subscriptionsBag.Add(subscription);
1077 UpdateSubscriptionProperties();
1087 lock (_subscriptionsBag)
1089 foreach (var subscription
in subscriptions)
1091 if (subscription.Symbol !=
Symbol)
1093 throw new ArgumentException(Messages.Security.UnmatchingSymbols, $
"{nameof(subscription)}.{nameof(subscription.Symbol)}");
1097 throw new ArgumentException(Messages.Security.UnmatchingExchangeTimeZones, $
"{nameof(subscription)}.{nameof(subscription.ExchangeTimeZone)}");
1099 _subscriptionsBag.Add(subscription);
1101 UpdateSubscriptionProperties();
1119 private void UpdateSubscriptionProperties()
1121 Resolution = _subscriptionsBag.Select(x => x.Resolution).DefaultIfEmpty(
Resolution.Daily).Min();
1130 private void UpdateMarketPrice(
BaseData data)
1142 private static T CastDynamicPropertyValue<T>(
object obj)
1145 var pyObj = obj as PyObject;
1150 value = pyObj.As<T>();
1164 internal void ApplySplit(
Split split)
1166 Cache.ApplySplit(split);
1173 internal virtual void UpdateSymbolProperties(
SymbolProperties symbolProperties)
1175 if (symbolProperties !=
null)
1187 IsInitialized =
false;
1191 lock (_subscriptionsBag)
1193 _subscriptionsBag.Clear();
1194 UpdateSubscriptionProperties();