Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实盘获取K线时,会获取到未完结的K线。 #462

Open
UtorYeung opened this issue Aug 8, 2023 · 0 comments
Open

实盘获取K线时,会获取到未完结的K线。 #462

UtorYeung opened this issue Aug 8, 2023 · 0 comments

Comments

@UtorYeung
Copy link

UtorYeung commented Aug 8, 2023

需求:
在实盘策略运行时,只获取已完结的1分钟K线,避免由于未完结的1分钟数据的盘中变动导致信号闪烁的问题。


问题1:
获取1分钟数据时,会出现最后一条是未完结的1分钟K线。

e.g.
10:05:16时,通过api.get_kline_serial(symbol, 60)获取数据:
2023-08-08 10:03:00 3981.2189 ... 3993.4 235
2023-08-08 10:04:00 3980.7730 ... 3991.4 236
2023-08-08 10:05:00 3980.7730 ... 3990.2 237

最后一条数据为10:05-10:06的1分钟线,但此时(10:05:16)该1分钟线尚未完结,所以此数据不应该出现数据列。


问题2:
对于问题1的处理,官方方案貌似是用api.is_changing(quote.iloc[-1], "datetime"),通过判断最后一条数据的datetime是否有变化来判断是否生成新的1分钟线。
但这种做法会衍生出新的问题,那就是在11:30:00、15:00:00的时候,api.is_changing(quote.iloc[-1], "datetime")不会推送11:29-11:30、 14:59-15:00的1分钟线,因为此时datetime没有变化。

11:30:00
2023-08-08 11:27:00 3981.2189 ... 3993.4 235
2023-08-08 11:28:00 3980.7730 ... 3991.4 236
2023-08-08 11:29:00 3980.7730 ... 3990.2 237

15:00:00
2023-08-08 14:57:00 3981.2189 ... 3993.4 235
2023-08-08 14:58:00 3980.7730 ... 3991.4 236
2023-08-08 14:59:00 3980.7730 ... 3990.2 237


问题3:
如果不用官方方案api.is_changing()来判断,而通过datetime.now()-quote.iloc[-1, "datetime"]>=timedelta(seconds=60)来判断,
则会出现“本地服务器校时标准与天勤服务器校时标准不一致”、“网络延迟”等原因导致timedelta误差变动的问题。


建议:
在get_kline_serial增加is_finished的bool字段,显示当前K线是否已完结。
通过api.is_changing(quote.iloc[-1], "is_finished")来判断上一条K线是否结束,从而自动更新。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant