Beispiel #1
0
        public bool UpdateFromSecurityTypeMsg(IQMessageArgs args)
        {
            var fields = args.Message.Split(',');

            if (fields.Length >= 3)
            {
                int id;
                if (!int.TryParse(fields[0], out id))
                {
                    return(false);
                }

                SecurityType type;
                if (!Enum.TryParse(fields[1], true, out type))
                {
                    return(false);
                }

                if (!TryAdd(type, id))
                {
                    return(false);
                }

                return(Count >= ExpectedCount);
            }

            return(false);
        }
Beispiel #2
0
        // Result Format for HIX, HID, and HIT requests:
        //
        // +---------------+---------------------+
        // | Field         | Format              |
        // +---------------+---------------------+
        // | RequestID     | Text                |
        // | Timestamp     | CCYY-MM-DD HH:MM:SS |
        // | High          | decimal             |
        // | Low           | decimal             |
        // | Open          | decimal             |
        // | Close         | decimal             |
        // | Total Volume  | integer             |
        // | Period Volume | integer             |
        // +---------------+---------------------+
        //
        //
        // Result Format for HDX, HDT, HWX, and HMX requests:
        //
        // +---------------+---------------------+
        // | Field         | Format              |
        // +---------------+---------------------+
        // | RequestID     | Text                |
        // | Timestamp     | CCYY-MM-DD HH:MM:SS |
        // | High          | decimal             |
        // | Low           | decimal             |
        // | Open          | decimal             |
        // | Close         | decimal             |
        // | Period Volume | integer             |
        // | Open Interest | integer             |
        // +---------------+---------------------+

        public static void Parse(IQMessageArgs args, HistoryProviderSpan span, out HistoryMsg msg)
        {
            msg = new HistoryMsg();

            var isHitRequest = HistoryProviderSpan.Day > span;

            var fields = args.Message.Split(',');

            msg.Time  = IQFeedParser.ParseDateTime(fields[FIELD_TIME], "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd");
            msg.Time  = IQFeedParser.FromIQFeedTime(msg.Time) - span.ToTimeSpan(); // Переводим в нашу временную зону и сдвигаем все свечи на на величину периода, чтобы свечи были как везде
            msg.High  = IQFeedParser.ParseDecimal(fields[FIELD_HIGH]);
            msg.Low   = IQFeedParser.ParseDecimal(fields[FIELD_LOW]);
            msg.Open  = IQFeedParser.ParseDecimal(fields[FIELD_OPEN]);
            msg.Close = IQFeedParser.ParseDecimal(fields[FIELD_CLOSE]);
            if (isHitRequest)
            {
                msg.Volume       = IQFeedParser.ParseInt(fields[FIELD_VOLUME]);
                msg.OpenInterest = IQFeedParser.ParseInt(fields[FIELD_OPEN_INTEREST]);
            }
            else
            {
                msg.Volume       = IQFeedParser.ParseInt(fields[FIELD_VOLUME_HIT]);
                msg.OpenInterest = 0;
            }
        }
Beispiel #3
0
        public void UpdateFromL1SystemMsg(IQMessageArgs args)
        {
            var fields = args.Message.Split(',');

            for (var i = 1; i < fields.Length; i++)
            {
                this[fields[i]] = i - 1;
            }
        }
Beispiel #4
0
        public static void Parse(IQMessageArgs args, out L1FundamentalMsg msg)
        {
            msg = new L1FundamentalMsg();

            var fields = args.Message.Split(',');

            msg.Symbol         = fields[FIELD_SYMBOL];
            msg.DecimalPlaces  = IQFeedParser.ParseUint(fields[FIELD_DECIMAL_PLACES]);
            msg.PriceStep      = (decimal)(1.0 / (Math.Pow(10, msg.DecimalPlaces)));
            msg.PriceStepValue = null; // TODO
        }
Beispiel #5
0
        public static bool TryParse(IQMessageArgs args, L1FieldIndex index, out L1UpdateMsg msg)
        {
            string rawValue;

            msg = new L1UpdateMsg();
            var fields = args.Message.Split(',');

            #region Symbol
            if (!index.TryGetField(fields, FIELD_SYMBOL, out msg.Symbol))
            {
                return(false);
            }
            #endregion

            #region BestBidPrice
            if (!index.TryGetField(fields, FIELD_BID, out rawValue))
            {
                return(false);
            }
            msg.BestBidPrice = IQFeedParser.ParseDecimal(rawValue);
            #endregion

            #region BestOfferPrice
            if (!index.TryGetField(fields, FIELD_ASK, out rawValue))
            {
                return(false);
            }
            msg.BestOfferPrice = IQFeedParser.ParseDecimal(rawValue);
            #endregion

            #region BestBidQuantity
            if (!index.TryGetField(fields, FIELD_BID_SIZE, out rawValue))
            {
                return(false);
            }
            msg.BestBidQuantity = IQFeedParser.ParseLong(rawValue);
            #endregion

            #region BestOfferQuantity
            if (!index.TryGetField(fields, FIELD_ASK_SIZE, out rawValue))
            {
                return(false);
            }
            msg.BestOfferQuantity = IQFeedParser.ParseLong(rawValue);
            #endregion

            #region LastPrice
            if (!index.TryGetField(fields, FIELD_LAST, out rawValue))
            {
                return(false);
            }
            msg.LastPrice = IQFeedParser.ParseDecimal(rawValue);
            #endregion

            //msg.LastChangeTime = fields[16];

            #region Settlement

            if (!index.TryGetField(fields, FIELD_SETTLE, out rawValue))
            {
                return(false);
            }

            msg.Settlement = IQFeedParser.ParseDecimal(rawValue);

            #endregion

            #region PreviousSettlement

            if (!index.TryGetField(fields, FIELD_EXTENDED_TRADE, out rawValue))
            {
                return(false);
            }
            var extendedTrade = IQFeedParser.ParseDecimal(rawValue);

            if (!index.TryGetField(fields, FIELD_EXTENDED_TRADING_CHANGE, out rawValue))
            {
                return(false);
            }
            var extendedTradingChange = IQFeedParser.ParseDecimal(rawValue);

            // IQFeed API не выставляет наружу PreviousSettlement, но в документации есть два интересных поля:
            // | 37 | Extended Trading Change | float | IQFeed 4.9 | Extended Trade (field 76) minus Yesterday's close                                | Calculated by IQConnect.exe                         |
            // | 76 | Extended Trade          | float | IQFeed 5.0 | Price of the most recent extended trade (last qualified trades + Form T trades). | Provided by the exchange or 3rd party data provider |
            // Зная эти два поля, можно посчитать Yesterday's close, худо-бедно сойдет
            msg.PreviousSettlement = extendedTrade - extendedTradingChange;

            #endregion

            //msg.BottomPriceLimit
            //msg.TopPriceLimit

            //msg.Vola = ParseDecimal(fields[43]) * 100;

            //msg.Go
            //msg.LotSize
            //msg.PremiumStyle
            //msg.TheorPrice

            return(true);
        }