用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]了。所以错了