news 2026/10/10 2:31:46

czsc 止损信号 pos_fx_stop_V230414:基于开仓点附近分型极值的止损判定实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
czsc 止损信号 pos_fx_stop_V230414:基于开仓点附近分型极值的止损判定实现
  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

导读

pos_fx_stop_V230414是 czsc(缠中说禅技术分析工具)信号库中一个典型的trader 类别持仓管理信号,核心思路是:以某仓位最近一次开仓点为基准,取开仓前最近n个分型(底分型/顶分型)构造止损参考位,用最新价与参考位比较来触发「多头止损/空头止损」判定。本文基于该信号的官方文档,结合其 Rust 源码实现,完整讲解参数模板、判定逻辑、7 段信号格式、调参含义与底层调用链,读者可据此在策略中直接引用该信号或参照实现同类止损逻辑。

信号定位:模块与类别

该信号归属于pos.rs模块,类别为trader(交易员级信号,区别于kline级信号)。它不直接分析单根 K 线,而是依赖「仓位状态 + 缠论结构(分型)」进行持仓管理,与同一模块下的pos_ma_V230414(均线持有状态)、pos_bar_stop_V230524(按 K 线极值止损)、pos_stop_V240331(N 根 K 线追踪止损)等共同构成策略的止损/出场信号族。

参数模板:"{freq1}_{pos_name}N{n}_止损V230414"

参数模板定义了信号名的三段式结构(对应 7 段信号字符串中的k1_k2_k3):

占位符含义示例值
freq1K线周期(信号观察级别)日线、60分钟
pos_name仓位名称(策略中的持仓标识)日线三买多头
n向前取分型数量,默认31、3、5
止损V230414固定后缀(版本标记)固定不变

注意参数模板的书写顺序与最终信号名一致:{freq1}_{pos_name}N{n}_止损V230414,例如日线_日线三买多头N1_止损V230414。其中版本号V230414必须出现在模板中,这是#[signal]过程宏的强制校验规则之一(见下文「宏约束」)。

信号逻辑:用开仓前分型极值构造止损参考位

该信号的核心判定分多头、空头两条分支,其余场景一律记其他:

  • 多头(LO):取开仓时间之前最近n个底分型,计算其中最低的分型低点ll;若最新价跌破ll,记多头止损;
  • 空头(SO):取开仓时间之前最近n个顶分型,计算其中最高的分型高点hh;若最新价突破hh,记空头止损;
  • 其余场景(未持仓、最近操作是平仓、数据不足等)记其他。

语义上,这是典型的「开仓点附近结构位止损」:把开仓前最近的一簇分型极值当作市场在该位置形成的关键支撑/压力位,一旦价格反向穿越,则认为开仓逻辑失效。

信号列表示例

官方文档给出的两个完整信号字符串(7 段格式k1_k2_k3_v1_v2_v3_score):

Signal('日线_日线三买多头N1_止损V230414_多头止损_任意_任意_0') Signal('日线_日线三买多头N1_止损V230414_空头止损_任意_任意_0')

逐段拆解第一个信号:

段值来源
k1日线freq1
k2日线三买多头N1pos_name+N+n
k3止损V230414固定后缀
v1多头止损判定结果(或空头止损/其他)
v2 / v3任意该信号只填充 v1
score0固定默认值

该信号只输出 v1 一个判定值,v2、v3 固定为任意,score 固定为0,因此策略侧通常只需按v1 == "多头止损"或v1 == "空头止损"进行匹配即可。

参数说明

  • pos_name:仓位名称。信号通过last_open_operate(cat, pos_name)在TraderState中按名称查询该仓位的最近一次开仓操作(Operate::LO/SO);若仓位不存在或最近操作为平仓(LE/SE),直接返回其他。因此pos_name必须与策略中实际建立的仓位名严格一致。
  • freq1:K线周期。信号通过cat.get_czsc(freq1)获取该周期对应的 CZSC 缠论解析器(crates/czsc-core/src/analyze/mod.rs),进而读取其分型列表与最新价。周期名需与解析器中注册的级别一致(如日线、60分钟)。
  • n:向前取分型数量,默认3。控制止损参考位的「松紧」:n越小,参考位越贴近开仓点,止损越敏感;n越大,参考位越远,止损越宽松。实际应用中常取 1~5。

源码级实现:核心判定逐行拆解

信号在 crates/czsc-signals/src/pos.rs 中实现为pos_fx_stop_v230414(cat: &dyn TraderState, params: &ParamView) -> Vec<Signal>,函数签名恰好两个参数(TraderState+ParamView),满足#[signal]宏对 trader 类信号「必须有 2 个参数」的编译期约束。

1. 参数解析

let pos_name = get_str_param(params, "pos_name", ""); let freq1 = get_str_param(params, "freq1", ""); let n = get_usize_param(params, "n", 3); let k1 = freq1.to_string(); let k2 = format!("{}N{}", pos_name, n); let k3 = "止损V230414"; let mut v1 = "其他";

get_str_param/get_usize_param定义于 crates/czsc-signals/src/utils/sig.rs,支持从ParamView中读取字符串或数字(含数字字符串)参数,缺失时回退默认值。由此可确认n的默认值为3。

2. 前置校验:无开仓或无解析器直接返回「其他」

let op = match last_open_operate(cat, pos_name) { Some(op) => op, None => return make_signal_v1(&k1, &k2, k3, v1), }; let c = match cat.get_czsc(freq1) { Some(c) => c, None => return make_signal_v1(&k1, &k2, k3, v1), };

last_open_operate(sig.rs)取仓位操作记录的最后一条,若为SE(平空)或LE(平多)则视为无开仓,返回None。这是「其余场景记其他」的第一道闸门。

3. 最新价与分型列表

let latest = latest_price(cat, freq1).unwrap_or(0.0); let fxs = c.get_fx_list();
  • latest_price(sig.rs)优先取TraderState::latest_price()(通常为CzscTrader维护的基础周期最新 close),否则回退到指定级别最后一根 K 线收盘价,见 crates/czsc-trader/src/trader.rs 中CzscTrader对TraderState的实现。
  • get_fx_list(crates/czsc-core/src/analyze/mod.rs)聚合笔内分型与未完成笔分型(bars_ubi),返回带时间戳dt与高低点的FX序列。

4. 多头分支:底分型最低低点

if op.op == Operate::LO { let all: Vec<_> = fxs.iter() .filter(|x| x.mark == Mark::D && x.dt < op.dt) .collect(); let start = all.len().saturating_sub(n); if !all.is_empty() { let ll = all[start..].iter() .fold(f64::INFINITY, |acc, x| acc.min(x.low)); if latest < ll { v1 = "多头止损"; } } }
  • 只保留底分型(Mark::D,见 crates/czsc-core/src/objects/mark.rs 枚举定义,序列化值为「底分型」)且时间早于开仓点(x.dt < op.dt)的分型;
  • saturating_sub(n)保证窗口不会越界,all[start..]即开仓前最近n个底分型;
  • 对窗口内所有底分型的low取最小值ll(初始化为正无穷),作为多头止损参考位;
  • 最新价latest < ll时触发多头止损。

5. 空头分支:顶分型最高高点

if op.op == Operate::SO { let all: Vec<_> = fxs.iter() .filter(|x| x.mark == Mark::G && x.dt < op.dt) .collect(); let start = all.len().saturating_sub(n); if !all.is_empty() { let hh = all[start..].iter() .fold(f64::NEG_INFINITY, |acc, x| acc.max(x.high)); if latest > hh { v1 = "空头止损"; } } }

与多头分支完全镜像:取开仓前最近n个顶分型(Mark::G,序列化值「顶分型」),对high取最大值hh作为空头止损参考位,最新价突破(latest > hh)时记空头止损。

6. 信号构造

make_signal_v1(&k1, &k2, k3, v1)

make_signal_v1(sig.rs)最终调用make_signal7,将k1_k2_k3_v1_v2_v3_score拼为完整字符串并经Signal::from_str严格校验(必须恰好 7 段、score 在 0~100 之间,见 crates/czsc-core/src/objects/signal.rs),故所有输出的信号字符串都是格式合法的。

宏约束与注册:信号如何被纳入系统

pos_fx_stop_v230414通过过程宏#[signal]声明元信息:

#[signal( category = "trader", name = "pos_fx_stop_V230414", template = "{freq1}_{pos_name}N{n}_止损V230414", opcode = "PosFxStopV230414", param_kind = "PosFxStop" )]

宏实现见 crates/czsc-signal-macros/src/lib.rs,编译期强制校验:

  • category必须是kline或trader;
  • name/template/opcode/param_kind均不能为空;
  • 函数名必须包含_v<版本号>且与name的版本后缀一致(pos_fx_stop_v230414↔pos_fx_stop_V230414);
  • template必须包含版本数字(230414)。

注册层面,该信号已进入 trader 信号注册表,crates/czsc-signals/src/registry.rs 中的单元测试test_pos_signal_registry_contains_all_python_pos_functions明确断言pos_fx_stop_V230414已注册,保证其可被策略引擎按名称检索、解析和执行。

使用建议与调参视角

  • 接入方式:在策略配置中以参数模板形式引用该信号,例如为日线三买多头仓位配置日线_日线三买多头N1_止损V230414,并监听多头止损/空头止损两个 v1 值作为平仓触发条件。
  • n 的取舍:n=1只取开仓前最近一个同向分型,参考位最紧、最敏感,适合快节奏出场;n增大后参考位外移,止损空间放宽,适合给趋势更多容错。可结合同模块的pos_bar_stop_V230524(按 K 线极值,n 默认 3、有效范围 1~20)、pos_stop_V240331(N 根 K 线追踪,n 默认 10)等信号横向对比后按品种波动特性选择。
  • 前置条件:信号依赖仓位中存在未平仓的开仓记录,且指定周期解析器可用;未满足时输出其他,策略侧需对「其他」做兜底处理,避免漏掉止损。
  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

相关推荐

上一篇:Arkime Napatech 网卡捕获插件实战指南:NTAPI 零拷贝抓包、NTPL 流分配与硬件时间戳
下一篇:WorkshopDL 使用指南:免 Steam 账号快速下载创意工坊模组

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 2:27:56

TVA具身智能系统简介(13):TVA-EIS感知层的物理状态重构

前沿技术探索:TVA智能体(简称TVA,亦称“TVA视觉智能体”或“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它深度融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智能系统的核心视觉中枢(详见官方技…

作者头像 李华
网站建设 2026/10/10 2:25:34

Stable Preference Optimization for LLMs: A Bilevel Approach Beyond Direct Preference Optimization

文章主要内容和创新点 主要内容 本文聚焦于大型语言模型(LLMs)的偏好对齐问题,针对直接偏好优化(Direct Preference Optimization, DPO)方法的局限性展开研究。 DPO的局限性分析:从概率演化角度对DPO进行了全面理论分析,发现DPO存在三大问题:对初始化高度敏感;可能导…

作者头像 李华
网站建设 2026/10/10 2:24:49

逆向过程技巧分享

1、ua修改当遇到请求需要需要ua时&#xff0c;但是数据又存在加密&#xff0c;需要快速获取数据的情况下可以先点击wifi那个图标&#xff0c;然后Network conditions&#xff0c;下面的user agent 去掉勾选的默认 Use browser default&#xff0c;就可以在下方填入…

作者头像 李华