Vespa314 / chan.py

开放式的缠论python实现框架,支持形态学/动力学买卖点分析计算,多级别K线联立,区间套策略,可视化绘图,多种数据接入,策略开发,交易系统对接;
MIT License
796 stars 288 forks source link

strategy_demo5.py中可能存在的问题 #49

Closed Mjzs12138 closed 3 months ago

Mjzs12138 commented 3 months ago

该Demo脚本中保存策略特征的方式是根据买卖点的idx进行键值对存储。但是,对于同一个idx,可能被不同时间多次出现。这种方式只能存储同idx一最后一次出现的BSP特征。是否应该使用time作为key保存?

# 跑策略,保存买卖点的特征
for chan_snapshot in chan.step_load():
    last_klu = chan_snapshot[0][-1][-1]
    bsp_list = chan_snapshot.get_bsp()
    if not bsp_list:
        continue
    last_bsp = bsp_list[-1]

    cur_lv_chan = chan_snapshot[0]
    if last_bsp.klu.idx not in bsp_dict and cur_lv_chan[-2].idx == last_bsp.klu.klc.idx:
        # 假如策略是:买卖点分形第三元素出现时交易
        bsp_dict[last_bsp.klu.idx] = {
            "feature": last_bsp.features,
            "is_buy": last_bsp.is_buy,
            "open_time": last_klu.time,
        }
        bsp_dict[last_bsp.klu.idx]['feature'].add_feat(stragety_feature(last_klu))  # 开仓K线特征
        print(last_bsp.klu.time, last_bsp.is_buy)
Vespa314 commented 3 months ago

会有一点点问题,是可以用你的解法,但是原因可能和你理解的不太一样。

设计上因为有if里面的cur_lv_chan[-2].idx == last_bsp.klu.klc.idx的存在,所以一个bsp一定只会被用到一次;

但刚刚想了一下,如果新增的K线合到最后一个KLC里面,这个if语句的条件还是会成立的。

Mjzs12138 commented 3 months ago

谢谢~

Vespa314 commented 3 months ago

会有一点点问题,是可以用你的解法,但是原因可能和你理解的不太一样。

设计上因为有if里面的cur_lv_chan[-2].idx == last_bsp.klu.klc.idx的存在,所以一个bsp一定只会被用到一次;

但刚刚想了一下,如果新增的K线合到最后一个KLC里面,这个if语句的条件还是会成立的。

之前这里回复的不太对,if last_bsp.klu.idx not in bsp_dict已经保证了每个bsp只会被交易一次;

所以之前说的如果新增的K线合到最后一个KLC里面,这个if语句的条件还是会成立的,应该没有这个问题。