544 浏览
0

为什么 klines 在不同的位置,效果会不一样?

chaos 已回答的问题 5天 前
0

这是因为 `get_kline_serial()` 返回的是一个会被后续行情包更新的引用。刚创建订阅对象时,首包数据还不一定已经回来,所以立刻 `print(k_1)` 可能看到 `NaN` 或未初始化值;等外层 `api.wait_update()` 继续驱动之后,这个对象才会被填充和更新。

你图里的 `k_2` 之所以正常,是因为它在主流程里先创建,后续创建 task、进入 `wait_update()` 循环时已经有机会收到数据;而 `k_1` 是在异步任务里新创建后马上打印,还没等到下一次更新。

可以改成订阅后等一次更新,再读取。异步代码中可以在创建 `k_1 = api.get_kline_serial(“SHFE.rb2610”, duration_seconds=60, data_length=5)` 之后,使用 `api.register_update_notify(k_1)` 等到该对象有更新,再 `print(k_1)`。

或者在同步代码里保持这个模式:先 `get_kline_serial()`,再在 `while True` 中持续调用 `api.wait_update()`,并用 `api.is_changing(klines.iloc[-1], “datetime”)` 判断新 K 线。

chaos 发表新评论 5天 前

有其他问题欢迎加入官方Q群748265037一起交流

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