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(); }
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); }
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); }
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); }