czsc 窗口成交量分层信号 vol_window_V230731 完全解析:从参数模板到 Rust 源码实现
金融科技【免费下载链接】czsc缠中说禅技术分析工具缠论股票期货Quant量化交易项目地址https://gitcode.com/gh_mirrors/cz/czsc点击查看免费下载本文围绕 czsc缠中说禅技术分析工具K 线级信号vol_window_V230731窗口成交量分层特征展开完整讲解其参数模板、信号生成逻辑、参数含义与默认值、标准信号字符串格式并结合czsc-signalscrate 的 Rust 源码逐行剖析qcut分层与去重分位边界的实现细节帮助读者在事件驱动策略与特征工程中正确配置、解读和复用该信号。信号定位K 线级“窗口能量”分层特征vol_window_V230731属于 czsc 信号体系中的klineK 线级类别由vol命名空间下的 vol.rs 模块实现。它的核心思想是不直接看成交量数值大小而是把最近一段时间的成交量按分位数分成若干层相对量能等级再统计最近一个小窗口内成交量的最高层与最低层从而描述当前量能处于近期的什么相对位置。该信号在 czsc 的事件驱动策略中作为“最底层原料”之一使用信号函数由 Rust 实现产出形如{freq}_{...}_{name}V{ver}的 key 与{v1}_{v2}_{v3}_{score}的 value再由signals_config配置项调度其在指定周期上计算参见 05_signals.py 的说明。参数模板与信号命名该信号的参数模板param template为{freq}_D{di}W{w}M{m}N{n}_窗口能量V230731模板中的freq为 K 线周期如60分钟、日线D{di}W{w}M{m}N{n}构成信号的参数段k2窗口能量V230731是信号类别段k3。文档给出的两个信号列表示例Signal(60分钟_D2W5M100N10_窗口能量V230731_高量N9_低量N4_任意_0) Signal(60分钟_D1W5M30N10_窗口能量V230731_高量N10_低量N3_任意_0)标准七段信号格式完整信号字符串遵循 czsc 统一的 7 段格式k1_k2_k3_v1_v2_v3_score其解析逻辑在 signal.rs 的Signal::from_str中实现按_切分为恰好 7 段score 必须在 0~100 之间。以上述第一个示例为例段内容含义k160分钟计算周期k2D2W5M100N10参数段di2、w5、m100、n10k3窗口能量V230731信号类别与版本v1高量N9观察窗口内最高成交量层v2低量N4观察窗口内最低成交量层v3任意无第三维取值score0信号分数其中v3固定为任意score固定为0这是 K 线级信号使用make_kline_signal_v2构造器的标准行为见 sig.rs。信号逻辑三步计算流程文档定义的信号逻辑可以拆解为三步分层取最近m根 K 线的成交量按分位数qcut分成n层观察统计最近w根 K 线中成交量的最高层与最低层输出输出高量N{max}最高层与低量N{min}最低层两个取值。这样设计的好处是分层基于m根样本的全局分位分布观察窗口w独立于样本窗口m因此高量/低量不是绝对数值比较而是相对近期量能分布的层级比较天然具备自适应不同品种、不同周期量级差异的能力。参数详解di / w / m / n文档给出的参数说明如下Rust 实现vol.rs 中vol_window_v230731函数通过ParamView::usize读取并支持缺省默认值参数含义默认值代码读取方式di信号计算截止在倒数第di根 K 线即允许“回看”若干根再判定常用于规避当根未走完的数据噪声1params.usize(di, 1)w观察窗口大小即统计最近多少根内的最高/最低层5params.usize(w, 5)m分层样本长度即用多少根 K 线的成交量建立分位边界30params.usize(m, 30)n分层数量即把量能切成多少层10params.usize(n, 10)ParamView是 params.rs 中定义的统一只读参数视图支持数字与字符串两种取值形式字符串会自动parse::usize因此配置中既可以写di: 2也可以写di: 2。参数选择建议di默认1表示使用最后一根 K 线计算若担心末根未收盘导致成交量失真可设di2示例中即出现D2的用法此时样本窗口与观察窗口整体向后平移一根。w控制“当前量能处于什么水平”的观察粒度w越小越灵敏越大越平滑。m决定分位边界的稳定性m应显著大于n否则各层样本过少、边界不稳定文档示例使用m30/100搭配n10。n决定量能层级的粗细n10相当于十分位分层高量N10表示最高十分位。源码级实现剖析1. 数据不足时的兜底if c.bars_raw.len() di m { return make_kline_signal_v1(k1, k2, k3, 其他); }当原始 K 线数量不足di m无法凑齐m根分层样本时直接输出其他避免在样本不足时产生误导性分层结果。注意这里要求的是di m根而非di m - 1根比严格所需略保守。2. 分层样本提取let vols: Vecf64 get_sub_elements(c.bars_raw, di, m) .iter() .map(|x| x.vol) .collect();get_sub_elements定义于 sig.rs对齐 Python 切片语义di1时返回最后m根di1时返回[-n-di1 : -di1]区间即先按di平移再取m根。换言之分层与观察窗口共同基于“截止到倒数第di根”的这段 K 线序列。3. qcut 分层对齐 pd.qcut(duplicatesdrop)模块内私有的qcut_labels函数实现了分位数分层对成交量排序后用线性插值法计算q1个分位边界quantile(0/q ... q/q)用edges.dedup_by(|a, b| (*a - *b).abs() f64::EPSILON)去掉重复边界——这正是文档“对齐说明”中所讲的与 Pythonpd.qcut(..., duplicatesdrop)等价的去重分位边界若去重后边界不足两个即序列近乎常数、无法分层返回None信号退化为其他每个样本按左开右闭区间首层左闭落入 0-based 层号。4. 观察窗口与层级输出let tail if w labels.len() { labels[..] } else { labels[labels.len() - w..] }; let max_layer tail.iter().copied().max().unwrap_or(0) 1; let min_layer tail.iter().copied().min().unwrap_or(0) 1; let v1 format!(高量N{}, max_layer); let v2 format!(低量N{}, min_layer); make_kline_signal_v2(k1, k2, k3, v1, v2)从m个层标签中取最近w个w m时取全部层标签在内部是 0-based输出时1转成 1-based 的N1~N{n}与文档示例中的高量N9、低量N10等一致用make_kline_signal_v2同时输出v1高量N{max}与v2低量N{min}。5. 信号注册vol_window_v230731通过过程宏#[signal(...)]声明category 为kline经czsc-signal-macros的signal_module宏自动注册进全局 inventory最终汇总到 registry.rs 的SIGNAL_REGISTRY可通过list_all_signals只读查询。测试test_tas_registry_contains_migrated_signals见 registry.rs 测试段明确校验了vol_window_V230731已注册可作为该信号可用性的验证证据。实战在 Python 端配置并生成该信号该信号在 Python 端通过signals_config调度。参照 05_signals.py 的用法配置vol_window_V230731的方式如下from czsc import ( BarGenerator, CzscSignals, Freq, format_standard_kline, generate_czsc_signals, ) from czsc.mock import generate_symbol_kines # name 是 Rust 端注册名freq 指定周期di/w/m/n 为可选参数缺省用默认值 SIGNALS_CONFIG [ {name: vol_window_V230731, freq: 60分钟, di: 2, w: 5, m: 100, n: 10}, {name: vol_window_V230731, freq: 日线, di: 1, w: 5, m: 30, n: 10}, ] df generate_symbol_kines(000001, 30分钟, 20220101, 20240101, seed42) bars format_standard_kline(df, freqFreq.F30) # 方式 A流式计算适合实盘/回放 bg BarGenerator(base_freq30分钟, freqs[60分钟, 日线], max_count5000) cs CzscSignals(bg, signals_configSIGNALS_CONFIG) for bar in bars: cs.update_signals(bar) # 方式 B批量产出 DataFrame适合研究/特征工程 df_sig generate_czsc_signals(bars, signals_configSIGNALS_CONFIG, dfTrue, sdt2023-01-01)计算后信号列名即为 7 段字符串中的 key 部分例如60分钟_D2W5M100N10_窗口能量V230731其取值为高量N{max}_低量N{min}_任意_0形式value 部分。在事件驱动策略中可通过Signal的is_match进行条件匹配匹配逻辑见 signal.rsscore 目标且各 v 段相等或目标为任意例如当高量N10出现时触发放量条件。若需要反推配置与涉及周期可使用get_signals_config/get_signals_freqs参见 05_signals.py 的demo_signal_parse。姊妹信号vol_window_V230801窗口量能先后顺序同一模块还提供了vol_window_V230801窗口成交量先后顺序特征模板为{freq}_D{di}W{w}_窗口能量V230801取最近w根成交量若最小量索引位于最大量索引之后判先放后缩否则判先缩后放。两者同属窗口能量系列前者回答“量能在什么层级”后者回答“量能如何演变”可在策略中组合使用实现均在 vol.rs。总结vol_window_V230731用“分位分层 窗口极值”的思路把绝对成交量转化为相对量能层级是 czsc 信号体系中兼具抗量纲差异与可解释性的 K 线级特征。理解其参数模板D{di}W{w}M{m}N{n}、四参数语义di/w/m/n、标准七段信号格式以及qcut去重分位边界的 Rust 实现细节是正确使用该信号进行事件驱动策略开发与量能特征工程的基础。赞分享金融科技【免费下载链接】czsc缠中说禅技术分析工具缠论股票期货Quant量化交易项目地址https://gitcode.com/gh_mirrors/cz/czsc点击查看免费下载相关推荐czsc 单K趋势分层信号 bar_single_V230506 完全解析从参数模板到源码实现czsc 单K趋势分层信号 bar_single_V230506 完全解析从参数模板到源码实现 本文是 czsc缠中说禅技术分析工具信号体系Signal金融科技czsc 收盘极值突破信号 bar_break_V240428 全解析从参数模板到 Rust 源码实现czsc 收盘极值突破信号 bar_break_V240428 全解析从参数模板到 Rust 源码实现 本文是 czsc 信号函数系列技术指南之一围绕 ba金融科技czsc 单均线距离分层信号 tas_ma_base_V221203 完全解析参数模板、判定逻辑与 Rust 源码实现czsc 单均线距离分层信号 tas_ma_base_V221203 完全解析参数模板、判定逻辑与 Rust 源码实现 本文基于仓库文档 .claude/sk金融科技上一篇终极指南3分钟掌握Persepolis多语言下载管理器配置技巧下一篇PHPStan property.abstractNonHooked 错误详解PHP 8.4 属性钩子Property Hooks的 abstract 声明规则创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考