Example #1
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;

				_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);
			}
Example #2
0
		public StudioConnector()
		{
			EntityFactory = new StorageEntityFactory(ConfigManager.GetService<IEntityRegistry>(), ConfigManager.GetService<IStorageRegistry>());

			_marketDataAdapter = new StudioMarketDataAdapter(TransactionIdGenerator);

			Adapter.InnerAdapters.Add(_marketDataAdapter);

			CreateEmulationSessionHolder();

			var cmdSvc = ConfigManager.GetService<IStudioCommandService>();

			cmdSvc.Register<LookupSecuritiesCommand>(this, false, cmd => LookupSecurities(cmd.Criteria));
			cmdSvc.Register<RequestTradesCommand>(this, false, cmd => new NewTradesCommand(Trades).Process(this));
			//cmdSvc.Register<RequestPortfoliosCommand>(this, cmd => Portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this)));
			cmdSvc.Register<RequestPositionsCommand>(this, false, cmd => Positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this)));
			cmdSvc.Register<RequestMarketDataCommand>(this, false, cmd => AddExport(cmd.Security, cmd.Type));
			cmdSvc.Register<RefuseMarketDataCommand>(this, false, cmd => RemoveExport(cmd.Security, cmd.Type));

			//NewPortfolios += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, true).Process(this));
			PortfoliosChanged += portfolios => portfolios.ForEach(pf => new PortfolioCommand(pf, false).Process(this));
			NewPositions += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, true).Process(this));
			PositionsChanged += positions => positions.ForEach(pos => new PositionCommand(CurrentTime, pos, false).Process(this));
			NewTrades += trades => new NewTradesCommand(trades).Process(this);
			NewNews += news => new NewNewsCommand(news).Process(this);
			LookupSecuritiesResult += securities => new LookupSecuritiesResultCommand(securities).Process(this);
			//LookupPortfoliosResult += portfolios => new LookupPortfoliosResultCommand(portfolios).Process(this);

			UpdateSecurityLastQuotes = false;
			UpdateSecurityByLevel1 = false;
		}