Guest User

Untitled

a guest
Jan 20th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. private AsOfWrapper<decimal?> DetermineCossValue(CachePolicy cachePolicy)
  2. {
  3. OrderBook binanceEthBtcOrderBook = null;
  4. (decimal? UsdValue, DateTime? AsOfUtc) btcUsdValue = ((decimal?)null, (DateTime?)null);
  5.  
  6. var binanceTask = LongRunningTask.Run(() =>
  7. {
  8. binanceEthBtcOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Binance, "ETH", "BTC", cachePolicy);
  9. });
  10.  
  11. var cryptoCompareTask = LongRunningTask.Run(() =>
  12. {
  13. btcUsdValue = _cryptoCompareClient.GetUsdValueV2("BTC", cachePolicy);
  14. });
  15.  
  16. var cossCossEthOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Coss, "COSS", "ETH", cachePolicy);
  17. var cossCossBtcOrderBook = _exchangeClient.GetOrderBook(IntegrationNameRes.Coss, "COSS", "BTC", cachePolicy);
  18.  
  19. binanceTask.Wait();
  20. cryptoCompareTask.Wait();
  21.  
  22. var binanceEthBtcBestAskPrice = binanceEthBtcOrderBook.BestAsk().Price;
  23. var binanceEthBtcBestBidPrice = binanceEthBtcOrderBook.BestBid().Price;
  24.  
  25. var ethBtcRatio = new List<decimal> { binanceEthBtcBestAskPrice, binanceEthBtcBestBidPrice }.Average();
  26.  
  27. decimal totalWeight = 0;
  28. decimal totalTop = 0;
  29.  
  30. const decimal MinimumImportantQuantity = 1.0m;
  31.  
  32. var btcAsks = cossCossBtcOrderBook.Asks.Where(item => item.Quantity >= MinimumImportantQuantity).OrderBy(item => item.Price).Take(3).ToList();
  33. for (var i = 0; i < btcAsks.Count; i++)
  34. {
  35. var order = btcAsks[i];
  36. var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
  37. var weight = quantitySqrt / ((i + 1) * (i + 1));
  38.  
  39. totalTop += order.Price * weight;
  40. totalWeight += weight;
  41. }
  42.  
  43. var btcBids = cossCossBtcOrderBook.Bids.Where(item => item.Quantity >= MinimumImportantQuantity).OrderByDescending(item => item.Price).Take(3).ToList();
  44. for (var i = 0; i < btcBids.Count; i++)
  45. {
  46. var order = btcBids[i];
  47. var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
  48. var weight = quantitySqrt / ((i + 1) * (i + 1));
  49.  
  50. totalTop += order.Price * weight;
  51. totalWeight += weight;
  52. }
  53.  
  54. var ethAsks = cossCossEthOrderBook.Asks.Where(item => item.Quantity >= MinimumImportantQuantity).OrderBy(item => item.Price).Take(3).ToList();
  55. for (var i = 0; i < ethAsks.Count; i++)
  56. {
  57. var order = ethAsks[i];
  58. var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
  59. var weight = quantitySqrt / ((i + 1) * (i + 1));
  60.  
  61. totalTop += order.Price * weight * ethBtcRatio;
  62. totalWeight += weight;
  63. }
  64.  
  65. var ethBids = cossCossEthOrderBook.Bids.Where(item => item.Quantity >= MinimumImportantQuantity).OrderByDescending(item => item.Price).Take(3).ToList();
  66. for (var i = 0; i < ethBids.Count; i++)
  67. {
  68. var order = ethBids[i];
  69. var quantitySqrt = (decimal)Math.Sqrt((double)order.Quantity);
  70. var weight = quantitySqrt / ((i + 1) * (i + 1));
  71.  
  72. totalTop += order.Price * weight * ethBtcRatio;
  73. totalWeight += weight;
  74. }
  75.  
  76. var cossBtcValuation = totalTop / totalWeight;
  77. var cossUsdValuation = cossBtcValuation * btcUsdValue.UsdValue.Value;
  78.  
  79. var lastDate = new List<DateTime>
  80. {
  81. cossCossEthOrderBook.AsOf.Value,
  82. cossCossBtcOrderBook.AsOf.Value,
  83. btcUsdValue.AsOfUtc.Value,
  84. binanceEthBtcOrderBook.AsOf.Value
  85. }
  86. .OrderBy(item => item)
  87. .First();
  88.  
  89. return new AsOfWrapper<decimal?> { Data = cossUsdValuation, AsOfUtc = lastDate };
  90. }
Add Comment
Please, Sign In to add comment