コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
        /// <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;
        }
コード例 #5
0
        /// <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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
        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;
        }
コード例 #9
0
 /// <summary>
 /// Инициализировать <see cref="QuikMessageAdapter"/>.
 /// </summary>
 /// <param name="transactionIdGenerator">Генератор идентификаторов транзакций.</param>
 protected QuikMessageAdapter(IdGenerator transactionIdGenerator)
     : base(transactionIdGenerator)
 {
     SecurityClassInfo.FillDefault();
 }