ryan
|
4d4dbd27b2
|
feat(去重逻辑): 增强信号去重机制以区分不同动作
Changes:
* 更新去重键计算逻辑,新增动作字段以区分不同的交易动作(如 REDUCE 和 CLOSE)
* 增加单元测试以验证不同动作在相同价格下的去重行为
* 更新文档以反映去重窗口的变化,确保准确性
|
2026-08-25 14:12:34 +08:00 |
|
ryan
|
c7e154d7cc
|
feat(钉钉通道): 支持仅使用 access_token 配置钉钉机器人
Motivation:
钉钉机器人的 webhook 前缀固定不变,要求用户填写完整 URL 冗余且容易出错。简化通道配置项,降低接入配置成本,同时保证存量配置不受影响。
Changes:
* 钉钉通道配置改用 access_token,webhook 前缀由内部固定拼接
* 保留对旧 webhook_url 配置的兼容,access_token 存在时优先生效
* 新增 webhook 地址解析逻辑的单元测试,覆盖优先级与回退场景
* 同步更新 README、HTTP 请求示例及设计文档中的配置示例
* E2E 测试改用 E2E_DINGTALK_ACCESS_TOKEN 环境变量并按新格式创建通道
|
2026-08-19 15:14:38 +08:00 |
|
ryan
|
f7ea2e7cf9
|
feat(crypto策略): 支持巴菲特策略纯 rawMessage 信号推送
Motivation:
新增巴菲特激进/稳健策略(PUTEJJ/PUTEWJ)的跟单推送能力。该类信号仅有 rawMessage、无 action 字段,需按原文直接推送,并过滤启动文案、本地化时间字段。
Changes:
* 支持无 action 的纯 rawMessage 信号,映射为 trade.message 事件
* 新增 not_contains 条件操作符,用于过滤启动文案
* 新增 replace 模板函数,将 Time: 替换为推送时间:
* 补充巴菲特策略模板、规则与渠道配置文档
|
2026-08-17 16:38:09 +08:00 |
|
ryan
|
33b2a96bcf
|
fix(消息去重): 去重键加入来源维度,避免跨来源信号被误去重
Motivation:
不同来源(如 crypto-strategy 与 trade-signal)可能产生策略、币种、周期、方向、价格完全一致的信号,旧去重键仅按这五维计算,导致后到的不同来源信号被误判为重复而漏推,无法支撑跟单策略等新增来源并行推送。
Changes:
* 信号去重键新增来源(source)维度,不同来源的相同信号不再互相去重
* 信号哈希计算时透传来源名称,同一来源内的重复消息仍正常去重
* 补充跟单策略文案模板的渲染测试与接口创建文档
|
2026-08-17 15:39:20 +08:00 |
|
ryan
|
a2c0590353
|
feat(crypto策略): 新增 AG 趋势、异动与波段跟踪信号支持
Motivation:
crypto-strategy 源新增 AG 趋势(AGTS)、异动(AMA)、波段跟踪(BTS) 三类量化策略信号,需与既有 trade.* 事件区分以避免和 AI crypto signals 精确匹配冲突,并为缺省方向提供兜底推导。
Changes:
* 事件名映射按 strategyCode 使用独立前缀(AGTS./AMA./BTS.,HLSS 保持不变)
* direction/side 缺失时依据 isSale 兜底推导为 LONG/SHORT
* 补充三类策略的模板、规则示例文档与渲染/转换测试
|
2026-08-17 11:07:34 +08:00 |
|
ryan
|
a93078dc00
|
fix(时区): 推送时间统一使用 UTC+8 而非服务器本地时区
Motivation:
推送时间原先依赖 time.Local,部署在不同时区的服务器会产生不一致的展示结果。统一为 UTC+8,确保所有订阅者看到的时间固定为北京时间。
Changes:
* 新增 internal/tz 时区工具,集中定义 UTC+8 与格式化逻辑
* 通知、crypto 策略、交易信号的时间渲染统一改用 UTC+8
* 补充测试断言 pushedAt 为 UTC+8 当前时间
* 更新 README 中关于注入时间的说明
Breaking Changes:
所有推送时间字段将按 UTC+8 展示,若服务部署在非 UTC+8 时区且依赖原本地时间行为,输出会发生变化。
|
2026-08-17 01:29:13 +08:00 |
|
ryan
|
d2e8476398
|
feat(规则): 支持同一事件多规则按条件区分并全部发送
Motivation:
止盈、止损等不同策略信号会映射到同一事件(如 trade.close),但原有唯一约束要求每个事件只能有一条规则,无法按策略区分处理。放开该约束后,同一事件可配置多条规则,通过规则条件与精确/通配优先级区分,命中条件的规则全部发送;同时将去重键从消息原文改为信号维度,避免同一信号因时间戳等无关字段差异被误判为重复。
Changes:
* 移除规则 source_id+event 的唯一约束,改为普通索引
* 事件匹配改为返回命中优先级内所有启用规则,并按 ID 逐条派发
* 通知服务遍历多条规则,按条件过滤后聚合发送渠道
* 去重键由消息 body 哈希改为策略/币种/周期/方向/价格信号维度哈希
|
2026-08-17 01:20:49 +08:00 |
|
ryan
|
f5f64f7653
|
feat(crypto策略): 支持 AI 信号止盈止损事件与多字段渲染
Motivation:
区分止盈与止损事件,并为 AI crypto signals 策略提供更丰富的推送内容渲染能力(杠杆、止盈档位、收益、持仓周期等)。
Changes:
* 开仓(多/空,含原 isSale 空单)统一映射为 trade.open,不再发 trade.sell
* 新增 trade.gain 事件用于止盈,止损仍映射为 trade.close;HLSS 策略保持原有事件映射
* 新增 leverageText、tp1~tp5、closeAction、revenueDisplay、holdPeriod 等渲染字段
* 新增收益符号、止盈档位、持仓周期等格式化逻辑
* 补充 AI crypto signals 的模板与规则文档及单元测试
|
2026-08-17 00:54:01 +08:00 |
|
ryan
|
0f9f154969
|
feat(规则): 支持名称代号,便于区分和管理
创建与更新规则时必填全局唯一 name,已有规则迁移回填为 rule-{id}。
|
2026-08-17 00:01:34 +08:00 |
|
ryan
|
14504af950
|
feat(通知): SafeW 只发正文并注入推送时间
去掉渠道标题前缀,模板可用 pushedAt 显示本地推送时间。
|
2026-08-16 01:18:27 +08:00 |
|
ryan
|
a9b6234208
|
feat(通知模板): 支持 case 取值映射与事件名匹配渲染
Motivation:
让通知模板能够将 action、event 等原始枚举值映射为可读中文文案,并支持按事件名后缀匹配;同时简化 SafeW 消息发送格式,避免 Markdown 转义引入的显示问题。
Changes:
* 新增 `case` 模板函数,按值匹配 key/文案并支持末尾奇数参数作为默认值
* `case` 匹配兼容事件名后缀(如 trade.close 匹配 .close)
* `line` 前缀自动去除末尾冒号,避免重复冒号
* 模板渲染前自动注入 event 字段,便于模板按事件名取值
* SafeW 消息改为纯文本发送,移除 MarkdownV2 转义
|
2026-08-16 00:45:27 +08:00 |
|
ryan
|
ae25409e56
|
feat(通知模板): 支持缺字段按空值渲染与空行省略
Motivation:
统一 crypto-strategy 与 trade-signal 两类交易信号的模板字段,使同一套通知模板可复用;字段缺失或为空时不再导致渲染报错或输出空行,通知内容更整洁。
Changes:
* 渲染器缺失字段改为按空值处理,新增 line 函数实现空值整行省略
* crypto-strategy 信号补充止盈价、止损价、平均价、收益额等模板字段
* trade-signal 信号保留原始报文中的额外字段以适配统一模板
* 修复结构化日志将 error 作为值直接输出导致的格式问题
|
2026-08-16 00:19:50 +08:00 |
|
ryan
|
de7a52e81f
|
feat(规则匹配): 事件名支持通配符匹配
Motivation:
通知规则的事件名此前仅支持精确匹配,无法用一条规则覆盖多类事件(如 trade.* 下的全部交易事件),规则配置维护成本高。本次引入通配符匹配,让规则可按模式批量命中事件,同时保证精确规则优先。
Changes:
* 事件名支持 * 和 ? 通配符匹配
* 匹配优先级:精确匹配 > 更具体的通配 > 泛匹配,同分时取更小 ID
* 精确命中未命中时回退为列出源下启用规则并按优先级挑选
* 抽取缓存预热逻辑为独立方法
* 更新文档说明事件名通配规则
|
2026-08-15 23:39:00 +08:00 |
|
ryan
|
6f846a0a3c
|
feat: subscribe to RabbitMQ trade signals and notify by rules
Consume configurable queues, format signals (including period), share NotifyService with HTTP, and drop duplicate bodies within 1h.
|
2026-08-15 17:34:49 +08:00 |
|
ryan
|
bd8a9ff96d
|
feat: 增加 SafeW 已监控群列表接口
通过 getUpdates 将群写入 Redis,供创建/编辑渠道时选择 chat_id,避免前端重复传递 token。
|
2026-08-15 00:40:40 +08:00 |
|
ryan
|
0d0cd0c510
|
feat: 新增 SafeW 出站通知渠道
通过 Bot API sendMessage 投递渲染后的通知,MarkdownV2 自动转义标题与正文。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-08-14 00:58:44 +08:00 |
|
ryan
|
39f3774940
|
feat: 配置列表分页与钉钉机器人分钟级排队限流
统一 sources/templates/channels/rules 列表为分页响应,避免配置增多时全量返回;按钉钉 access_token 限制每分钟发送并在超限时等待下一分钟,降低触发官方封禁风险。
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-08-10 00:34:26 +08:00 |
|
ryan
|
befb099b91
|
feat: add comprehensive README documentation for AIAA Notification Service, detailing core concepts, setup instructions, API endpoints, and configuration options
|
2026-07-31 00:54:03 +08:00 |
|