public static IEnumerable <VolumePrice> GetAsks(OrderBook orderBook, AssetPair target)
        {
            Debug.Assert(orderBook != null);
            Debug.Assert(target != null);
            Debug.Assert(target.IsEqualOrInverted(orderBook.AssetPair));

            var bids = orderBook.Bids;
            var asks = orderBook.Asks;

            // Streight
            if (orderBook.AssetPair.Base == target.Base &&
                orderBook.AssetPair.Quote == target.Quote)
            {
                foreach (var ask in asks)
                {
                    yield return(ask);
                }
            }

            // Inverted
            if (orderBook.AssetPair.Base == target.Quote &&
                orderBook.AssetPair.Quote == target.Base)
            {
                foreach (var bid in bids)
                {
                    var ask = bid.Reciprocal();
                    yield return(ask);
                }
            }
        }
        public static SynthOrderBook FromOrderBook(OrderBook orderBook, AssetPair target)
        {
            Debug.Assert(orderBook != null);
            Debug.Assert(target != null);
            Debug.Assert(target.IsEqualOrInverted(orderBook.AssetPair));

            var result = new SynthOrderBook(target, new List <OrderBook> {
                orderBook
            });

            return(result);
        }