研究侧的 fast_bsp3 一直只活在 research/lib/ 里,web 端看不到,回测与目视 两条线对不上。这次把它搬进引擎,作为独立的第四类买卖点。 之所以单独立类而不是当作 B3/S3 的低滞后版:step30/31 显示引擎原生的 B3/S3 统计上呈逆势、显著亏损(胜率 27.4%、PF 0.66、t −18.76),而同一组 过滤器把 B4 从 PF 1.59 提到 2.26 却对它无效(0.66→0.71)。两者选的是 不同的交易群体,不是同一信号的早晚两版。 - chanlun/analysis/fast_bsp.py 原样搬入 find_fast_bsp3 与 build_htf_zones, 另加 add_zone_ladder / htf_fx_timeline / attach_htf_agree - research/lib/ 两个模块改为转发,所有 step 脚本导入不变,信号逐条比对一致 - 大级别上下文用 resample 从同一份 df 构建,不额外拉数据,因此与界面上选的 周期和时间范围无关 - 前端三个复选框 + 过滤模式下拉;未过滤的原始信号用浅色,避免与主口径混淆 Co-authored-by: Cursor <cursoragent@cursor.com>
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from chanlun.core.ChanEnum import Chan_BSP_DIR, Chan_BSP_TYPE
|
|
|
|
|
|
class ChanFastBSP():
|
|
"""第四类买卖点(B4/S4)。
|
|
|
|
与 ChanBSP 的区别在于它不挂在笔上:fast_bsp 刻意不等笔确认,入场点是一根具体的
|
|
K线而非一笔的端点,所以时间与价格直接取自 K 线,没有 bi / klc 可依附。
|
|
|
|
htf_agree 与 ladder_ok 是两个独立的过滤标志,不在这里合成——上层(图表或策略)
|
|
自己决定要不要用、怎么组合。
|
|
"""
|
|
|
|
def __init__(self, time, price, ddir, entry_idx, bo_time=None, pb_time=None,
|
|
lag=0, depth=0.0, zg=None, zd=None, occ=1,
|
|
htf_dir=None, htf_agree=None, ladder_ok=None):
|
|
self.time = time
|
|
self.price = float(price)
|
|
self.dir = ddir
|
|
self.type = Chan_BSP_TYPE.B4 if ddir == Chan_BSP_DIR.BUY else Chan_BSP_TYPE.S4
|
|
self.entry_idx = int(entry_idx)
|
|
self.bo_time = bo_time
|
|
self.pb_time = pb_time
|
|
self.lag = int(lag)
|
|
self.depth = float(depth)
|
|
self.zg = float(zg) if zg is not None else None
|
|
self.zd = float(zd) if zd is not None else None
|
|
self.occ = int(occ)
|
|
self.htf_dir = htf_dir
|
|
self.htf_agree = htf_agree
|
|
self.ladder_ok = ladder_ok
|
|
# 入场即成立,没有「等待确认」这个状态;留此字段是为了与 ChanBSP 的序列化对齐
|
|
self.is_sure = True
|
|
self.start_time = time
|
|
self.end_time = time
|
|
self.sure_time = time
|
|
|
|
def __repr__(self):
|
|
name = str(self.type).replace('Chan_BSP_TYPE.', '')
|
|
return f"<ChanFastBSP {name} {self.time} {self.price} lag={self.lag}>"
|