VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 11
声望: 1

我发现在相关的 futu_gateway.py 文件里,并没有 query_history 的函数,所以每次下载数据都说失败,请问是不支持呢还是说要自己写呢?不知道有没有现成的呢?

谢谢啦!

Administrator
avatar
加入于:
帖子: 4500
声望: 320

futu_gateway没有对接下载数据的功能,需要的话只有自己实现了

Member
avatar
加入于:
帖子: 11
声望: 1

谢谢,我已自己实现了!

Member
avatar
加入于:
帖子: 21
声望: 1

雲信哥哥 wrote:

谢谢,我已自己实现了!
怎么实现的,介绍一下经验吧

Member
avatar
加入于:
帖子: 11
声望: 1

好的,主要就是要在 futu_gaateway.py 文件裏實現一個 query_history 方法,原理我就不多說啦,自己看下應該也很好理解的,具體代碼如下:

    def exchange_bond(self, exchange: Exchange):
        if exchange.value == "SEHK":
            return "HK"
        elif exchange.value == "SMART":
            return "US"
        else:
            return exchange.value

    def query_history(self, req: HistoryRequest):
        """"""
        symbol = req.symbol
        exchange = req.exchange
        interval = req.interval
        start = req.start.strftime('%Y-%m-%d')
        end = req.end.strftime('%Y-%m-%d')
        tcode = self.exchange_bond(exchange) + '.' + f'{symbol}'
        #tcode = 'HK.09988'
        ret, quotedata, page_req_key = self.quote_ctx.request_history_kline(
            tcode, start=start, end=end)

        data: List[BarData] = []

        if quotedata is not None:
            for ix, row in quotedata.iterrows():
                #date = datetime.strptime(row.time_key, '%Y-%m-%d %H:%M:%S')
                bar = BarData(
                    symbol=symbol,
                    exchange=exchange,
                    interval=interval,
                    datetime=row.time_key,
                    open_price=row.open,
                    high_price=row.high,
                    low_price=row.low,
                    close_price=row.close,
                    volume=row.volume,
                    gateway_name="FUTU"
                )
                print(bar)
                data.append(bar)
        return data

        return data
Member
avatar
加入于:
帖子: 1
声望: 0

多谢云信哥哥的分享,正好是我想要的,能说详细一些吗?初哥多谢了!

Member
avatar
加入于:
帖子: 17
声望: 1

补充一点: HistoryRequest 这个需要在开头进行引入,否则报错
from vnpy.trader.object import (
TickData,
OrderData,
TradeData,
AccountData,
ContractData,
PositionData,
SubscribeRequest,
OrderRequest,
HistoryRequest,
CancelRequest
)

Member
avatar
加入于:
帖子: 3
声望: 0

加了代码后还是无法下载数据,无法获取历史数据。

Member
avatar
加入于:
帖子: 6
声望: 0

我也没有无法获取历史数据。能不能出个视频教程啊!雲信哥哥

Member
avatar
加入于:
帖子: 6
声望: 0

description

Member
avatar
加入于:
帖子: 20
声望: 2

雲信哥哥 wrote:

好的,主要就是要在 futu_gaateway.py 文件裏實現一個 query_history 方法,原理我就不多說啦,自己看下應該也很好理解的,具體代碼如下:

    def exchange_bond(self, exchange: Exchange):
        if exchange.value == "SEHK":
            return "HK"
        elif exchange.value == "SMART":
            return "US"
        else:
            return exchange.value

    def query_history(self, req: HistoryRequest):
        """"""
        symbol = req.symbol
        exchange = req.exchange
        interval = req.interval
        start = req.start.strftime('%Y-%m-%d')
        end = req.end.strftime('%Y-%m-%d')
        tcode = self.exchange_bond(exchange) + '.' + f'{symbol}'
        #tcode = 'HK.09988'
        ret, quotedata, page_req_key = self.quote_ctx.request_history_kline(
            tcode, start=start, end=end)

        data: List[BarData] = []

        if quotedata is not None:
            for ix, row in quotedata.iterrows():
                #date = datetime.strptime(row.time_key, '%Y-%m-%d %H:%M:%S')
                bar = BarData(
                    symbol=symbol,
                    exchange=exchange,
                    interval=interval,
                    datetime=row.time_key,
                    open_price=row.open,
                    high_price=row.high,
                    low_price=row.low,
                    close_price=row.close,
                    volume=row.volume,
                    gateway_name="FUTU"
                )
                print(bar)
                data.append(bar)
        return data

        return data

谢谢,按照方法去做,还是无法下载行情,这里还是使用的RQ的接口去下的,并没有使用gateway里的query_history.

description

希望能获得帮助.

Member
avatar
加入于:
帖子: 4622
声望: 284

不知道对应接口的contractdata里的history_data是否改为true了,没改的话不会走到去接口拉的逻辑的

Member
avatar
加入于:
帖子: 2
声望: 0

xiaohe wrote:

不知道对应接口的contractdata里的history_data是否改为true了,没改的话不会走到去接口拉的逻辑的

我跟踪了一下就是history_data=False. 在哪里改成True?

Member
avatar
加入于:
帖子: 4622
声望: 284

query_contract创建ContractData的时候

Member
avatar
加入于:
帖子: 7
声望: 0

xiaohe wrote:

query_contract创建ContractData的时候
这是哪里创建的

Member
avatar
加入于:
帖子: 4622
声望: 284

接口文件收到合约查询回报的时候

Member
avatar
加入于:
帖子: 7
声望: 0

xiaohe wrote:

接口文件收到合约查询回报的时候
已经看到,谢谢!

Member
avatar
加入于:
帖子: 7
声望: 0

xiaohe wrote:

不知道对应接口的contractdata里的history_data是否改为true了,没改的话不会走到去接口拉的逻辑的
我跟踪了一下,发现查不出数据的原因是gateway.query_history(req),查询到基类的query_history,而不是FutuGateway.query_history(req),请问这怎么回事?刚学习Python不久,还请指教。谢谢!

Member
avatar
加入于:
帖子: 4622
声望: 284

FutuGateway就继承了BaseGateway,如果在FutuGateway这个类下面写了query_history并且接口on_contract里的contract.history_data为True的话,是会调用到的

Member
avatar
加入于:
帖子: 36
声望: 0

各位老师,我咋连futu_gateway.py都找不到了呢?30版本。

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】