Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private AsOfWrapper<decimal?> DetermineCossValue(CachePolicy cachePolicy)
- {
- OrderBook binanceEthBtcOrderBook = null;
- (decimal? UsdValue, DateTime? AsOfUtc) btcUsdValue = ((decimal?)null, (DateTime?)null);
- var binanceTask = LongRunningTask.Run(() =>
- {
- binanceEthBtcOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Binance, "ETH", "BTC", cachePolicy);
- });
- var cryptoCompareTask = LongRunningTask.Run(() =>
- {
- btcUsdValue = _cryptoCompareClient.GetUsdValueV2("BTC", cachePolicy);
- });
- var cossCossEthOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Coss, "COSS", "ETH", cachePolicy);
- var cossCossBtcOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Coss, "COSS", "BTC", cachePolicy);
- binanceTask.Wait();
- cryptoCompareTask.Wait();
- var binanceEthBtcBestAskPrice = binanceEthBtcOrderBook.BestAsk().Price;
- var binanceEthBtcBestBidPrice = binanceEthBtcOrderBook.BestBid().Price;
- var ethBtcRatio = new List<decimal> { binanceEthBtcBestAskPrice, binanceEthBtcBestBidPrice }.Average();
- decimal totalWeight = 0;
- decimal totalTop = 0;
- const decimal MinimumImportantQuantity = 1.0m;
- var btcAsks = cossCossBtcOrderBook.Asks.Where(item => item.Quantity >= MinimumImportantQuantity).OrderBy(item => item.Price).Take(3).ToList();
- for (var i = 0; i < btcAsks.Count; i++)
- {
- var order = btcAsks[i];
- var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
- var weight = quantitySqrt / ((i + 1) * (i + 1));
- totalTop += order.Price * weight;
- totalWeight += weight;
- }
- var btcBids = cossCossBtcOrderBook.Bids.Where(item => item.Quantity >= MinimumImportantQuantity).OrderByDescending(item => item.Price).Take(3).ToList();
- for (var i = 0; i < btcBids.Count; i++)
- {
- var order = btcBids[i];
- var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
- var weight = quantitySqrt / ((i + 1) * (i + 1));
- totalTop += order.Price * weight;
- totalWeight += weight;
- }
- var ethAsks = cossCossEthOrderBook.Asks.Where(item => item.Quantity >= MinimumImportantQuantity).OrderBy(item => item.Price).Take(3).ToList();
- for (var i = 0; i < ethAsks.Count; i++)
- {
- var order = ethAsks[i];
- var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
- var weight = quantitySqrt / ((i + 1) * (i + 1));
- totalTop += order.Price * weight * ethBtcRatio;
- totalWeight += weight;
- }
- var ethBids = cossCossEthOrderBook.Bids.Where(item => item.Quantity >= MinimumImportantQuantity).OrderByDescending(item => item.Price).Take(3).ToList();
- for (var i = 0; i < ethBids.Count; i++)
- {
- var order = ethBids[i];
- var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
- var weight = quantitySqrt / ((i + 1) * (i + 1));
- totalTop += order.Price * weight * ethBtcRatio;
- totalWeight += weight;
- }
- var cossBtcValuation = totalTop / totalWeight;
- var cossUsdValuation = cossBtcValuation * btcUsdValue.UsdValue.Value;
- var lastDate = new List<DateTime>
- {
- cossCossEthOrderBook.AsOf.Value,
- cossCossBtcOrderBook.AsOf.Value,
- btcUsdValue.AsOfUtc.Value,
- binanceEthBtcOrderBook.AsOf.Value
- }
- .OrderBy(item => item)
- .First();
- return new AsOfWrapper<decimal?> { Data = cossUsdValuation, AsOfUtc = lastDate };
- }
Add Comment
Please, Sign In to add comment