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); }
public void RaisePendingEvents(ISymbolFeed sender) { if (NewData.Count > 0) { foreach (var data in NewData) { OnData?.Invoke(this, data); } NewData.Clear(); } }
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"); } }
public void DisposeFeed(ISymbolFeed feed) { throw new NotImplementedException(); }
public void ReleaseFeed(ISymbolFeed feed) { Market.DisposeFeed(feed); }
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); }
public void DisposeFeed(ISymbolFeed feed) { }
private static void Feed_OnTick(ISymbolFeed obj) { Console.WriteLine($"Tick {obj.Ask} - {obj.Bid}"); }