/// <summary> /// Создать <see cref="SmartComMessageAdapter"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public SmartComMessageAdapter(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { Version = SmartComVersions.V3; SecurityClassInfo.Add("OPT", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("OPTM", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("FUT", RefTuple.Create(SecurityTypes.Future, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("FXMFD", RefTuple.Create(SecurityTypes.Currency, ExchangeBoard.Mfd.Code)); SecurityClassInfo.Add("WFMFD", RefTuple.Create(SecurityTypes.Index, ExchangeBoard.Mfd.Code)); SecurityClassInfo.Add("WIMFD", RefTuple.Create(SecurityTypes.Index, ExchangeBoard.Mfd.Code)); SecurityClassInfo.Add("EQBR", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexEqbr.Code)); SecurityClassInfo.Add("TQBR", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexTqbr.Code)); SecurityClassInfo.Add("TQNE", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexTqne.Code)); SecurityClassInfo.Add("EQNE", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexEqne.Code)); SecurityClassInfo.Add("EQOB", RefTuple.Create(SecurityTypes.Bond, ExchangeBoard.MicexEqob.Code)); SecurityClassInfo.Add("EQNB", RefTuple.Create(SecurityTypes.Bond, ExchangeBoard.MicexEqnb.Code)); SecurityClassInfo.Add("EQDB", RefTuple.Create(SecurityTypes.Bond, ExchangeBoard.MicexEqdb.Code)); SecurityClassInfo.Add("EQOS", RefTuple.Create(SecurityTypes.Bond, ExchangeBoard.MicexEqos.Code)); SecurityClassInfo.Add("TQOB", RefTuple.Create(SecurityTypes.Bond, ExchangeBoard.MicexTqob.Code)); SecurityClassInfo.Add("TQLV", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexTqlv.Code)); PortfolioBoardCodes = new Dictionary <string, string> { { "EQ", ExchangeBoard.MicexEqbr.Code }, { "FOB", ExchangeBoard.MicexFbcb.Code }, { "RTS_FUT", ExchangeBoard.Forts.Code }, }; UpdatePlatform(); this.AddMarketDataSupport(); this.AddTransactionalSupport(); this.RemoveSupportedMessage(MessageTypes.OrderStatus); }
/// <summary> /// Создать <see cref="QuikSessionHolder"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public QuikSessionHolder(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { CreateTables(); IsAsyncMode = true; Path = QuikTerminal.GetDefaultPath(); SecurityClassInfo.Add("SPBOPT", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("SPBFUT", RefTuple.Create(SecurityTypes.Future, ExchangeBoard.Forts.Code)); // http://stocksharp.com/forum/yaf_postsm11628_Pozitsii-po-dierivativam.aspx#post11628 SecurityClassInfo.Add("OPTUX", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Ux.Code)); SecurityClassInfo.Add("FUTUX", RefTuple.Create(SecurityTypes.Future, ExchangeBoard.Ux.Code)); //SecurityClassInfo.Add("GTS", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.UxStock.Code)); // http://groups.google.ru/group/stocksharp/msg/28518b814c925521 SecurityClassInfo.Add("RTSST", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("QJSIM", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.MicexJunior.Code)); SecurityClassInfo.Add("RTSIDX", RefTuple.Create(SecurityTypes.Index, ExchangeBoard.Forts.Code)); UtcOffset = TimeHelper.Moscow.BaseUtcOffset; IsTransactionEnabled = true; IsMarketDataEnabled = true; }
/// <summary> /// Создать <see cref="SmartComSessionHolder"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public SmartComSessionHolder(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { Version = SmartComVersions.V3; IsTransactionEnabled = true; IsMarketDataEnabled = true; SecurityClassInfo.Add("OPT", new RefPair <SecurityTypes, string>(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("OPTM", new RefPair <SecurityTypes, string>(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("FUT", new RefPair <SecurityTypes, string>(SecurityTypes.Future, ExchangeBoard.Forts.Code)); }
/// <summary> /// Создать <see cref="AlfaDirectSessionHolder"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public AlfaDirectSessionHolder(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { SecurityClassInfo.Add("FORTS", new RefPair <SecurityTypes, string>(SecurityTypes.Stock, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("INDEX", new RefPair <SecurityTypes, string>(SecurityTypes.Index, ExchangeBoard.Micex.Code)); SecurityClassInfo.Add("INDEX2", new RefPair <SecurityTypes, string>(SecurityTypes.Index, "INDEX")); SecurityClassInfo.Add("MICEX_SHR_T", new RefPair <SecurityTypes, string>(SecurityTypes.Stock, ExchangeBoard.Micex.Code)); SecurityClassInfo.Add("RTS_STANDARD", new RefPair <SecurityTypes, string>(SecurityTypes.Stock, ExchangeBoard.Forts.Code)); IsTransactionEnabled = true; IsMarketDataEnabled = true; }
/// <summary> /// Создать <see cref="AlfaDirectMessageAdapter"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public AlfaDirectMessageAdapter(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { Platform = Platforms.x86; this.AddMarketDataSupport(); this.AddTransactionalSupport(); SecurityClassInfo.Add("FORTS", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("INDEX", RefTuple.Create(SecurityTypes.Index, ExchangeBoard.Micex.Code)); SecurityClassInfo.Add("INDEX2", RefTuple.Create(SecurityTypes.Index, "INDEX")); SecurityClassInfo.Add("MICEX_SHR_T", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.Micex.Code)); SecurityClassInfo.Add("RTS_STANDARD", RefTuple.Create(SecurityTypes.Stock, ExchangeBoard.Forts.Code)); }
internal string GetSecurityClass(SecurityTypes?secType, string boardName) { if (secType == null) { return(null); } if (boardName == ExchangeBoard.Forts.Code) { return(secType == SecurityTypes.Stock ? "RTS_STANDARD" : "FORTS"); } var kv = SecurityClassInfo.FirstOrDefault(kv2 => kv2.Value.First == secType && kv2.Value.Second == boardName); if (!kv.IsDefault()) { return(kv.Key); } return(null); }
/// <summary> /// Создать <see cref="SmartComMessageAdapter"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> public SmartComMessageAdapter(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { Version = SmartComVersions.V3; SecurityClassInfo.Add("OPT", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("OPTM", RefTuple.Create(SecurityTypes.Option, ExchangeBoard.Forts.Code)); SecurityClassInfo.Add("FUT", RefTuple.Create(SecurityTypes.Future, ExchangeBoard.Forts.Code)); PortfolioBoardCodes = new Dictionary <string, string> { { "EQ", ExchangeBoard.MicexEqbr.Code }, { "FOB", ExchangeBoard.MicexFbcb.Code }, { "RTS_FUT", ExchangeBoard.Forts.Code }, }; UpdatePlatform(); this.AddMarketDataSupport(); this.AddTransactionalSupport(); this.RemoveSupportedMessage(MessageTypes.OrderStatus); }
private void OnNewSecurity(int row, int rowCount, string smartId, string name, string secCode, string secClass, int decimals, int lotSize, decimal?stepPrice, decimal?priceStep, string isin, string board, DateTime?expiryDate, decimal?daysBeforeExpiry, decimal?strike) { //AMU: заглушка. 11.01.2013 обнаружил, что через SmartCom стали приходить инструменты (класс EQBR и FISS) с пустым secCode - "longName" в понятии АйтиИнвеста if (secCode.IsEmpty()) { secCode = smartId; } var securityId = new SecurityId { SecurityCode = secCode, BoardCode = board, Native = smartId, Isin = isin }; if (secClass.IsEmpty()) { secClass = board; } var secMsg = new SecurityMessage { PriceStep = priceStep, Decimals = decimals, Multiplier = lotSize, Name = name, ShortName = name, ExpiryDate = expiryDate?.ApplyTimeZone(TimeHelper.Moscow), ExtensionInfo = new Dictionary <object, object> { { "Class", secClass } }, OriginalTransactionId = _lookupSecuritiesId }; if (secClass.CompareIgnoreCase("IDX")) { secMsg.SecurityType = SecurityTypes.Index; switch (secMsg.SecurityId.BoardCode) { case "RUSIDX": securityId.BoardCode = secCode.ContainsIgnoreCase("MICEX") || secCode.ContainsIgnoreCase("MCX") ? ExchangeBoard.Micex.Code : ExchangeBoard.Forts.Code; break; //default: // security.Board = ExchangeBoard.Test; // break; } } else { var info = SecurityClassInfo.GetSecurityClassInfo(secClass); secMsg.SecurityType = info.Item1; securityId.BoardCode = info.Item2; // http://stocksharp.com/forum/yaf_postsm16847_Vopros-po-vystavlieniiu-zaiavok.aspx#post16847 if (ExchangeBoard.GetOrCreateBoard(info.Item2).IsMicex && /* проверяем, что не началась ли трансляция правильных дробных шагов */ secMsg.PriceStep != null && secMsg.PriceStep == (int)secMsg.PriceStep) { // http://stocksharp.com/forum/yaf_postsm21245_Sokhranieniie-stakanov-po-GAZP-EQNE.aspx#post21245 secMsg.PriceStep = 1m / 10m.Pow(secMsg.PriceStep.Value); } } secMsg.SecurityId = securityId; if (secMsg.SecurityType == SecurityTypes.Option) { var optionInfo = secMsg.Name.GetOptionInfo(ExchangeBoard.Forts); if (optionInfo != null) { // http://stocksharp.com/forum/yaf_postst1355_Exception-Change-Set-11052.aspx if (!secCode.IsEmpty()) { var futureInfo = optionInfo.UnderlyingSecurityId.GetFutureInfo(secCode, ExchangeBoard.Forts); if (futureInfo != null) { secMsg.UnderlyingSecurityCode = futureInfo.SecurityId.SecurityCode; } } secMsg.ExpiryDate = optionInfo.ExpiryDate; secMsg.OptionType = optionInfo.OptionType; secMsg.Strike = optionInfo.Strike; } } SendOutMessage(secMsg); if (stepPrice != null) { SendOutMessage( new Level1ChangeMessage { SecurityId = securityId, ServerTime = CurrentTime.Convert(TimeHelper.Moscow), } .TryAdd(Level1Fields.StepPrice, stepPrice.Value)); } if ((row + 1) < rowCount) { return; } SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = _lookupSecuritiesId }); _lookupSecuritiesId = 0; }
/// <summary> /// Инициализировать <see cref="QuikMessageAdapter"/>. /// </summary> /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param> protected QuikMessageAdapter(IdGenerator transactionIdGenerator) : base(transactionIdGenerator) { SecurityClassInfo.FillDefault(); }