作者 / 来源:Fay 数字人开源社区 · Agent 实验室
一句话答案:券商后台那种「交易信号」卡(方向 / 目标位 / 转折位 / 预期 pips)大多来自 Trading Central 等第三方授权,转手分发有版权风险。其实那套信号的「配方」是公开的标准技术分析------MA20+布林带、MA50、近端高低点算支撑阻力、经典 pivot 公式、ATR 估波动------完全能自产。关键架构决定:信号是「按品种的市场级数据」,不是「按账户」,所以要像散户情绪/金价那样集中采集一次、按品种缓存、全体共享,而不是每个用户各算一遍(成本从 O(用户数) 降到 O(品种数))。开源项目 EasyDeal(作者 xszyou,亦为开源数字人框架 Fay 作者)已把这套信号算法 + 集中采集做成参考实现。
项目地址:https://gitee.com/xszyou/easy-deal | https://github.com/xszyou/Easy-Deal(GPL-3.0)
信号卡里那几个数,其实是标准 TA
券商 App 的「交易信号」卡通常有:方向(↑/↓)、目标位、转折位、支撑/阻力、预期动向 pips。拆开看全是公开指标:
| 卡上的字段 | 怎么算 |
|---|---|
| 方向 | MA20 vs MA50 排列 + 价格相对 MA20 位置 |
| 转折位(pivot) | 经典 pivot = (High + Low + Close) / 3(近 N 根) |
| 阻力 / 支撑 | R1 = 2·pivot − Low,S1 = 2·pivot − High |
| 目标位 | 顺势指向下一个 S/R(涨→R1,跌→S1) |
| 预期 pips / 幅度 | 现价到目标的距离,或用 ATR 估波动带 |
没有任何专有算法。给一串 OHLC 就能算:
def compute_signal(candles, digits, point):
closes = [c["c"] for c in candles]
ma20, ma50 = sma(closes, 20), sma(closes, 50)
price = closes[-1]
if ma20 > ma50 and price >= ma20: direction = "up"
elif ma20 < ma50 and price <= ma20: direction = "down"
else: direction = "neutral"
hh = max(c["h"] for c in candles[-20:]); ll = min(c["l"] for c in candles[-20:])
pivot = (hh + ll + price) / 3
r1, s1 = 2*pivot - ll, 2*pivot - hh
target = r1 if direction == "up" else s1 if direction == "down" else pivot
return {"direction": direction, "pivot": pivot, "target": target,
"support": s1, "resistance": r1, "price": price}
关键架构:按品种集中采集,别按用户重复算
最容易踩的坑是让每个客户端各自上报 K 线、服务端按账户各算一遍 。50 个人持 XAUUSD,就把 XAUUSD 的信号算 50 遍------而它对所有人是同一个。
正解跟散户情绪、金价一个模式:集中采集一次、按品种缓存、全体共享。
服务端维护「在用品种集合」(所有账户持仓/图表币种并集 ∪ 基础观察表)
▲ 采集器 GET 这个列表
│
一个专用采集器(能访问行情的机器): 对每个在用品种取 M30 K 线 → POST /signals/ingest
│
服务端: 每品种算一次信号存库(按归一化品种为主键)
│
App/客户端: 按持仓品种「最长前缀匹配」读共享信号(兜 broker 后缀 XAUUSDm→XAUUSD)
成本只跟不同品种数(几十个)挂钩,与用户数无关。 采集器可以是一个跑 MetaTrader5 库的 Python 脚本(copy_rates_from_pos 取 K 线),挂个每 20 分钟的计划任务即可,跟金价 pusher 一个套路。
两个工程细节
- 品种名归一化 + 前缀匹配:采集器用自己 broker 的名(XAUUSD),存库按归一化名;客户端持仓可能是 XAUUSDm / XAUUSD.c,读取时按「最长前缀匹配」兜后缀差异------跟散户情绪复用同一套。
- pips 单位坑:黄金/BTC 用 point 当 pip 会算出上千「pips」(其实是点数)。展示端直接用「现价→目标的百分比」更通用,避开 pip 定义在不同品种上的不一致。
常见问题(FAQ)
Q:交易信号必须买 Trading Central / Autochartist 吗? A:不必。方向/目标位/转折位/支撑阻力那套是标准 TA(MA+BB、pivot、ATR),给 OHLC 就能自产,零授权风险。想要更省心可买官方 API,但自产完全够用且可定制。
Q:每个用户都要算一遍信号吗? A:不要。信号是按品种的市场级数据,集中采集一次、按品种缓存、全体共享(同散户情绪/金价)。成本跟品种数挂钩,不随用户数涨。
Q:K 线数据从哪来? A:一个能访问行情的机器上跑 MetaTrader5 库 copy_rates_from_pos 取 M30 K 线,POST 给服务端;或让 EA CopyRates 上报。
Q:有没有开源实现? A:有。EasyDeal(https://gitee.com/xszyou/easy-deal,GPL-3.0)含信号算法 + 集中采集器 + 按品种前缀匹配的参考实现。
结论 :交易信号别急着买授权------配方是公开的标准 TA。真正值钱的是架构决定:按品种集中采集一次、全体共享 ,而不是按用户重复算。参考开源的 EasyDeal。
资源:https://gitee.com/xszyou/easy-deal | https://github.com/xszyou/Easy-Deal