public void OutOfFundsExceptionExits() { var env = new TestEnvironment(); SetEnv(env); var timer = new BinanceTimerProvider(new LoggerFactory(), new TestCandleDispenser()); _handleException(timer, new OutOfFundsException()); Assert.True(env.HasExited); Assert.Equal(env.Code, (int)ExitCode.OrderFailure); }
public void NestedExceptionsAreUnpacked() { var env = new TestEnvironment(); SetEnv(env); var timer = new BinanceTimerProvider(new LoggerFactory(), new TestCandleDispenser()); var exception = new Exception(string.Empty, new OrderRefusedException()); _handleException(timer, exception); Assert.True(env.HasExited); Assert.Equal(env.Code, (int)ExitCode.OrderFailure); }
public void GenericExceptionDoesNotExit() { var counterField = typeof(BinanceTimerProvider) .GetField("_consecutiveExceptions", BindingFlags.Instance | BindingFlags.NonPublic); var env = new TestEnvironment(); SetEnv(env); var timer = new BinanceTimerProvider(new LoggerFactory(), new TestCandleDispenser()); var countPre = counterField.GetValue(timer); Assert.Equal(0, countPre); _handleException(timer, new Exception()); Assert.False(env.HasExited); var countPost = counterField.GetValue(timer); Assert.Equal(1, countPost); }
/// <summary> /// Builds a container for Binance. /// </summary> /// <param name="config">The algorithm configuration to use.</param> /// <typeparam name="T">The algorithm type.</typeparam> /// <returns>ExchangeProviderContainer.</returns> public ExchangeProvidersContainer BuildBinanceContainer <T>(AlgorithmConfiguration config) where T : IBaseAlgorithm { // Makes sure that the communication is enabled _binanceCommunications.EnableStreams(); var timerProvider = new BinanceTimerProvider(_loggerFactory, _binanceCommunications.CandleDispenser); var dataImplementation = new BinanceDataProvider(_loggerFactory, _binanceCommunications, timerProvider); var tradingImplementation = new BinanceTradingProvider(_loggerFactory, _binanceCommunications, timerProvider); var dataProvider = new DataProvider(_loggerFactory, dataImplementation, config); var tradingProvider = new TradingProvider(_loggerFactory, tradingImplementation, dataProvider, _allocationManager); // Doubly linked data provider to check candles timerProvider.DataProvider = dataProvider; // Inject database event listener DatabaseEventListenerService.AddOrderSource(tradingProvider); return(new ExchangeProvidersContainer(_loggerFactory, dataProvider, timerProvider, tradingProvider, typeof(T))); }