Пример #1
0
        public async Task <SelectedSymbolsChanges> UpdateAsync(TimeSlice slice)
        {
            if (NextSwapTime < Algo.Market.Time)
            {
                NextSwapTime = Algo.Market.Time + UpdatePeriod;

                var filtered = OnUpdate(slice);

                var removedSymbols =
                    (from sym in _SymbolsSelected.Values where !filtered.Any(s => s.Key == sym.Key) select sym)
                    .ToArray();
                var added = (from sym in filtered where !_SymbolsSelected.ContainsKey(sym.Key) select sym).ToArray();

                //remove unused symbols
                foreach (var sym in removedSymbols)
                {
                    _SymbolsSelected.Remove(sym.Key);
                }

                //add new symbols
                foreach (var sym in added)
                {
                    ISymbolFeed feed = await Algo.GetSymbolFeed(sym.Key);

                    _SymbolsSelected.Add(feed.Symbol.Key, feed.Symbol as SymbolInfo);
                }
                var retVal = new SelectedSymbolsChanges(added.ToArray(), removedSymbols.ToArray());
                return(retVal);
            }

            return(SelectedSymbolsChanges.None);
        }
Пример #2
0
 public void RaisePendingEvents(ISymbolFeed sender)
 {
     if (NewData.Count > 0)
     {
         foreach (var data in NewData)
         {
             OnData?.Invoke(this, data);
         }
         NewData.Clear();
     }
 }
Пример #3
0
 public static decimal Convert(AssetAmount amount, string targetAsset, ISymbolFeed feed)
 {
     if (amount.Asset == targetAsset)
     {
         return(amount.Amount);
     }
     if (feed == null)
     {
         throw new ArgumentException("No feed provieded for the conversion");
     }
     if (feed.Symbol.Asset == targetAsset && feed.Symbol.QuoteAsset == amount.Asset)
     {
         return(amount.Amount / (decimal)feed.Ask);
     }
     else if (feed.Symbol.QuoteAsset == targetAsset && feed.Symbol.Asset == amount.Asset)
     {
         return(amount.Amount * (decimal)feed.Bid);
     }
     else
     {
         throw new ArgumentException("The symbol feed is doesn't correspond to the assets pair");
     }
 }
Пример #4
0
 public void DisposeFeed(ISymbolFeed feed)
 {
     throw new NotImplementedException();
 }
Пример #5
0
 public void ReleaseFeed(ISymbolFeed feed)
 {
     Market.DisposeFeed(feed);
 }
Пример #6
0
 private void Feed_OnData(ISymbolFeed symFeed, IBaseData dataRecord)
 {
     //todo bisogna accertartci che i dati che riceviamo sono del giusto timeframe!
     lock (WorkingSliceLock)
         WorkingSlice.Add(symFeed.Symbol, dataRecord);
 }
Пример #7
0
 public void DisposeFeed(ISymbolFeed feed)
 {
 }
Пример #8
0
 private static void Feed_OnTick(ISymbolFeed obj)
 {
     Console.WriteLine($"Tick {obj.Ask} - {obj.Bid}");
 }