159 浏览
0

实盘状态下,如果同时订阅了klines5(5分钟k线)、klines30、klines1.部分代码如下:

  while True:
        api.wait_update()

        if not api.is_changing(klines1.iloc[-1], “datetime”):
            continue

        if api.is_changing(klines5.iloc[-1], “datetime”):
            print(“更新”)
这种情况下,只打印1次“更新”,后续就一直不打印。说明if api.is_changing(klines5.iloc[-1], “datetime”)该语句一直是false。请问为什么,如何处理?

chaos 已回答的问题 2025年6月6日
0

检测的是datetime这个字段,五分钟K线得到下一个五分钟才更新,所以没有马上打印可能是这个原因

chaos 发表新评论 13小时 前

是一直没打印,不是5分钟打印一次

我去测试了一下,这个原因应该是和wait_update有关系,wait_update不是一次性获取所有截面数据,这会导致10点的时候kline1没有更新,kline2更新了,判断条件1没通过,条件2通过,当kline1更新了,条件1通过时,条件2会是false因为这时的kline2没变化
—————————-
测试代码:
klines1 = api.get_kline_serial(symbol,duration_seconds=5)
klines2 = api.get_kline_serial(symbol,duration_seconds=10)
while True:
api.wait_update()
print(“——“)
print(“klines1:”+time_to_str(klines1.iloc[-1].datetime))
print(api.is_changing(klines1.iloc[-1], “datetime”))
print(“klines2:”+time_to_str(klines2.iloc[-1].datetime))
print(api.is_changing(klines2.iloc[-1], “datetime”))
打印结果:
——
klines1:2025-06-13 10:52:55.000000
False
klines2:2025-06-13 10:52:50.000000
False
——
klines1:2025-06-13 10:52:55.000000
False
klines2:2025-06-13 10:53:00.000000
True
——
klines1:2025-06-13 10:53:00.000000
True
klines2:2025-06-13 10:53:00.000000
False
—————————-

您正在查看1个答案中的1个,单击此处查看所有答案。