/// <inheritdoc /> public ResponseObject Start(AlgorithmConfiguration configuration, ExchangeProvidersContainer container) { Guard.Argument(configuration).Require( x => x is T, x => $"{x} cannot not be converted to {typeof(T)}, please make sure to use the correct AlgorithmConfiguration"); StateManager = new StateManager <T>(configuration as T, container, Initial); // Add state switch tracking DatabaseEventListenerService.AddStateSource(StateManager); container.TimerProvider.RunPeriodicTimer(); return(new ResponseObject(ResponseCode.Success)); }
/// <summary> /// Cause the Main() to return with a given status code. /// </summary> /// <param name="exitCode">Reason for termination.</param> /// <returns>Exits before returning the exit code.</returns> public static int ExitProgramWithCode(ExitCode exitCode) { // Flush the logs by disposing the factory _loggerFactory?.Dispose(); if (exitCode != ExitCode.Success) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"----------------------------------"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"Exiting program with code {exitCode}"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"----------------------------------"); } DatabaseEventListenerService.CloseSession(exitCode); Env.ExitEnvironment((int)exitCode); return((int)exitCode); }
/// <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))); }