3.18K 浏览
0

用asyncio编程,需要get_kline_serial两次,取得2种k线,一个是日线,一个是5分钟线,但

我日线只需要最近3天的日线。5分钟线则需要8000线。本来我的程序,只需要5分钟线的时候,运行得好好的。没有什么问题。

后来,我的程序,加入要get_kline_serial日线。只需要最近3天的日线。我的asyncio程序中,两个get_kline_serial语句。

可是,我的程序计算,是在asyncio的协程中。我针对日线数据,加入以下语句(这个语句也许没问题,我不确定):

async with api.register_update_notify(klines_day) as update_chan:  # 当 quote 有更新时会发送通知到 update_chan 上
        while b_recursive:
            async for _ in update_chan:  # 当从 update_chan 上收到行情更新通知时判断是否触发开仓条件
                if api.is_changing(klines.iloc[-1], "close") and not np.isnan(klines.close[0]):
                    b_recursive = np.isnan(klines.close[0])
                    break
    #'''

而针对5分钟数据,我的程序是:

async with api.register_update_notify(klines) as update_chan:  # 当 quote 有更新时会发送通知到 update_chan 上
        while True:
            async for _ in update_chan:  # 当从 update_chan 上收到行情更新通知时判断是否触发开仓条件
                if api.is_changing(klines.iloc[-1], "datetime") and not np.isnan(klines.close[0]):
                    break
             运算ing...

我的程序,总是运行不久,就在这一行:

elif klines_day.close[0] < klines_day.close[1] < klines_day[2]:

报错,说“indexer = self.columns.get_loc(key)”

说日线数据,被lock住了。

完全不懂asyncio的原理。故向工作人员求助。要知道,我的程序,在只get_kline_serial一个的时候,工作得好好的。就是get_kline_serial两个,就出现这个问题

Paul Yu 发表新评论 2020年1月23日

已解决。
就是那句语句本身错了。
klines_day.close[2]写错成kline_day[2]了。所以错了