54 lines
2.3 KiB
Python
54 lines
2.3 KiB
Python
from Chan import CChan
|
|
from ChanConfig import CChanConfig
|
|
from Common.CEnum import AUTYPE, DATA_SRC, KL_TYPE
|
|
from DataAPI.BaoStockAPI import CBaoStock
|
|
|
|
if __name__ == "__main__":
|
|
"""
|
|
本demo演示当你要用多级别trigger load的时候,如何巧妙的解决时间对齐的问题:
|
|
解决方案就是喂第一根最大级别的时候,直接把所有的次级别全部喂进去
|
|
之后每次只需要喂一根最大级别即可,复用框架内置的K线时间对齐能力
|
|
从而避免了在trigger_load入参那里进行K线对齐,自己去找出最大级别那根K线下所有次级别的K线
|
|
"""
|
|
code = "sz.000001"
|
|
begin_time = "2023-06-01"
|
|
end_time = None
|
|
data_src = DATA_SRC.BAO_STOCK
|
|
lv_list = [KL_TYPE.K_DAY, KL_TYPE.K_30M]
|
|
|
|
config = CChanConfig({
|
|
"trigger_step": True,
|
|
"divergence_rate": 0.8,
|
|
"min_zs_cnt": 1,
|
|
})
|
|
|
|
chan = CChan(
|
|
code=code,
|
|
begin_time=begin_time, # 已经没啥用了这一行
|
|
end_time=end_time, # 已经没啥用了这一行
|
|
data_src=data_src, # 已经没啥用了这一行
|
|
lv_list=lv_list,
|
|
config=config,
|
|
autype=AUTYPE.QFQ, # 已经没啥用了这一行
|
|
)
|
|
CBaoStock.do_init()
|
|
data_src_day = CBaoStock(code, k_type=KL_TYPE.K_DAY, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ)
|
|
data_src_30m = CBaoStock(code, k_type=KL_TYPE.K_30M, begin_date=begin_time, end_date=end_time, autype=AUTYPE.QFQ)
|
|
kl_30m_all = list(data_src_30m.get_kl_data())
|
|
|
|
for _idx, klu in enumerate(data_src_day.get_kl_data()):
|
|
# 本质是每喂一根日线的时候,这根日线之前的都要喂过,提前喂多点不要紧,框架会自动根据日线来截取需要的30M K线
|
|
# 30M一口气全部喂完,后续就不用关注时间对齐的问题了
|
|
if _idx == 0:
|
|
chan.trigger_load({KL_TYPE.K_DAY: [klu], KL_TYPE.K_30M: kl_30m_all})
|
|
else:
|
|
chan.trigger_load({KL_TYPE.K_DAY: [klu]})
|
|
|
|
if _idx == 4: # demo只检查4根日线
|
|
break
|
|
# 检查时间对齐
|
|
print("当前所有日线:", [klu.time.to_str() for klu in chan[0].klu_iter()])
|
|
print("当前所有30M K线:", [klu.time.to_str() for klu in chan[1].klu_iter()], "\n")
|
|
|
|
CBaoStock.do_close()
|