示例#1
0
    def query_bar(self, symbol: str, exchange: Exchange, interval: Interval,
                  start: datetime, end: datetime):
        """
        Query bar data from RQData.
        """
        rq_symbol = self.to_rq_symbol(symbol, exchange)
        if rq_symbol not in self.symbols:
            return None

        end += timedelta(1)  # For querying night trading period data

        df = rqdata_get_price(
            rq_symbol,
            frequency=interval.value,
            fields=["open", "high", "low", "close", "volume"],
            start_date=start,
            end_date=end)

        data: List[BarData] = []
        for ix, row in df.iterrows():
            bar = BarData(symbol=symbol,
                          exchange=exchange,
                          interval=interval,
                          datetime=row.name.to_pydatetime(),
                          open_price=row["open"],
                          high_price=row["high"],
                          low_price=row["low"],
                          close_price=row["close"],
                          volume=row["volume"],
                          gateway_name="RQ")
            data.append(bar)

        return data
示例#2
0
文件: rqdata.py 项目: you285168/vnpy
    def init(self, username: str = "", password: str = "") -> bool:
        """"""
        if self.inited:
            return True

        if username and password:
            self.username = username
            self.password = password

        if not self.username or not self.password:
            return False

        try:
            rqdata_init(self.username,
                        self.password, ('rqdatad-pro.ricequant.com', 16011),
                        use_pool=True,
                        max_pool_size=3)

            df = rqdata_all_instruments()
            for ix, row in df.iterrows():
                self.symbols.add(row['order_book_id'])

            temp = rqdata_get_price('000001.XSHE',
                                    start_date='2015-04-01',
                                    end_date='2015-04-01',
                                    frequency='15m')
            print('get_price', temp)
        except (RuntimeError, AuthenticationFailed):
            print('rqdata error')
            return False

        self.inited = True
        return True
示例#3
0
    def query_history(self, req: HistoryRequest) -> Optional[List[BarData]]:
        """
        Query history bar data from RQData.
        """
        symbol = req.symbol
        exchange = req.exchange
        interval = req.interval
        start = req.start
        end = req.end

        rq_symbol = self.to_rq_symbol(symbol, exchange)
        if rq_symbol not in self.symbols:
            return None

        rq_interval = INTERVAL_VT2RQ.get(interval)
        if not rq_interval:
            return None

        # For adjust timestamp from bar close point (RQData) to open point (VN Trader)
        adjustment = INTERVAL_ADJUSTMENT_MAP[interval]

        # For querying night trading period data
        end += timedelta(1)

        # Only query open interest for futures contract
        fields = ["open", "high", "low", "close", "volume"]
        if not symbol.isdigit():
            fields.append("open_interest")

        df = rqdata_get_price(
            rq_symbol,
            frequency=rq_interval,
            fields=fields,
            start_date=start,
            end_date=end,
            adjust_type="none"
        )

        data: List[BarData] = []

        if df is not None:
            for ix, row in df.iterrows():
                bar = BarData(
                    symbol=symbol,
                    exchange=exchange,
                    interval=interval,
                    datetime=row.name.to_pydatetime() - adjustment,
                    open_price=row["open"],
                    high_price=row["high"],
                    low_price=row["low"],
                    close_price=row["close"],
                    volume=row["volume"],
                    open_interest=row.get("open_interest", 0),
                    gateway_name="RQ"
                )

                data.append(bar)

        return data
示例#4
0
def download_stock(order_book_id, engine, tbname):
    print('download ' + order_book_id)
    interval = '30m'
    df = rqdata_get_price(
        order_book_id,
        start_date='2010-04-15',
        end_date='2020-04-15',
        frequency=interval,
        fields=['open', 'close', 'high', 'low', 'volume', 'total_turnover'])
    df['interval'] = df.apply(lambda x: interval, axis=1)
    df['order_book_id'] = df.apply(lambda x: order_book_id, axis=1)
    df.to_sql(tbname, engine, if_exists='append')
    print('download ' + order_book_id + ' success')
示例#5
0
    def query_tick_history(self,
                           req: HistoryRequest) -> Optional[List[TickData]]:
        """
        Query history bar data from RQData.
        """
        if self.symbols is None:
            return None

        symbol = req.symbol
        exchange = req.exchange
        start = req.start
        end = req.end

        rq_symbol = self.to_rq_symbol(symbol, exchange)
        if rq_symbol not in self.symbols:
            return None

        # For querying night trading period data
        end += timedelta(1)

        # Only query open interest for futures contract
        fields = [
            "open",
            "high",
            "low",
            "last",
            "prev_close",
            "volume",
            "limit_up",
            "limit_down",
            "b1",
            "b2",
            "b3",
            "b4",
            "b5",
            "a1",
            "a2",
            "a3",
            "a4",
            "a5",
            "b1_v",
            "b2_v",
            "b3_v",
            "b4_v",
            "b5_v",
            "a1_v",
            "a2_v",
            "a3_v",
            "a4_v",
            "a5_v",
        ]
        if not symbol.isdigit():
            fields.append("open_interest")

        df = rqdata_get_price(rq_symbol,
                              frequency="tick",
                              fields=fields,
                              start_date=start,
                              end_date=end,
                              adjust_type="none")

        data: List[TickData] = []

        if df is not None:
            for ix, row in df.iterrows():
                dt = row.name.to_pydatetime()
                dt = CHINA_TZ.localize(dt)

                tick = TickData(symbol=symbol,
                                exchange=exchange,
                                datetime=dt,
                                open_price=row["open"],
                                high_price=row["high"],
                                low_price=row["low"],
                                pre_close=row["prev_close"],
                                last_price=row["last"],
                                volume=row["volume"],
                                open_interest=row.get("open_interest", 0),
                                limit_up=row["limit_up"],
                                limit_down=row["limit_down"],
                                bid_price_1=row["b1"],
                                bid_price_2=row["b2"],
                                bid_price_3=row["b3"],
                                bid_price_4=row["b4"],
                                bid_price_5=row["b5"],
                                ask_price_1=row["a1"],
                                ask_price_2=row["a2"],
                                ask_price_3=row["a3"],
                                ask_price_4=row["a4"],
                                ask_price_5=row["a5"],
                                bid_volume_1=row["b1_v"],
                                bid_volume_2=row["b2_v"],
                                bid_volume_3=row["b3_v"],
                                bid_volume_4=row["b4_v"],
                                bid_volume_5=row["b5_v"],
                                ask_volume_1=row["a1_v"],
                                ask_volume_2=row["a2_v"],
                                ask_volume_3=row["a3_v"],
                                ask_volume_4=row["a4_v"],
                                ask_volume_5=row["a5_v"],
                                gateway_name="RQ")

                data.append(tick)

        return data