Пример #1
0
        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);
        }
Пример #2
0
        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));
 }