Exemple #1
0
 /// <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));
 }
Exemple #2
0
        /// <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));
            }
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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));
        }
Exemple #5
0
        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;
                }
            };
        }