/// <summary> /// Initialise the state. /// </summary> /// <param name="algorithmConfiguration">Configuration of the algorithm.</param> /// <param name="container">Exchange service container.</param> /// <returns>The state that the Run method yields.</returns> public State <T> Activate(T algorithmConfiguration, ExchangeProvidersContainer container) { Logger = container.LoggerFactory.CreateLogger(GetType()); AlgorithmConfiguration = algorithmConfiguration; _timerProvider = container.TimerProvider; return(Run(container.TradingProvider, container.DataProvider)); }
/// <summary> /// Initializes a new instance of the <see cref="StateManager{T}"/> class. /// Sets active state with an initial state and sets basic configuration. /// </summary> /// <param name="algorithmConfiguration">The configuration of the algorithm.</param> /// <param name="container">Exchange service container.</param> /// <param name="initial">The initial state.</param> public StateManager( T algorithmConfiguration, ExchangeProvidersContainer container, EntryState <T> initial) { lock (_lock) { // Setup logging _configuration = algorithmConfiguration; _container = container; _logger = container.LoggerFactory.CreateLogger(GetType()); // Setup observing _timerObserver = container.TimerProvider.Subscribe( new ConfigurableObserver <long>( () => { }, _ => { }, tick => { if (_activeState is null) { Activate(initial); } OnMarketConditionEval(); EvaluateStateTimer(); })); _tradingObserver = container.TradingProvider.Subscribe( new ConfigurableObserver <OrderUpdate>( () => { }, _ => { }, OnOrderUpdateEval)); } }
/// <summary> /// Initializes a new instance of the <see cref="BinanceDataProviderTests"/> class. /// </summary> /// <param name="outputHelper">Used to create output.</param> public BinanceDataProviderTests(ITestOutputHelper outputHelper) : base(outputHelper) { string source = $@" TradingPairs: [EOSETH] CandleWidth: {Configuration.Instance.CandleWidth} "; var config = ParseAlgorithmConfiguration(source); _container = ExchangeFactoryService.BuildBinanceContainer <TemplateAlgorithm>(config); }
/// <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)); }
public StateTests(ITestOutputHelper outputHelper) : base(outputHelper) { _container = ExchangeFactoryService.BuildBinanceContainer <TemplateAlgorithm>(AlgorithmConfiguration); var setTimerMethod = typeof(State <TemplateAlgorithmConfiguration>) .GetMethod("SetTimer", BindingFlags.NonPublic | BindingFlags.Instance); _setTimer = (state, timespan) => { try { setTimerMethod.Invoke(state, new object[] { timespan }); } catch (TargetInvocationException e) { throw e.InnerException; } }; }