Example #1
0
			public StrategyConnector(StrategyContainer strategy, DateTimeOffset startDate, DateTimeOffset stopDate, TimeSpan useCandlesTimeFrame, bool onlyInitialize)
			{
				if (strategy == null)
					throw new ArgumentNullException(nameof(strategy));

				UpdateSecurityLastQuotes = false;
				UpdateSecurityByLevel1 = false;

				var entityRegistry = ConfigManager.GetService<IStudioEntityRegistry>();

				_strategy = strategy;
				_useCandlesTimeFrame = useCandlesTimeFrame;
				_onlyInitialize = onlyInitialize;
				_sessionStrategy = entityRegistry.ReadSessionStrategyById(strategy.Strategy.Id);

				if (_sessionStrategy == null)
					throw new InvalidOperationException("sessionStrategy = null");

				Id = strategy.Id;
				Name = strategy.Name + " Connector";

				_realConnector = (StudioConnector)ConfigManager.GetService<IStudioConnector>();
				_realConnector.NewMessage += RealConnectorNewMessage;

				_securityProvider = new StudioSecurityProvider();

				var storageRegistry = new StudioStorageRegistry { MarketDataSettings = strategy.MarketDataSettings };

				//EntityFactory = new StorageEntityFactory(entityRegistry, storageRegistry);

				Adapter.InnerAdapters.Add(_historyMessageAdapter = new HistoryMessageAdapter(TransactionIdGenerator, _securityProvider)
				{
					StartDate = startDate,
					StopDate = stopDate,
					StorageRegistry = storageRegistry
				});
				//_historyMessageAdapter.UpdateCurrentTime(startDate);
				var transactionAdapter = new PassThroughMessageAdapter(TransactionIdGenerator);
				transactionAdapter.AddTransactionalSupport();
				Adapter.InnerAdapters.Add(transactionAdapter);

				_historyMessageAdapter.MarketTimeChangedInterval = useCandlesTimeFrame;

				// при инициализации по свечкам, время меняется быстрее и таймаут должен быть больше 30с.
				ReConnectionSettings.TimeOutInterval = TimeSpan.MaxValue;

				//_historyMessageAdapter.BasketStorage.InnerStorages.AddRange(GetExecutionStorages());

				this.LookupById(strategy.Security.Id);

				new ChartAutoRangeCommand(true).Process(_strategy);
			}
                public StrategyEvents(SessionStrategy sessionStrategy, Action startTimer)
                {
                    if (sessionStrategy == null)
                    {
                        throw new ArgumentNullException(nameof(sessionStrategy));
                    }

                    if (startTimer == null)
                    {
                        throw new ArgumentNullException(nameof(startTimer));
                    }

                    _strategy        = sessionStrategy.Strategy;
                    _sessionStrategy = sessionStrategy;
                    _startTimer      = startTimer;

                    _executionRegistry = _sessionStrategy.GetExecutionStorage();

                    SubscribeEvents();
                }
Example #3
0
        public static void LoadState(this Strategy strategy, SessionStrategy sessionStrategy)
        {
            if (strategy == null)
            {
                throw new ArgumentNullException("strategy");
            }

            if (sessionStrategy == null)
            {
                throw new ArgumentNullException("sessionStrategy");
            }

            var storage = new SettingsStorage
            {
                { "Settings", sessionStrategy.Settings },
                { "Statistics", sessionStrategy.Statistics },
                { "Positions", sessionStrategy.Positions.Select(p => p.Position).ToList() },
            };

            strategy.SafeLoadState(storage);
        }
Example #4
0
            private void SessionStrategiesAdded(SessionStrategy sessionStrategy)
            {
                sessionStrategy.Positions.DelayAction = DelayAction;

                if (sessionStrategy.Strategy == null)
                {
                    sessionStrategy.Strategy             = sessionStrategy.StrategyInfo.CreateStrategy(sessionStrategy.SessionType);
                    sessionStrategy.Strategy.Strategy.Id = sessionStrategy.StrategyId.To <Guid>();

                    sessionStrategy.StrategyInfo.Strategies.Add(sessionStrategy.Strategy);
                }

                if (_session.Type == SessionType.Battle)
                {
                    ConfigManager
                    .GetService <IStrategyService>()
                    .InitStrategy(sessionStrategy.Strategy);

                    sessionStrategy.Strategy.LoadState(sessionStrategy);
                }

                SubscribeStrategyEvents(sessionStrategy);
            }
Example #5
0
            public StrategyConnector(StrategyContainer strategy, DateTimeOffset startDate, DateTimeOffset stopDate, TimeSpan useCandlesTimeFrame, bool onlyInitialize)
            {
                if (strategy == null)
                {
                    throw new ArgumentNullException("strategy");
                }

                UpdateSecurityLastQuotes = false;
                UpdateSecurityByLevel1   = false;

                var entityRegistry = ConfigManager.GetService <IStudioEntityRegistry>();

                _strategy            = strategy;
                _useCandlesTimeFrame = useCandlesTimeFrame;
                _onlyInitialize      = onlyInitialize;
                _sessionStrategy     = entityRegistry.ReadSessionStrategyById(strategy.Strategy.Id);

                if (_sessionStrategy == null)
                {
                    throw new InvalidOperationException("sessionStrategy = null");
                }

                Id   = strategy.Id;
                Name = strategy.Name + " Connector";

                _realConnector             = (StudioConnector)ConfigManager.GetService <IStudioConnector>();
                _realConnector.NewMessage += RealConnectorNewMessage;

                EntityFactory = new StudioConnectorEntityFactory();

                _securityProvider = new StudioSecurityProvider();

                var session = new HistorySessionHolder(TransactionIdGenerator, _securityProvider)
                {
                    StartDate = startDate,
                    StopDate  = stopDate,
                };

                session.UpdateCurrentTime(startDate);

                var storageRegistry = new StudioStorageRegistry {
                    MarketDataSettings = strategy.MarketDataSettings
                };

                MarketDataAdapter = _historyMessageAdapter = new HistoryMessageAdapter(session)
                {
                    StorageRegistry = storageRegistry
                };
                TransactionAdapter = new PassThroughMessageAdapter(session);

                _historyMessageAdapter.SessionHolder.MarketTimeChangedInterval = useCandlesTimeFrame;
                // при инициализации по свечкам, время меняется быстрее и таймаут должен быть больше 30с.
                _historyMessageAdapter.SessionHolder.ReConnectionSettings.TimeOutInterval = TimeSpan.MaxValue;

                _historyMessageAdapter.BasketStorage.InnerStorages.AddRange(GetExecutionStorages());

                ApplyMessageProcessor(MessageDirections.In, true, true);
                ApplyMessageProcessor(MessageDirections.Out, true, true);

                this.LookupById(strategy.Security.Id);

                new ChartAutoRangeCommand(true).Process(_strategy);
            }