Ejemplo n.º 1
0
        public void RequestHistoryData(string code, DateTime begin, DateTime end, HistoryProviderSpan span, string requestId)
        {
            var interval = span.ToTimeSpan();

            // Приводим begin и end к нормальному виду: переводим в правильную зону и округляем до периода
            begin = IQFeedParser.ToIQFeedTime(begin);
            begin = IQFeedParser.RoundDateTime(begin, interval);
            end   = IQFeedParser.ToIQFeedTime(end);
            end   = IQFeedParser.RoundDateTime(end, interval) + interval;

            string command;

            switch (span)
            {
            case HistoryProviderSpan.Minute:
                command = HistoryMessages.HIT(code, 60, begin, end, requestId);
                break;

            case HistoryProviderSpan.Minute5:
                command = HistoryMessages.HIT(code, 5 * 60, begin, end, requestId);
                break;

            case HistoryProviderSpan.Minute10:
                command = HistoryMessages.HIT(code, 10 * 60, begin, end, requestId);
                break;

            case HistoryProviderSpan.Minute15:
                command = HistoryMessages.HIT(code, 15 * 60, begin, end, requestId);
                break;

            case HistoryProviderSpan.Minute30:
                command = HistoryMessages.HIT(code, 30 * 60, begin, end, requestId);
                break;

            case HistoryProviderSpan.Hour:
                command = HistoryMessages.HIT(code, 3600, begin, end, requestId);
                break;

            case HistoryProviderSpan.Hour4:
                command = HistoryMessages.HIT(code, 4 * 3600, begin, end, requestId);
                break;

            case HistoryProviderSpan.Day:
                command = HistoryMessages.HDT(code, begin, end, requestId);
                break;

            case HistoryProviderSpan.Week:
                command = HistoryMessages.HWX(code, begin, end, requestId);
                break;

            case HistoryProviderSpan.Month:
                command = HistoryMessages.HMX(code, begin, end, requestId);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(span), span, null);
            }

            SendCommand(command);
        }
Ejemplo n.º 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;
            }
        }