Example #1
0
    def run_downloading(self, vt_symbol: str, interval: str, start: datetime,
                        end: datetime):
        """
        Query bar data from RQData.
        """
        self.write_log(
            f"{vt_symbol}-{interval} start downloading historical data ")

        symbol, exchange = extract_vt_symbol(vt_symbol)

        req = HistoryRequest(symbol=symbol,
                             exchange=exchange,
                             interval=Interval(interval),
                             start=start,
                             end=end)

        contract = self.main_engine.get_contract(vt_symbol)

        try:
            # If history data provided in gateway, then query
            if contract and contract.history_data:
                data = self.main_engine.query_history(req,
                                                      contract.gateway_name)
            # Otherwise use RQData to query data
            else:
                data = rqdata_client.query_history(req)

            if data:
                database_manager.save_bar_data(data)
                self.write_log(
                    f"{vt_symbol}-{interval} historical data download is complete "
                )
            else:
                self.write_log(
                    f" data download failed , unable to get {vt_symbol} historical data "
                )
        except Exception:
            msg = f" data download failed , trigger abnormal :\n{traceback.format_exc()}"
            self.write_log(msg)

        # Clear thread object handler.
        self.thread = None
Example #2
0
    def run_downloading(self, vt_symbol: str, interval: str, start: datetime,
                        end: datetime):
        """
        Query bar data from RQData.
        """
        self.write_log(f"{vt_symbol}-{interval}开始下载历史数据")

        try:
            symbol, exchange = extract_vt_symbol(vt_symbol)
        except ValueError:
            self.write_log(f"{vt_symbol}解析失败,请检查交易所后缀")
            self.thread = None
            return

        req = HistoryRequest(symbol=symbol,
                             exchange=exchange,
                             interval=Interval(interval),
                             start=start,
                             end=end)

        contract = self.main_engine.get_contract(vt_symbol)

        try:
            # If history data provided in gateway, then query
            if contract and contract.history_data:
                data = self.main_engine.query_history(req,
                                                      contract.gateway_name)
            # Otherwise use RQData to query data
            else:
                data = rqdata_client.query_history(req)

            if data:
                database_manager.save_bar_data(data)
                self.write_log(f"{vt_symbol}-{interval}历史数据下载完成")
            else:
                self.write_log(f"数据下载失败,无法获取{vt_symbol}的历史数据")
        except Exception:
            msg = f"数据下载失败,触发异常:\n{traceback.format_exc()}"
            self.write_log(msg)

        # Clear thread object handler.
        self.thread = None
Example #3
0
File: base.py Project: VizXu/vnpy
def query_bar_from_rq(
    symbol: str,
    exchange: Exchange,
    interval: Interval,
    start: datetime,
    end: datetime
):
    """
    Query bar data from RQData.
    """
    if not rqdata_client.inited:
        rqdata_client.init()

    req = HistoryRequest(
        symbol=symbol,
        exchange=exchange,
        interval=interval,
        start=start,
        end=end
    )
    data = rqdata_client.query_history(req)
    return data
Example #4
0
    def download_bar_data(
        self,
        symbol: str,
        exchange: Exchange,
        interval: str,
        start: datetime
    ) -> int:
        """
        Query bar data from RQData.
        """
        req = HistoryRequest(
            symbol=symbol,
            exchange=exchange,
            interval=Interval(interval),
            start=start,
            end=datetime.now()
        )

        vt_symbol = f"{symbol}.{exchange.value}"
        contract = self.main_engine.get_contract(vt_symbol)

        # If history data provided in gateway, then query
        if contract and contract.history_data:
            data = self.main_engine.query_history(
                req, contract.gateway_name
            )
        # Otherwise use RQData to query data
        else:
            if not rqdata_client.inited:
                rqdata_client.init()

            data = rqdata_client.query_history(req)

        if data:
            database_manager.save_bar_data(data)
            return(len(data))

        return 0
Example #5
0
    def _query_history(self, vt_symbol: str, interval: Interval,
                       start: datetime, end: datetime) -> None:
        """"""
        contract: ContractData = self.main_engine.get_contract(vt_symbol)

        req = HistoryRequest(symbol=contract.symbol,
                             exchange=contract.exchange,
                             interval=interval,
                             start=start,
                             end=end)

        if contract.history_data:
            data = self.main_engine.query_history(req, contract.gateway_name)
        else:
            data = rqdata_client.query_history(req)
        if not data:
            data = database_manager.load_bar_data(symbol=contract.symbol,
                                                  exchange=contract.exchange,
                                                  interval=interval,
                                                  start=start,
                                                  end=end)

        event = Event(EVENT_CHART_HISTORY, data)
        self.event_engine.put(event)
Example #6
0
def load_data(req):
    data = rqdata_client.query_history(req)
    database_manager.save_bar_data(data)
    print(f"{req.symbol}历史数据下载完成")
Example #7
0
            start_t = start_date
        else:
            start_t = datetime.datetime(year=year, month=1, day=1)

        if i == count:
            end_t = end_date
        else:
            end_t = datetime.datetime(year=year + 1, month=1,
                                      day=1) - datetime.timedelta(seconds=1)

        schedule = calendar.schedule(start_t, end_t)
        pair.append((schedule.market_open[0], schedule.market_close[-1]))
    return pair


data = rqdata_client.query_history(req)

ds = [from_bar(i) for i in data]
df = pd.DataFrame(ds)
df.set_index(['index'], inplace=True)
start = df.index[0]
end = df.index[-1]

pair = get_date_range(start, end)
# row_data = list(map(lambda x: {'index':x.datetime.astimezone(pytz.utc), 'open':x.open_price, 'high':x.high_price,'low':x.low_price,'close':x.close_price,'volume':x.volume},data))
# # index = list(map(lambda x: x.datetime.astimezone(pytz.utc),data))
# df = pd.DataFrame(row_data)
# df.set_index(['index'], inplace=True)
for p in pair:
    year = p[0].year
    trun_data = df.truncate(p[0], p[1])
Example #8
0
    def load_bar_data(
        self,
        symbol: str,
        exchange: Exchange,
        interval: Interval,
        start: datetime,
        end: datetime,
    ) -> Sequence[BarData]:
        req = HistoryRequest(symbol,
                             start=start,
                             end=end,
                             interval=interval,
                             exchange=exchange)
        data = rqdata_client.query_history(req)

        _start = int(time.mktime(start.timetuple()))
        _end = int(time.mktime(end.timetuple()))

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

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

        # For querying night trading period data
        if rq_interval == "1d":
            if symbol[:2] == "15" or symbol[:2] == "51":
                ls = [
                    x for x in self.db_client["quantaxis"]["index_day"].find(
                        {
                            "code": symbol,
                            "date_stamp": {
                                "$gte": _start,
                                "$lte": _end
                            }
                        },
                        sort=[('date_stamp', 1)])
                ]
                df = pd.DataFrame(ls)
            else:
                ls = [
                    x for x in self.db_client["quantaxis"]["stock_day"].find(
                        {
                            "code": symbol,
                            "date_stamp": {
                                "$gte": _start,
                                "$lte": _end
                            }
                        },
                        sort=[('date_stamp', 1)])
                ]
                df = pd.DataFrame(ls)
        else:
            if symbol[:2] == "15" or symbol[:2] == "51":
                ls = [
                    x for x in self.db_client["quantaxis"]["index_min"].find(
                        {
                            "code": symbol,
                            "type": rq_interval,
                            "time_stamp": {
                                "$gte": _start,
                                "$lte": _end
                            }
                        },
                        sort=[('time_stamp', 1)])
                ]
                df = pd.DataFrame(ls)
            else:
                ls = [
                    x for x in self.db_client["quantaxis"]["stock_min"].find(
                        {
                            "code": symbol,
                            "type": rq_interval,
                            "time_stamp": {
                                "$gte": _start,
                                "$lte": _end
                            }
                        },
                        sort=[('time_stamp', 1)])
                ]
                df = pd.DataFrame(ls)

        data: List[BarData] = []

        if df is not None:
            for ix, row in df.iterrows():
                if rq_interval == "1d":
                    d = datetime.fromtimestamp(row["date_stamp"])
                else:
                    d = datetime.fromtimestamp(row["time_stamp"])
                bar = BarData(symbol=symbol,
                              exchange=exchange,
                              interval=interval,
                              datetime=d - adjustment,
                              open_price=row["open"],
                              high_price=row["high"],
                              low_price=row["low"],
                              close_price=row["close"],
                              volume=row["vol"],
                              gateway_name="MongoDB")
                data.append(bar)

        return data