private void OnStartZoneRecovery() { if (ZRCalculator == null) { ZRCalculator = new Calculator(); } try { //TODO Add all checks to see if all the necessary conditions are met... decimal ask = 0, bid = 0; Dictionary <string, decimal> dict = new Dictionary <string, decimal>(); if (Decimal.TryParse(_view.Ask, out ask) && Decimal.TryParse(_view.Bid, out bid)) { dict.Add("Ask", ask); dict.Add("Bid", bid); } if (ask <= 0 || bid <= 0) { throw new Exception($"OnStartZoneRecovery: Bid or Ask not consistent"); } else { ZRCalculator.UpdatePrices(dict); } if (_communicatorA != null && _communicatorB != null) { var WalletBalance = GetTotalBalance(); var stats = _orderBookStatsComputer.GetStats(); ZRCalculator.Initialize( bitmexApiServiceA, bitmexApiServiceB, WalletBalance, _orderStatsHandler.GetOrderDictionary(), _posStatsHandler.GetPositionDictionary(), PositionStatsMutex, "XBTUSD", (int)_view.MaxDepth, _view.ZoneSize, _view.MaxExposure, _view.Leverage, _view.MinProfit); CalculatorEnabled = true; } else { throw new Exception($"OnStartZoneRecovery: Communicators are null"); } // Start... ZRCalculator.SwitchedOn = true; ZRCalculator.Evaluate(); } catch (Exception exc) { Log.Error(exc.Message); Console.WriteLine(exc.Message); CalculatorEnabled = false; } }
private void HandleOrderBook(BookResponse response) { _orderBookStatsComputer.HandleOrderBook(response); var stats = _orderBookStatsComputer.GetStats(); if (stats == OrderBookStats.NULL) { return; } _view.Bid = stats.Bid.ToString("#.0"); _view.Ask = stats.Ask.ToString("#.0"); _view.BidAmount = $"{stats.BidAmountPerc:###}%{Environment.NewLine}{FormatToMilions(stats.BidAmount)}"; _view.AskAmount = $"{stats.AskAmountPerc:###}%{Environment.NewLine}{FormatToMilions(stats.AskAmount)}"; }