public async Task <IEnumerable <OrderBookResult> > BuildOrderBook() { var assetPairs = (await _assetPairsRepository.GetAllAsync()).ToDictionary(itm => itm.Id); var limitOrders = await _activeLimitOrdersRepository.GetAsync(); var result = new Dictionary <string, OrderBookResult>(); foreach (var limitOrder in limitOrders) { if (!assetPairs.ContainsKey(limitOrder.AssetPairId)) { continue; } var assetPair = assetPairs[limitOrder.AssetPairId]; if (!result.ContainsKey(limitOrder.AssetPairId)) { result.Add(limitOrder.AssetPairId, OrderBookResult.Create(assetPair)); } var orderbook = result[limitOrder.AssetPairId]; orderbook.AddLimitOrder(limitOrder); } return(result.Values); }
public async Task <IEnumerable <ConversionResult> > GetMarketAmountInBase(IEnumerable <AssetWithAmount> from, string assetIdTo, OrderAction orderAction) { var limitOrdersTask = _activeLimitOrdersRepository.GetAsync(); var assetsDictTask = _assetsDict.GetDictionaryAsync(); var assetPairsTask = _assetPairsDict.Values(); var marketProfileTask = _bestPriceRepository.GetAsync(); var limitOrders = await limitOrdersTask; var assetsDict = await assetsDictTask; var assetPairs = await assetPairsTask; var marketProfile = await marketProfileTask; return(@from.Select(item => GetMarketAmountInBase(orderAction, limitOrders, item, assetIdTo, assetsDict, assetPairs, marketProfile))); }
public static async Task <IEnumerable <ILimitOrder> > GetAsync(this IActiveLimitOrdersRepository repo, string assetPair, OrderAction action) { return((await repo.GetAsync(assetPair)).Where(x => action == OrderAction.Buy ? x.Volume > 0 : x.Volume < 0)); }