Open chzhshch-new opened 2 years ago
@chzhshch-new 这个建议挺好的。后续版本改一下。方便的话,加微信 zengbin93
交流
昨晚全市场跑一次,这样改不能减少时间。不知问题所在。
@zengbin93 我尝试做和验证部份标的,没发现问题。 check_bi,__update_bi 两个中改动下就可以。check_fxs这个可以不用调用。隐含的BUG也自动解决了。
第1个改动处 def check_bi(bars: List[NewBar], fxs_ubi: List[FX] = None, benchmark: float = None): """输入一串无包含关系K线,查找其中的一笔
:param bars: 无包含关系K线列表
:param fxs_ubi:未完成笔对应的分型列表
:param benchmark: 当下笔能量的比较基准
:return:
"""
min_bi_len = envs.get_min_bi_len()
# 增改*接收处理
if not fxs_ubi:
fxs = check_fxs(bars)
else:
#fxs = fxs_ubi
fxs = check_fxs(bars)
if fxs_ubi != fxs:
print(fxs[-1].dt,fxs_ubi[-1].dt)
第2个改动 def __update_bi(self): bars_ubi = self.bars_ubi if len(bars_ubi) < 3: return
# 增改*分型确认
fx: FX = check_fx(bars_ubi[- 3], bars_ubi[- 2], bars_ubi[- 1])
if isinstance(fx, FX):
if not self.fx_list or fx.dt != self.fx_list[-1].dt: # 第一个分型的确认
self.fx_list.append(fx)
else:
self.fx_list[-1] = fx # 分型右侧存在包含,更新
第3-4个改动 if not self.bi_list:
# fxs = check_fxs(bars_ubi)
# if not fxs:
if not self.fx_list:
return
# 增改*直接取分fx来
fxs = self.fx_list
fx_a = fxs[0]
fxs_a = [x for x in fxs if x.mark == fx_a.mark]
for fx in fxs_a:
if (fx_a.mark == Mark.D and fx.low <= fx_a.low) \
or (fx_a.mark == Mark.G and fx.high >= fx_a.high):
fx_a = fx
bars_ubi = [x for x in bars_ubi if x.dt >= fx_a.elements[0].dt]
# 增改*直接传fxs来
fxs_ubi = [x for x in self.fx_list if x.dt >= bars_ubi[0].dt]
bi, bars_ubi_ = check_bi(bars_ubi,fxs_ubi)
第5个改动
fxs_ubi = [x for x in self.fx_list if x.dt > bars_ubi_a[0].dt]
bi, bars_ubi_ = check_bi(bars_ubi_a,fxs_ubi, benchmark)
self.bars_ubi = bars_ubi_
if isinstance(bi, BI):
self.bi_list.append(bi)
@chzhshch-new 对于程序来说,重复算部分结果,可能对整体的时间性能影响不大。你把改完之后的完整 analyze.py 文件发给我看看。我对比一下
本人刚自学python,暂无法给出具体的代码。只是有这样优化的想法。