Exemple #1
0
        internal void UpdateAssetValue(DomainObjects.Asset.Asset asset)
        {
            var lastUpdatedValue = LastAssetValue(asset.Id)?.Date ?? new DateTime(2017, 8, 17);

            if (lastUpdatedValue >= DateTime.UtcNow.Date)
            {
                return;
            }
            Dictionary <DateTime, double> assetDateAndValues = GetAssetValuesByDate(asset, lastUpdatedValue);

            CreateAssetValueForPendingDates(asset, lastUpdatedValue, assetDateAndValues);
        }
Exemple #2
0
        private static Dictionary <DateTime, double> GetAssetValuesByDate(DomainObjects.Asset.Asset asset, DateTime startDate)
        {
            Dictionary <DateTime, double> assetDateAndValues;

            if (asset.Type == DomainObjects.Asset.AssetType.Traditional.Value)
            {
                assetDateAndValues = AlphaVantageApi.GetCloseAdjustedValues(asset.Code);
            }
            else if (asset.Type == DomainObjects.Asset.AssetType.Crypto.Value)
            {
                assetDateAndValues = ExchangeApi.GetCloseCryptoValue(asset.Code, startDate);
            }
            else
            {
                throw new InvalidOperationException();
            }
            return(assetDateAndValues);
        }
Exemple #3
0
        private void CreateAssetValueForPendingDates(DomainObjects.Asset.Asset asset, DateTime lastUpdatedValue, Dictionary <DateTime, double> assetDateAndValues)
        {
            var pendingUpdate        = assetDateAndValues?.Where(d => d.Key > lastUpdatedValue).OrderBy(v => v.Key);
            var previousDateAndValue = assetDateAndValues?.Where(d => d.Key == lastUpdatedValue).OrderByDescending(v => v.Key).FirstOrDefault();

            if (pendingUpdate != null)
            {
                foreach (var pending in pendingUpdate)
                {
                    previousDateAndValue = InsertAssetValueForPreviousDaysWithoutMarketValues(asset, previousDateAndValue, pending);
                    var assetValue = new DomainObjects.Asset.AssetValue()
                    {
                        AssetId = asset.Id, Date = pending.Key, Value = pending.Value
                    };
                    Data.Insert(assetValue);
                }
            }
        }
Exemple #4
0
 private KeyValuePair <DateTime, double> InsertAssetValueForPreviousDaysWithoutMarketValues(DomainObjects.Asset.Asset asset, KeyValuePair <DateTime, double>?previousDateAndValue, KeyValuePair <DateTime, double> currentPendingDateAndValue)
 {
     if (previousDateAndValue.HasValue && previousDateAndValue?.Key > DateTime.MinValue)
     {
         var previousDate = previousDateAndValue?.Key.AddDays(1);
         while (previousDate < currentPendingDateAndValue.Key)
         {
             var previousAssetValue = new DomainObjects.Asset.AssetValue()
             {
                 AssetId = asset.Id, Date = previousDate.Value, Value = previousDateAndValue.Value.Value
             };
             Data.Insert(previousAssetValue);
             previousDate = previousDate.Value.AddDays(1);
         }
     }
     return(currentPendingDateAndValue);
 }