/// <summary> /// Метод подписывает пользователя на получение новых значений Level1. /// Могут использовать только пользователи с ролями: "Level1", "Level2" и "Admin". /// </summary> /// <param name="security"></param> public static FaultException SubscribeLevel1(Connector connector, Security security, List<string> roles) { string[] rolesPermission = { "Level1", "Level2", "Admin" }; //Доступно ролям. if (rolesPermission.Intersect(roles).Any()) { if (security != null) { var criteria = new StockSharp.BusinessEntities.Security { Code = security.Ticker, Id = security.Code, Board = StockSharp.BusinessEntities.ExchangeBoard.Nyse }; //Регистрируем инструмент для получения Level1 connector.RegisterSecurity(criteria); Console.WriteLine("Register SECURITY {0}, {1}", connector.ConnectionState, connector.Id); } else { return new FaultException("Значение инструмента не может быть неопределенным."); } } else { return new FaultException("Level1 недоступен для этого аккаунта."); } return null; }
/// <summary> /// Метод отписывает пользователя от получения новых значений Level1. /// </summary> /// <param name="connector"></param> /// <param name="security"></param> /// <returns></returns> public static bool UnSubscribeLevel1(Connector connector, Security security) { if (security != null) { var criteria = new StockSharp.BusinessEntities.Security { Code = security.Ticker, Id = security.Code, Board = StockSharp.BusinessEntities.ExchangeBoard.Nyse }; //Отписываемся от получения новой информации по Level1 connector.UnRegisterSecurity(criteria); return true; } return false; }
/// <summary> /// Метод подписывает пользователя на получения новых значений по стакану. /// </summary> /// <param name="connector"></param> /// <param name="security"></param> /// <param name="roles"></param> /// <returns></returns> public static FaultException SubscribeLevel2(Connector connector, Security security, List<string> roles) { string[] rolesPermission = { "Level2", "Admin" }; //Доступно ролям. if (rolesPermission.Intersect(roles).Any()) { if (security != null) { connector.SubscribeMarketData((StockSharp.BusinessEntities.Security)security, StockSharp.Messages.MarketDataTypes.MarketDepth); Console.WriteLine("Level2 subscribed"); } else { return new FaultException("Значение инструмента не может быть неопределенным."); } } else { return new FaultException("Level2 недоступен для этого аккаунта."); } return null; }
/// <summary> /// Метод отписывает пользователя от получения новостей по указанному инструменту. /// </summary> /// <param name="connector"></param> /// <param name="security"></param> public static void UnSubscribeNews(Connector connector, Security security) { connector.UnSubscribeMarketData((StockSharp.BusinessEntities.Security)security, StockSharp.Messages.MarketDataTypes.News); }
/// <summary> /// Метод отписывает пользователя от получения новых значений по стакану. /// </summary> /// <param name="connector"></param> /// <param name="security"></param> /// <returns></returns> public static FaultException UnSubscribeLevel2(Connector connector, Security security) { if (security != null) { connector.UnSubscribeMarketData((StockSharp.BusinessEntities.Security)security, StockSharp.Messages.MarketDataTypes.MarketDepth); } else { return new FaultException("Значение инструмента не может быть неопределенным."); } return null; }
public void UnSubscribeMarketData(Security security, Entities.MarketDataTypes marketDataTypes) { switch(marketDataTypes) { case Entities.MarketDataTypes.Level1: UnSubscribeLevel1(_connector, security); //Отписываемся от получения Level1 по указанному инструменту break; case Entities.MarketDataTypes.News: UnSubscribeNews(_connector, security); break; case Entities.MarketDataTypes.Level2: UnSubscribeLevel2(_connector, security); break; } _connector.UnSubscribeMarketData((StockSharp.BusinessEntities.Security)security, (StockSharp.Messages.MarketDataTypes)marketDataTypes); }
/// <summary> /// Метод подписывается на получение рыночной информации /// </summary> /// <param name="security"></param> /// <param name="marketDataTypes"></param> public void SubscribeMarketData(Security security, Entities.MarketDataTypes marketDataTypes) { if (security == null) { Callback.OnError(new FaultException("Значение инструмента не может быть неопределенным.")); //Если объект инструмента не создан } else { FaultException result = null; var criteria = _context.Securities.Where(s => s.Ticker == security.Ticker).FirstOrDefault(); if (criteria != null) { switch (marketDataTypes) { case Entities.MarketDataTypes.Level1: result = SubscribeLevel1(_connector, criteria, _roles); //Подписываемся на получение Level1. if (result != null) Callback.OnError(result); break; case Entities.MarketDataTypes.News: SubscribeNews(_connector, criteria); //Подписываемся на новости. break; case Entities.MarketDataTypes.Level2: result = SubscribeLevel2(_connector, criteria, _roles); //Подписываемся на стакан. if (result != null) Callback.OnError(result); break; default: break; } } else { Callback.OnError(new FaultException("Инструмент не найден.")); //Если объект инструмента создан, но такого инструмента нет в базе. } } }
/// <summary> /// Метод возвращает исторические свечки с интервалом от секунды до месяца. Для ролей "Basic", "Level1" и "Level2" /// </summary> /// <param name="security">Инструмент</param> /// <param name="from">С какой даты и времени начинать закачку</param> /// <param name="to">До какой даты и времени закачивать</param> /// <param name="timeFrame">Таймфрем свечки</param> public void GetHistoricalCandles(Security security, DateTime from, DateTime to, TimeSpan timeFrame) { string[] roles = { "Basic", "Level1", "Level2", "Admin" }; //Доступно ролям if (roles.Intersect(_roles).Any()) //Доступно только ролям Basic и выше. { //var formatFrom = new DateTime(from.Year, from.Month, from.Day + 1, 9, 30, 00); //var formatTo = new DateTime(to.Year, to.Month, to.Day, 16, 00, 0) - timeFrame; ////var board = context.ExchangeBoards.FirstOrDefault(b => b.Id == security.ExchangeBoard.Id); var board = new StockSharp.BusinessEntities.ExchangeBoard(); var criteria = new StockSharp.BusinessEntities.Security { Code = security.Ticker, Id = security.Code, Board = board }; var requestCandlies = new RequestCandles { Security = criteria, Type = typeof(TimeFrameCandle), From = from, To = to, TimeFrame = timeFrame }; _listener.requestCandlesQueue.Enqueue(requestCandlies); } }