czsc入门8:Signal信号

czsc\czsc\py\objects.py 中的 Signal 类是一个使用 @dataclass 装饰的数据类,用于在 CZSC(缠中说禅)量化分析系统中 标准化定义和匹配交易信号 。

1. 核心结构

一个标准的信号由 7 个部分 组成,格式为字符串: k1_k2_k3_v1_v2_v3_score 。

2. 关键特性:通配符 "任意"

代码中大量使用了 "任意" 这个默认值( L458-L465 )。在信号匹配时,如果某个位置的值是 "任意" ,则表示忽略该位置的精确匹配,相当于通配符 * 。

3. 核心方法:is_match

这是该类最重要的逻辑( L504-L531 ),用于判断当前市场状态是否满足该信号的条件。

匹配逻辑如下:

  1. 键值查找 :根据 k1_k2_k3 组成的 key,从传入的信号字典 s 中查找实际发生的信号值。
  2. 得分门槛 :实际信号的得分必须 大于等于 当前定义的 score 。
  3. 模糊匹配 :依次比较 v1, v2, v3 。如果定义的值是 "任意" ,或者是完全相同的字符串,则视为匹配。

4. 代码示例

复制代码
from czsc.objects import Signal

# 场景:定义一个策略信号,要求 "60分钟级别 MACD 发生金叉",对 v2/v3 不做要求
# 这里的 score=50 表示要求实际信号得分至少为 50
target_signal = Signal(k1="60分钟", k2="MACD", k3="金叉", v1="向上", v2="任意", v3="
任意", score=50)

# 场景:当前市场实际产生的信号池(通常由分析系统生成)
current_market_signals = {
    # 键 (k1_k2_k3) : 值 (v1_v2_v3_score)
    "60分钟_MACD_金叉": "向上_0轴上_有些强_80" 
}

# 判断是否匹配
is_triggered = target_signal.is_match(current_market_signals)
print(f"信号是否触发: {is_triggered}") 
# 输出: True
# 原因: 
# 1. key "60分钟_MACD_金叉" 存在
# 2. 实际得分 80 >= 目标得分 50
# 3. v1 "向上" == "向上"
# 4. v2 "任意" 匹配 "0轴上"
# 5. v3 "任意" 匹配 "有些强"

总结

Signal 类是连接 策略定义 与 市场分析结果 的桥梁。它允许策略开发者通过配置化的方式(支持模糊匹配和权重过滤)来灵活地表达交易逻辑,而无需硬编码复杂的 if-else 判断。

相关推荐
wuxinyan12329 分钟前
工业级大模型学习之路025:问题解决-检索质量全为0
人工智能·python·学习·langchain
weixin_4080996729 分钟前
2026 图片高清化 API 实战:AI超分辨率重建技术详解 + Python/Java/PHP/C#代码示例
图像处理·人工智能·python·超分辨率重建·石榴智能·图片变清晰·图片高清化api
财经资讯数据_灵砚智能33 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年5月24日
大数据·人工智能·python·信息可视化·自然语言处理
Cloud_Shy61842 分钟前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十二章 用户定义函数 下篇)
python·plotly·数据分析·excel·numpy·pandas
Daydream.V44 分钟前
【Python机器学习/计算机视觉】dlib库超详细入门教程(安装+人脸检测+特征点+人脸识别+视频实时处理)
python·机器学习·计算机视觉·dlib
晚烛1 小时前
CANN 自定义算子开发:Ascend C 编程接口与算子实现完整指南
c语言·开发语言·人工智能·python
MediaTea1 小时前
PyTorch:神经网络模块
人工智能·pytorch·python·深度学习·神经网络
还是鼠鼠2 小时前
AI掘金头条新闻系统 (Toutiao News)-用户注册-生成Token
后端·python·mysql·fastapi·web
TechWayfarer9 小时前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?
开发语言·网络·python·网络协议·tcp/ip
程序员榴莲9 小时前
Python 单例模式
开发语言·python·单例模式