def parseResponse(self, body_buf):
        pos = 0

        # 算了,前面不解析了,没太大用
        # (market, code) = struct.unpack("<B9s", body_buf[0: 10])
        pos += 18
        (ret_count, ) = struct.unpack('<H', body_buf[pos:pos + 2])
        pos += 2

        klines = []

        for i in range(ret_count):
            year, month, day, hour, minute, pos = get_datetime(
                self.category, body_buf, pos)
            (open_price, high, low, close, position, trade,
             price) = struct.unpack("<ffffIIf", body_buf[pos:pos + 28])
            pos += 28
            kline = OrderedDict([
                ("open", open_price), ("high", high), ("low", low),
                ("close", close), ("position", position), ("trade", trade),
                ("price", price), ("year", year), ("month", month),
                ("day", day), ("hour", hour), ("minute", minute),
                ("datetime",
                 "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute))
            ])
            klines.append(kline)

        return klines
Пример #2
0
    def parseResponse(self, body_buf):
        pos = 0

        (ret_count, ) = struct.unpack("<H", body_buf[0:2])
        pos += 2

        klines = []

        pre_diff_base = 0
        for i in range(ret_count):
            year, month, day, hour, minute, pos = get_datetime(
                self.category, body_buf, pos)

            price_open_diff, pos = get_price(body_buf, pos)
            price_close_diff, pos = get_price(body_buf, pos)

            price_high_diff, pos = get_price(body_buf, pos)
            price_low_diff, pos = get_price(body_buf, pos)

            (vol_raw, ) = struct.unpack("<I", body_buf[pos:pos + 4])
            vol = get_volume(vol_raw)

            pos += 4
            (dbvol_raw, ) = struct.unpack("<I", body_buf[pos:pos + 4])
            dbvol = get_volume(dbvol_raw)
            pos += 4

            (up_count, down_count) = struct.unpack("<HH",
                                                   body_buf[pos:pos + 4])
            pos += 4

            open = self._cal_price1000(price_open_diff, pre_diff_base)

            price_open_diff = price_open_diff + pre_diff_base

            close = self._cal_price1000(price_open_diff, price_close_diff)
            high = self._cal_price1000(price_open_diff, price_high_diff)
            low = self._cal_price1000(price_open_diff, price_low_diff)

            pre_diff_base = price_open_diff + price_close_diff

            #### 为了避免python处理浮点数的时候,浮点数运算不精确问题,这里引入了多余的代码

            kline = OrderedDict([
                ("open", open), ("close", close), ("high", high), ("low", low),
                ("vol", vol), ("amount", dbvol), ("year", year),
                ("month", month), ("day", day), ("hour", hour),
                ("minute", minute),
                ("datetime",
                 "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute)),
                ("up_count", up_count), ("down_count", down_count)
            ])
            klines.append(kline)
        return klines
Пример #3
0
    def parseResponse(self, body_buf):
        pos = 0

        if len(body_buf) < 11:
            return []

        pos += 9 # skip 9
        (num, ) = struct.unpack("<H", body_buf[pos:pos+2])
        pos += 2

        rows = []
        for i in range(num):
            market, code = struct.unpack(u"<B6s", body_buf[:7])
            pos += 7
            # noused = struct.unpack(u"<B", body_buf[pos: pos+1])
            pos += 1 #skip a byte
            year, month, day, hour, minite, pos = get_datetime(9, body_buf, pos)
            (category, ) = struct.unpack(u"<B", body_buf[pos: pos+1])
            pos += 1



            # b'\x00\xe8\x00G' => 33000.00000
            # b'\x00\xc0\x0fF' => 9200.00000
            # b'\x00@\x83E' => 4200.0000

            panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack("<IIII", body_buf[pos: pos + 16])
            pos += 16

            def _get_v(v):
                if v == 0:
                    return 0
                else:
                    return get_volume(v)


            row = OrderedDict(
                [
                    ('year', year),
                    ('month', month),
                    ('day', day),
                    ('category', category),
                    ('panqianliutong', _get_v(panqianliutong_raw)),
                    ('panhouliutong', _get_v(panhouliutong_raw)),
                    ('qianzongguben', _get_v(qianzongguben_raw)),
                    ('houzongguben', _get_v(houzongguben_raw)),
                ]
            )
            rows.append(row)

        return rows
Пример #4
0
    def parseResponse(self, body_buf):
        pos = 0

        if len(body_buf) < 11:
            return []

        pos += 9  # skip 9
        (num, ) = struct.unpack("<H", body_buf[pos:pos + 2])
        pos += 2

        rows = []
        for i in range(num):
            market, code = struct.unpack(u"<B6s", body_buf[:7])
            pos += 7
            pos += 1  #skip a byte
            year, month, day, hour, minite, pos = get_datetime(
                9, body_buf, pos)
            pos += 1  #skip a byte

            # b'\x00\xe8\x00G' => 33000.00000
            # b'\x00\xc0\x0fF' => 9200.00000
            # b'\x00@\x83E' => 4200.0000

            cash_raw, peigu_price_raw, songgu_num_raw, peigu_percent_raw = struct.unpack(
                "<IIII", body_buf[pos:pos + 16])
            pos += 16

            def _get_v(v):
                if v == 0:
                    return 0
                else:
                    return get_volume(v)

            row = OrderedDict([
                ('year', year),
                ('month', month),
                ('day', day),
                ('cash', _get_v(cash_raw)),
                ('peigu_price', _get_v(peigu_price_raw)),
                ('songgu_num', _get_v(songgu_num_raw)),
                ('peigu_percent', _get_v(peigu_percent_raw)),
            ])
            rows.append(row)

        return rows
Пример #5
0
    def parseResponse(self, body_buf):
        pos = 0

        # 算了,前面不解析了,没太大用
        # (market, code) = struct.unpack("<B9s", body_buf[0: 10])
        pos += 18
        (ret_count, ) = struct.unpack('<H', body_buf[pos: pos+2])
        pos += 2

        klines = []

        for i in range(ret_count):
            year, month, day, hour, minute, pos = get_datetime(self.category, body_buf, pos)
            (open_price, high, low, close, position, trade, price) = struct.unpack("<ffffIIf", body_buf[pos: pos+28])
            (amount, ) = struct.unpack("f", body_buf[pos+16: pos+16+4])

            pos += 28
            kline = OrderedDict([
                ("open", open_price),
                ("high", high),
                ("low", low),
                ("close", close),
                ("position", position),
                ("trade", trade),
                ("price", price),
                ("year", year),
                ("month", month),
                ("day", day),
                ("hour", hour),
                ("minute", minute),
                ("datetime", "%d-%02d-%02d %02d:%02d" % (year, month, day, hour, minute)),
                ("amount", amount),
            ])

            klines.append(kline)

        return klines
Пример #6
0
    def parseResponse(self, body_buf):
        pos = 0

        if len(body_buf) < 11:
            return []

        pos += 9  # skip 9
        (num, ) = struct.unpack("<H", body_buf[pos:pos + 2])
        pos += 2

        rows = []

        def _get_v(v):
            if v == 0:
                return 0
            else:
                return get_volume(v)

        for i in range(num):
            market, code = struct.unpack(u"<B6s", body_buf[:7])
            pos += 7
            # noused = struct.unpack(u"<B", body_buf[pos: pos+1])
            pos += 1  #skip a byte
            year, month, day, hour, minite, pos = get_datetime(
                9, body_buf, pos)
            (category, ) = struct.unpack(u"<B", body_buf[pos:pos + 1])
            pos += 1

            # b'\x00\xe8\x00G' => 33000.00000
            # b'\x00\xc0\x0fF' => 9200.00000
            # b'\x00@\x83E' => 4200.0000

            suogu = None
            panqianliutong, panhouliutong, qianzongguben, houzongguben = None, None, None, None
            songzhuangu, fenhong, peigu, peigujia = None, None, None, None
            if category == 1:
                fenhong, peigujia, songzhuangu, peigu = struct.unpack(
                    "<ffff", body_buf[pos:pos + 16])
            elif category == 11:
                (_, _, suogu_raw, _) = struct.unpack("<IIII",
                                                     body_buf[pos:pos + 16])
                suogu = _get_v(suogu_raw)
            else:
                panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack(
                    "<IIII", body_buf[pos:pos + 16])
                panqianliutong = _get_v(panqianliutong_raw)
                panhouliutong = _get_v(panhouliutong_raw)
                qianzongguben = _get_v(qianzongguben_raw)
                houzongguben = _get_v(houzongguben_raw)

            pos += 16

            row = OrderedDict([
                ('year', year),
                ('month', month),
                ('day', day),
                ('category', category),
                ('fenhong', fenhong),
                ('peigujia', peigujia),
                ('songzhuangu', songzhuangu),
                ('peigu', peigu),
                ('suogu', suogu),
                ('panqianliutong', panqianliutong),
                ('panhouliutong', panhouliutong),
                ('qianzongguben', qianzongguben),
                ('houzongguben', houzongguben),
            ])
            rows.append(row)

        return rows
Пример #7
0
    def parseResponse(self, body_buf):
        pos = 0

        if len(body_buf) < 11:
            return []

        pos += 9 # skip 9
        (num, ) = struct.unpack("<H", body_buf[pos:pos+2])
        pos += 2

        rows = []

        def _get_v(v):
            if v == 0:
                return 0
            else:
                return get_volume(v)

        for i in range(num):
            market, code = struct.unpack(u"<B6s", body_buf[:7])
            pos += 7
            # noused = struct.unpack(u"<B", body_buf[pos: pos+1])
            pos += 1 #skip a byte
            year, month, day, hour, minite, pos = get_datetime(9, body_buf, pos)
            (category, ) = struct.unpack(u"<B", body_buf[pos: pos+1])
            pos += 1



            # b'\x00\xe8\x00G' => 33000.00000
            # b'\x00\xc0\x0fF' => 9200.00000
            # b'\x00@\x83E' => 4200.0000

            suogu = None
            panqianliutong, panhouliutong, qianzongguben, houzongguben = None, None, None, None
            songzhuangu, fenhong, peigu, peigujia = None, None, None, None
            fenshu, xingquanjia = None, None
            if category == 1:
                fenhong, peigujia, songzhuangu, peigu  = struct.unpack("<ffff", body_buf[pos: pos + 16])
            elif category in [11, 12]:
                (_, _, suogu, _) = struct.unpack("<IIfI", body_buf[pos: pos + 16])
            elif category in [13, 14]:
                xingquanjia, _, fenshu, _ = struct.unpack("<fIfI", body_buf[pos: pos + 16])
            else:
                panqianliutong_raw, qianzongguben_raw, panhouliutong_raw, houzongguben_raw = struct.unpack("<IIII", body_buf[pos: pos + 16])
                panqianliutong = _get_v(panqianliutong_raw)
                panhouliutong = _get_v(panhouliutong_raw)
                qianzongguben = _get_v(qianzongguben_raw)
                houzongguben = _get_v(houzongguben_raw)



            pos += 16

            row = OrderedDict(
                [
                    ('year', year),
                    ('month', month),
                    ('day', day),
                    ('category', category),
                    ('name', self.get_category_name(category)),
                    ('fenhong', fenhong),
                    ('peigujia', peigujia),
                    ('songzhuangu', songzhuangu),
                    ('peigu', peigu),
                    ('suogu', suogu),
                    ('panqianliutong', panqianliutong),
                    ('panhouliutong', panhouliutong),
                    ('qianzongguben', qianzongguben),
                    ('houzongguben', houzongguben),
                    ('fenshu', fenshu),
                    ('xingquanjia', xingquanjia)
                ]
            )
            rows.append(row)

        return rows