diff --git a/agent/agent.go b/agent/agent.go index f14b8e51..9ef85fff 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -388,7 +388,7 @@ func (a *Agent) thinkAndActStream(ctx context.Context, userID int64, lang, text return a.noAIFallback(lang, text) } - // No tool calls → done with tool loop + // No tool calls → LLM is done deciding, produce final response if len(resp.ToolCalls) == 0 { if !toolsUsed { // No tools were ever called — the non-streaming probe already has the answer. @@ -397,8 +397,10 @@ func (a *Agent) thinkAndActStream(ctx context.Context, userID int64, lang, text a.history.Add(userID, "assistant", resp.Content) return resp.Content, nil } - // Tools were used in previous rounds, LLM gave final answer without streaming. - // This shouldn't normally happen (we break and stream below), but handle it. + // Tools were used in previous rounds. Stream the final response + // for better UX (the non-streaming probe gave us text, but for + // consistency with the streaming contract, re-request with streaming). + // However, resp.Content already has the answer so just emit it. onEvent(StreamEventDelta, resp.Content) a.history.Add(userID, "assistant", resp.Content) return resp.Content, nil @@ -420,20 +422,17 @@ func (a *Agent) thinkAndActStream(ctx context.Context, userID int64, lang, text messages = append(messages, mcp.Message{Role: "tool", Content: result, ToolCallID: tc.ID}) } - // After tool execution, stream the next LLM response for real-time UX. - // Omit tools so LLM can't start another tool round — it must produce text. - streamReq := &mcp.Request{Messages: messages, Ctx: ctx} - streamText, streamErr := a.aiClient.CallWithRequestStream(streamReq, func(chunk string) { - onEvent(StreamEventDelta, chunk) - }) - if streamErr != nil { - a.logger.Error("stream post-tool response failed", "error", streamErr, "round", round) - return a.noAIFallback(lang, text) + // If this is the last allowed round, break to stream the final response below. + // Otherwise, continue loop — next iteration's CallWithRequestFull will check + // if LLM wants more tools. + if round == maxToolRounds-1 { + break } - a.history.Add(userID, "assistant", streamText) - return streamText, nil } + // Stream the final response after all tool rounds are complete. + // Omit tools so LLM produces text, not more tool calls. + // Exhausted all tool rounds — stream the final synthesis response finalReq := &mcp.Request{Messages: messages, Ctx: ctx} finalText, err := a.aiClient.CallWithRequestStream(finalReq, func(chunk string) { diff --git a/docs/NOFXi-Investor-Deck.md b/docs/NOFXi-Investor-Deck.md new file mode 100644 index 00000000..2ea11cab --- /dev/null +++ b/docs/NOFXi-Investor-Deck.md @@ -0,0 +1,250 @@ +# NOFXi — The AI That Trades For You + +> **一句话:NOFXi 是全球首个跨市场 AI 交易 Agent,它越用越懂你,让每个人都拥有自己的 AI 交易团队。** + +--- + +## 问题:万亿美元市场的痛 + +全球散户交易者超过 **1.5 亿人**,管理着超过 **70 万亿美元**的资产。但他们面临三个致命问题: + +### 😩 信息过载,决策瘫痪 +- 加密货币 24/7 不停盘,美股港股 A 股时区不同 +- Twitter 一条推文、一份 CPI 数据、一次鲸鱼转账,都可能引发剧烈波动 +- 散户不可能全天候盯盘,错过就是真金白银 + +### 🔧 工具割裂,操作低效 +- 看加密用 TradingView,炒美股用 Robinhood,做港股用富途 +- 每个平台一套逻辑,一套密码,一套 UI +- **没有人能同时管理多个市场** — 除非你有一个团队 + +### 🧠 量化是富人的游戏 +- 顶级量化策略年化 30-100%,但需要 Python + 数据工程 + 百万级资金门槛 +- 散户只能追涨杀跌,用"感觉"交易 +- **信息不对称 = 财富不对等** + +--- + +## 解决方案:NOFXi + +### NOFXi 不是一个交易工具。它是你的 AI 交易团队。 + +想象你雇了一个私人交易员: +- 他 **24/7 在线**,永远不休息 +- 他同时看着 **加密货币、美股、港股** 三个市场 +- 他记得你的每一笔交易,**从你的成功和失败中学习** +- 你用 **自然语言** 跟他沟通 —「美股跌太多了,帮我抄底 NVDA」 +- 他不是一个人 — 他背后是一个 **AI 投研团队**,多空辩论后才下单 + +这就是 NOFXi。 + +--- + +## 五大核心能力 + +### 🧠 1. 交易记忆网络 — 越用越聪明 + +**传统工具是无记忆的。** 你用了三年的 TradingView,它依然不知道你是谁。 + +NOFXi 不一样: +- 每一笔交易都在积累 **交易记忆** — 不是简单的交易记录,是经验和直觉 +- 它知道你在 BTC 暴跌时容易恐慌卖出,会**提前提醒你冷静** +- 它记得上次美联储加息时你的持仓表现,会**主动调整策略** +- 用了三个月的 NOFXi 和新用户的完全不同 — **它长成了你的形状** + +**护城河:** 用户迁移成本极高。你可以换一个交易软件,但你换不掉一个了解你交易风格的 AI 伙伴。 + +> 💡 类比:Spotify 的推荐算法用了几年才懂你的音乐品味。NOFXi 用几个月就能读懂你的交易性格。 + +--- + +### ⚔️ 2. 多 AI 博弈决策 — 不是一个模型,是一支投研团队 + +**一个 AI 做交易 = 一个分析师拍脑袋。** + +华尔街的决策流程是:分析师出报告 → 交易员制定方案 → 风控审核 → 执行。NOFXi 把这个流程 AI 化: + +- **多头分析师**(AI #1):寻找做多理由 +- **空头分析师**(AI #2):寻找做空理由和风险 +- **策略师**(AI #3):综合多空观点,制定交易方案 +- **风控官**(AI #4):审核方案,检查仓位/杠杆/止损是否合理 +- **执行员**:只有通过风控审核的交易才会执行 + +**这不是噱头。** 这是机构级的决策框架,首次用 AI 实现并普惠到每一个散户。 + +**护城河:** 多 AI 博弈的 prompt 工程、决策权重、冲突解决机制 — 这些 know-how 需要大量实战迭代,不是开源代码能复制的。 + +--- + +### 🌍 3. 全市场统一 Agent — 一个大脑管所有资产 + +**现状:** 加密货币、美股、港股、A股 — 四个市场,四个工具,四种逻辑。 + +**NOFXi:** 一个 Agent,一个对话框,管理你的所有资产。 + +实际场景: +- 「BTC 大跌了,帮我把 30% 仓位转移到黄金 ETF 避险」 +- 「美股盘前看看科技股,如果 NVDA 跌超 3% 帮我抄底」 +- 「港股通买入腾讯 1000 股,同时在 Binance 做空等量的 crypto 对冲」 + +**这是真正的跨市场资产管理。** 目前市场上没有产品能做到这一点。 + +**护城河:** +- 技术复杂度:9 家加密交易所 + Alpaca(美股)+ LongPort(港股)+ 沪港通(A股),每个都有不同的 API、结算规则、交易时段 +- 跨市场策略积累:对冲、轮动、套利 — 这些策略在单一市场工具上根本无法实现 +- **先发优势:** 第一个做到的就是标准制定者 + +**已接入:** + +| 市场 | 交易所/券商 | 状态 | +|------|-----------|------| +| 加密货币 | Binance, Bybit, OKX, Bitget, KuCoin, Gate, Hyperliquid, Aster, Lighter | ✅ 已上线 | +| 美股 | Alpaca (Paper + Live) | 🔨 开发中 | +| 港股 | LongPort 长桥 | 📋 设计完成 | +| A股 | 沪港通 | 📋 规划中 | + +--- + +### 🏪 4. 记忆市场 — 复制交易员的大脑,不是操作 + +**eToro 的 Copy Trading 让你复制别人的交易操作。但操作不等于智慧。** + +NOFXi 的记忆市场是一个全新的范式: + +- 顶级交易员可以将自己的 **Agent 记忆** 打包出售 +- 你买到的不是一串交易信号 — 是他的 **风险偏好、判断框架、踩过的坑** +- 你可以在他的记忆基础上继续训练,让 Agent 同时拥有**你的习惯 + 他的经验** + +**商业模型:** +- 交易员上传记忆 → 定价(月订阅 / 一次性购买) +- 平台抽成 20-30% +- 记忆有评分系统(基于实盘表现的胜率、最大回撤、夏普比率) +- **顶级记忆可以卖到数千甚至数万美元** — 因为它代表的是真实的交易智慧 + +**护城河:** 网络效应。用户越多 → 记忆越丰富 → 平台越有价值 → 新用户越想来。这是一个自增强飞轮。 + +> 💡 类比:GitHub 是代码的网络,NOFXi 是交易智慧的网络。 + +--- + +### 💬 5. 自然语言策略 — 说人话,做量化 + +**传统量化需要:** Python + pandas + backtrader + 数据清洗 + 服务器部署 = 半年学习 + 百万资金门槛。 + +**NOFXi 只需要一句话:** + +> 「当 BTC 的 RSI 低于 30,同时美股期货是绿的,用 10% 仓位做多 BTC,止损 3%,止盈 8%」 + +NOFXi 做什么: +1. **理解语义** — 解析你的策略意图 +2. **转化为可执行规则** — 自动绑定指标、触发条件、风控参数 +3. **7×24 监控** — 条件满足自动执行 +4. **持续复盘** — 策略执行后自动评估表现,建议优化 + +**这是量化民主化。** 让知识成为门槛,而不是编程能力。 + +**护城河:** 自然语言到交易策略的语义理解是一个极其困难的 NLP 问题 — 模糊表述、缺失参数、矛盾条件都需要处理。这需要大量真实用户数据的迭代。 + +--- + +## 技术壁垒 + +### 为什么别人做不了? + +| 壁垒 | 说明 | +|------|------| +| **多市场管道工程** | 9 家 CEX + 美股 + 港股 + A股,每个 API 不同,结算规则不同,时区不同。光是对接就需要数万行代码,维护更是无底洞 | +| **交易记忆模型** | 不是简单的数据库。需要将用户行为、市场环境、决策结果三者关联,形成可迁移的"经验向量" | +| **多 AI 博弈框架** | 多个 LLM 实时辩论并达成共识,需要精密的 prompt 工程和冲突解决机制 | +| **自然语言策略引擎** | 从模糊的人类表述到精确的量化规则,容错率要求极高 — 一个误解可能导致真金白银的损失 | +| **实战数据飞轮** | 每一笔真实交易都在训练系统。竞品从零开始,我们已经在积累 | + +### 不是开源能解决的 + +NOFXi 的核心代码确实使用了开源组件(Go, React, LLM API)。但护城河不在代码本身: + +- **数据护城河** — 用户交易记忆、策略执行数据、跨市场关联数据 +- **Know-how 护城河** — 多 AI 决策的权重调优、记忆压缩算法、自然语言策略的容错机制 +- **网络效应护城河** — 记忆市场的供需双边网络 + +> 💡 类比:Twitter 的代码很简单,但没人能复制 Twitter 的网络。 + +--- + +## 市场机会 + +### TAM(Total Addressable Market) + +| 市场 | 规模 | 来源 | +|------|------|------| +| 全球散户交易市场 | $70T+ 资产 | World Federation of Exchanges | +| 加密交易工具 | $3.2B (2025) → $12B (2030) | Grand View Research | +| 智能投顾 | $5.9T AUM (2025) → $16T (2030) | Statista | +| Copy Trading | $2.2B (2025) → $4B (2028) | MarketsandMarkets | + +### 切入路径 + +**Phase 1 — 加密交易者(现在)** +- 7×24 市场,用户对 AI 工具接受度最高 +- 已接入 9 家交易所,产品可用 +- 目标:1000 活跃用户,验证 PMF + +**Phase 2 — 跨市场交易者(Q3 2026)** +- 加入美股 + 港股,吸引更高净值用户 +- 记忆市场上线,开启平台效应 +- 目标:10,000 用户,月交易量 $100M+ + +**Phase 3 — 智能资产管理(2027)** +- DeFi + CeFi + TradFi 三位一体 +- 从交易工具进化为资产管理 Agent +- 目标:100,000 用户,AUM $1B+ + +--- + +## 竞品对比 + +| 维度 | 3Commas | Pionex | eToro | 量化平台 | **NOFXi** | +|------|---------|--------|-------|---------|-----------| +| 加密交易 | ✅ | ✅ | ✅ | ✅ | ✅ | +| 美股/港股 | ❌ | ❌ | ✅(有限) | 部分 | ✅ | +| AI 自主决策 | ❌ | ❌ | ❌ | 部分 | ✅ | +| 多 AI 博弈 | ❌ | ❌ | ❌ | ❌ | ✅ | +| 交易记忆 | ❌ | ❌ | ❌ | ❌ | ✅ | +| 自然语言策略 | ❌ | ❌ | ❌ | ❌ | ✅ | +| 记忆市场 | ❌ | ❌ | Copy Trade | ❌ | ✅ | +| 跨市场对冲 | ❌ | ❌ | ❌ | ❌ | ✅ | + +**NOFXi 不是在现有赛道里做得更好 — 它开辟了一个新赛道。** + +--- + +## 商业模式 + +| 收入来源 | 模式 | 预期 | +|---------|------|------| +| **Pro 订阅** | $29-99/月,解锁高级 AI 模型 + 更多交易对 + 更长记忆 | 主要收入 | +| **记忆市场抽成** | 交易员出售记忆,平台抽 20-30% | 平台收入 | +| **交易量分成** | 与交易所合作,交易量返佣 | 被动收入 | +| **企业版** | 为基金/机构定制 Agent | 高客单价 | + +--- + +## 团队(待补充) + +_[这里需要补充团队背景]_ + +--- + +## 融资需求(待补充) + +_[融资金额、用途、里程碑]_ + +--- + +## 一句话总结 + +> **NOFXi 正在构建交易智慧的网络。每个用户都在训练自己的 AI 交易团队,每个交易员的经验都能被分享和增值。这不是又一个交易工具 — 这是交易的未来。** + +--- + +*NOFXi — Trade Smarter, Together.* diff --git a/docs/NOFXi-Investor-Deck.pptx b/docs/NOFXi-Investor-Deck.pptx new file mode 100644 index 00000000..c2a3625a Binary files /dev/null and b/docs/NOFXi-Investor-Deck.pptx differ diff --git a/docs/NOFXi-Teaser-Final.md b/docs/NOFXi-Teaser-Final.md new file mode 100644 index 00000000..1bf1349e --- /dev/null +++ b/docs/NOFXi-Teaser-Final.md @@ -0,0 +1,244 @@ +# NOFXi + +NOFX:GitHub 11,132 star,2,853 fork,峰值数万月活用户,真实交易收入。9 家主流加密交易所实盘运行。我们把它升级成了 AI 原生版。 + +NOFXi 是垂直于交易领域的 AI Agent。大模型让交易意图表达变简单,Agent 架构让执行变自动化,NOFX 的引擎让执行变专业。三者合一:简单、专业、可自动化。 + +--- + +## 这件事为什么现在能做 + +三个条件在 2026 年同时成熟。 + +Reasoning model(o3、DeepSeek-R1)让 AI 第一次能处理多步骤交易决策——综合多个指标、多个时间框架、多个市场的复杂判断。一年前的模型做不到这一点。 + +Agent 协议标准化了。MCP、Tool Calling、Skill 架构这些基础设施成熟了,AI 能真正调用外部工具、持续运行、自主决策。交易是这套能力最天然的落地场景。 + +监管态度在松动。Composer 拿到了 SEC 注册,Alpaca 作为 API-first 券商服务了大量第三方。监管开始接受 AI 辅助交易,前提是人类保留最终决策权。 + +窗口打开了。但 AI 能理解交易意图只是起点,能可靠地执行才是终点。 + +--- + +## 30 秒理解 NOFXi 在做什么 + +> Alice 在 Telegram 对 NOFXi 说:「BTC 跌破 6 万了,帮我在 Binance 做多 0.5 BTC,止损 3%,同时在 Alpaca 买入 $5000 的黄金 ETF 对冲。」 +> +> NOFXi 30 秒内查询了两个市场的实时价格,计算仓位和止损点位,生成两笔待确认订单。Alice 点了确认,两笔单同时执行。 +> +> 第二天 BTC 继续跌,触发止损,NOFXi 自动平仓并通知 Alice。总亏损控制在预设范围内,黄金 ETF 还在盈利。 +> +> 整个过程 Alice 没有打开过任何交易所 App。 + +一个对话框,跨两个市场,自动执行,风险可控。这就是 NOFXi。 + +--- + +## 第一件事:让智能交易即插即用 + +今天想让 AI 帮你交易,流程是这样:装 Agent 平台折腾环境,找交易 Skill 一个个装,去交易所申请 API Key 搞权限配置,发现 Skill 之间不兼容或交易所接口又改了。大部分人在这个过程中放弃。 + +NOFXi 把这个流程压缩到一步。预装全套交易 Skill,交易所配置统一化,Skill 之间的依赖和协同出厂就是通的。异动监控发现机会 → Agent 分析判断 → 交易引擎下单 → 风控同步检查,这条链路不需要用户自己搭。 + +为什么我们能做到这一点:不是从零做起。NOFX 已经把交易引擎跑通了——9 家交易所的对接、策略执行、风控机制。NOFXi 是在这个成熟引擎上加 Agent 层,不是同时做十件事。 + +--- + +## 一套协议覆盖所有市场 + +NOFXi 把不同交易所和券商的差异抹平在统一的执行协议下。 + +为什么这件事比看起来难:Binance 和 Bybit 的保证金计算方式不同。Hyperliquid 是链上合约,有 gas 和滑点问题。OKX 的止损单在持仓模式切换后行为会变。每家的精度、错误码、WebSocket 格式全不一样。15,000+ 行对接代码处理的就是这些差异。新交易所接入周期从行业平均数月压缩到 1-2 周。 + +目前状态: +- 加密货币 9 家交易所已上线运行(Binance、Bybit、OKX、Bitget、KuCoin、Gate、Hyperliquid、Aster、Lighter) +- 美股通过 Alpaca 接入开发中 +- 港股通过长桥设计完成 + +后续规划:A 股通过沪港通、更多券商接入。 + +跨市场能力不只是功能卖点。加密市场有强周期性,牛市万人用熊市剩百人。覆盖美股和港股意味着 NOFXi 不依赖单一市场周期,用户在任何行情下都有理由留在平台上。 + +--- + +## 让 AI 可被信任地交易 + +交易场景下 LLM 幻觉不是错误回答,是真金白银的损失。我们在实战中遇到过 AI 编造股票价格、编造持仓记录的情况。 + +解决方案不是加 prompt,是架构层的硬约束: + +- 所有交易数据必须从交易所 API 实时获取,AI 被禁止从训练数据输出任何价格或持仓信息 +- 每笔交易生成待确认订单,用户确认后才执行,5 分钟未确认自动取消 +- 连续亏损达阈值时系统自动熔断,独立于 AI 决策 +- 系统任何单点故障都不会影响用户的持仓安全 + +这些是被动踩坑得来的经验。但更重要的是主动安全机制:代码开源可审计、定期安全审查、API Key 本地存储不上传(自部署版)或 AES-256 加密存储且只需交易权限不需提款权限(云端版)。 + +底层模型采用无关架构,支持 GPT、Claude、DeepSeek 等主流 LLM 热切换。不绑定任何一家模型供应商,模型涨价或不可用时可以无缝切换。 + +--- + +## 核心能力封装好了,生态还能无限扩展 + +NOFXi 的核心交易能力是封闭打磨的——行情、下单、风控、监控、策略这些预装 Skill 经过真实交易验证,质量我们自己把控。 + +在核心之上,NOFXi 的 Skill 架构允许第三方接入。一个外部服务要接进来,写一份描述文件、封装工具接口,Agent 自动学会调用,不用改 NOFXi 代码。 + +这打开了几个方向: + +- VergeX(我们的另一个产品,定位 AI Trading Layer)的社区策略可以直接被 NOFXi 用户订阅执行。两个产品独立运营,互相导流 +- 第三方量化团队的信号、链上数据(Nansen)、情绪数据(Santiment)、财经新闻都可以作为 Skill 接入 +- 新交易所和券商接入周期 1-2 周 +- 风控服务、回测工具、税务计算都可以扩展 + +类比 iPhone + App Store:核心体验苹果自己做,生态应用第三方做。NOFXi 的能力天花板不取决于团队规模,取决于有多少优秀供应商接进来。 + +--- + +## 竞品都只做了一块 + +3Commas 和 Pionex 有百万用户,但它们是参数化机器人,不是 AI。Composer 拿了 YC 做自然语言策略,但只做美股、闭源不可扩展。ElizaOS 是开源 Agent 框架,但交易能力几乎为零。AlgosOne 做全自动 AI 交易,完全黑箱。 + +| | AI 对话 | 跨市场 | 安全层 | 开箱即用 | 可扩展 | 开源 | +|---|---|---|---|---|---|---| +| **NOFXi** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| 3Commas | ❌ | ❌ | ⚠️ | ✅ | ❌ | ❌ | +| Composer | ✅ | 美股 only | ⚠️ | ✅ | ❌ | ❌ | +| ElizaOS | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | +| AlgosOne | ❌ | 部分 | ❌ 黑箱 | ✅ | ❌ | ❌ | + +为什么别人只做了一块?因为同时做好 Agent 架构和交易工程需要两个领域的深度。大部分团队只有其中一个。我们的情况不同:NOFX 已经把交易引擎跑通了(11K star 证明了这一点),NOFXi 是在已有引擎上加 Agent 层,不是从零全铺。 + +--- + +## 市场有多大 + +- 全球加密衍生品日交易量 $100B+,散户交易者 5000 万+ +- 全球股票散户交易者 1.5 亿+,管理资产 $70T+ +- AI 交易工具市场 $3.2B(2025)→ $12B(2030) +- 智能投顾 AUM $5.9T(2025)→ $16T(2030) +- AI 交易工具在散户中的渗透率不到 1% + +切入点:从加密交易者开始(7×24、AI 接受度最高、监管最宽松),向美股港股扩展。 + +--- + +## 怎么卖 + +第一步:存量转化。NOFX 社区 11K star 是天然种子用户,通过 GitHub、Discord、Telegram 直接触达。 + +第二步:交易社区渗透。TradingView、币安广场、Twitter 交易 KOL 合作。NOFXi 即插即用的特性让 KOL 可以直接演示完整流程。 + +第三步:交易所 BD。与交易所合作推广,交易所获得交易量增长,我们获得返佣和渠道。 + +第四步:Skill 生态驱动。第三方策略供应商在 NOFXi 上发布策略自带流量,每多一个优质策略就多一批用户。 + +关键指标链路:开源安装量 → Pro 转化率 → 月活交易用户 → 平台交易量。 + +--- + +## 怎么赚钱 + +**订阅**:开源版免费获客。Pro 约 99 元/月(云端托管 + 核心 Skill)。Premium 约 299 元/月(全市场 + 高级风控)。Enterprise 面议。对比:量化实盘年费 3000+ 元,NOFXi Pro 年费约 1200 元。 + +**交易所返佣**:用户交易量带来的返佣,加密交易所通常 20-40%。随规模线性增长的被动收入。 + +**Skill 生态抽成**:第三方付费 Skill 平台抽成 20-30%。App Store 模式。 + +**机构服务**:基金和资管的定制 Agent。高客单价,长期合同。 + +--- + +## 开源与商业化 + +核心 Agent 和交易引擎开源。云端服务和高级 Skill 付费。 + +开源的价值:获客成本接近零、社区帮助迭代、代码可审计建立信任。 + +竞品 fork 怎么办:开源世界同品类只剩一个赢家。11K star 的社区在持续迭代,fork 拿到的是快照,拿不走社区和持续维护能力。 + +--- + +## 合规 + +不托管资金。用户的钱始终在用户自己的交易所和券商账户。API Key 只需交易权限,不需提款权限。 + +人机协同 = 人类保留最终决策权。法律上是辅助工具。Composer 已拿到 SEC 注册,路径验证过。 + +渐进式进入:加密先行,美股通过持牌券商 Alpaca,港股通过持牌券商长桥。借助已有合规基础设施,不自己拿牌照。 + +开源 = 每行代码可审计。 + +--- + +## 技术架构 + +NOFXi 构建在 OpenClaw Agent 架构之上。OpenClaw 是开源通用 AI Agent 框架,提供运行时、Skill 加载和工具调用协议。NOFXi 专注交易领域深度。 + +关系类似 App 与操作系统。好处:不从零搭框架,OpenClaw 社区通用能力可直接复用。风险可控:OpenClaw 开源无锁定,必要时可 fork 独立演进。 + +--- + +## 关于壁垒 + +执行层的可靠性需要真实交易场景的持续迭代。9 家交易所、上万笔真实交易积累的工程经验,不是复制代码能获得的。 + +11K star 的社区是自增强的飞轮:用户多 → 贡献者多 → 产品更好 → 用户更多。开源世界先跑起来的项目会变成标准。 + +Skill 生态是另一层:用户用的 Skill 越多,迁移成本越高。供应商越多,用户越多,供应商越想接入。 + +交易领域的信任壁垒尤其高。用户把真钱放进来,没有 track record 的新产品没人敢用。NOFX 万级用户验证过的安全性,这个信任需要时间积累。 + +--- + +## 这件事做大了会变成什么 + +短期:交易者的 AI 助手,覆盖加密和美股。 + +中期:跨市场交易的标准入口。用户不需要关心背后连的是哪个交易所和券商,NOFXi 是统一界面。第三方 Skill 生态形成后,平台效应开始发挥。 + +长期:AI Agent 做交易这件事的基础设施层。当 AI Agent 成为每个人的标配时,它们需要一个可靠的交易执行层。NOFXi 就是那个层。 + +对标参考:Stripe 不开银行,只做支付接口,现在估值 $65B。NOFXi 不开交易所,只做 AI 交易执行层。 + +--- + +## 团队 + +[待补充] + +## 融资 + +[待补充] + +--- + +## 我们自己问过自己的问题 + +### 11K star 能转化多少付费用户? + +开源转商业化的转化率通常 1-3%。11K star 也不等于 11K 活跃用户。我们不指望 star 直接变收入。star 的价值是品牌认知和信任背书——用户选交易工具时,万人社区验证过的项目 vs 全新项目,决策成本完全不同。真正的付费转化靠产品体验和交易价值。 + +### 跨市场是不是摊太薄了? + +加密、美股、港股、A 股是四个不同的世界。我们不打算同时做。路径是:加密先跑通(已完成),美股跟上(在做),港股和 A 股是中长期。每进一个新市场,前提是上一个已稳定运行。统一协议让新市场接入边际成本可控,但我们不会为叙事牺牲深度。 + +### 99 元/月是不是太低? + +刻意的。第一阶段目标是用户规模不是 ARPU。量化实盘年费 3000+ 的用户已有方案,我们要抓被价格挡在门外的更大群体。后续通过 Premium 和 Enterprise 拉高客单价,交易所返佣随量增长。当前用户增长优先于利润率。 + +### 竞品加个 AI 功能不就追上了? + +可能的。3Commas 加 AI 对话、Composer 做加密、ElizaOS 加交易 Skill——都有可能。但他们各自要跨的那一步都不小。3Commas 围绕参数化规则设计,加 AI 意味着重写核心决策层。Composer 进加密要对接 9 家交易所。ElizaOS 加交易要从零建安全层。每一步至少半年。我们的优势不是他们做不了,是我们已经做了。窗口是这半年到一年。 + +### 极端行情、交易所宕机、用户索赔怎么办? + +交易所宕机:支持多交易所分仓,单一交易所不可用不影响其他仓位。极端滑点:熔断机制在异常波动时暂停开新仓,但已有仓位滑点风险无法完全消除,用户协议中明确。法律免责:定位交易辅助工具,不提供投资建议,不做资金托管,用户协议明确风险责任,上线前经法律审查。 + +### 依赖 OpenClaw 的风险? + +OpenClaw 开源,代码在手,不存在供应商锁定。最坏情况社区停止维护——fork 继续演进,成本是增加底层维护。当前风险很低,社区活跃,团队对架构有深入理解。核心价值在交易层不在框架层。框架可替换,15,000 行交易代码和 9 家交易所经验不可替换。 + +### Stripe 类比是不是太大了? + +是的。Stripe 的 TAM 是万亿级,NOFXi 是百亿级。我们不是说自己会成为 Stripe,是说商业模式结构相似:不做交易所,做连接层和执行层,按交易量和服务收费。在百亿级市场做到头部,对早期投资的回报倍数已经足够。 diff --git a/docs/NOFXi-Teaser.md b/docs/NOFXi-Teaser.md new file mode 100644 index 00000000..20481b4a --- /dev/null +++ b/docs/NOFXi-Teaser.md @@ -0,0 +1,235 @@ +# NOFXi Teaser + +NOFX:GitHub 11,132 star,2,853 fork,峰值数万活跃用户,真实交易收入。9 家主流交易所实盘对接。我们把它升级成了 AI 原生版。 + +NOFXi 是一个垂直于交易领域的 AI Agent。大模型让交易意图表达变简单,Agent 架构让执行变自动化,NOFX 的交易引擎让执行变专业。三者合一,让用户的交易同时做到简单、专业、可自动化。 + +--- + +## 这件事为什么现在能做 + +三个条件在 2026 年同时成熟了: + +第一,模型能力到了拐点。Reasoning model(o3、DeepSeek-R1)的出现让 AI 第一次能处理多步骤交易决策——不是简单的"RSI 低了就买",而是综合多个指标、多个时间框架、多个市场的复杂判断。这在一年前的模型上做不到。 + +第二,Agent 协议标准化了。MCP(Model Context Protocol)、Tool Calling、Skill 架构这些基础设施成熟了。AI 不再只能聊天,它能真正调用外部工具、持续运行、自主决策。交易是这套能力最天然的应用场景。 + +第三,监管态度在松动。Composer 在美国拿到了 SEC 注册。Alpaca 作为 API-first 券商服务了大量第三方交易应用。监管开始接受"AI 辅助交易"的定位,前提是人类保留最终决策权。 + +窗口已经打开。但进入真实资金场景后,把链路跑通只是第一步。AI 会编造数据、交易所之间差异巨大、风控缺失、跨市场没人做——这些才是真正的门槛。 + +--- + +## 一个具体场景 + +> Alice 在 Telegram 对 NOFXi 说:「BTC 跌破 6 万了,帮我在 Binance 做多 0.5 BTC,止损 3%,同时在 Alpaca 买入 $5000 的黄金 ETF 对冲。」 +> +> NOFXi 30 秒内做了四件事:查询 Binance 和 Alpaca 的实时价格、计算仓位和止损点位、生成两笔待确认订单。Alice 在 Telegram 里点了确认,两笔单同时执行。 +> +> 第二天 BTC 继续跌,触发止损。NOFXi 自动平仓并通知 Alice,总亏损控制在预设的 3% 以内。黄金 ETF 那边还在盈利。 +> +> 整个过程 Alice 没有打开过任何交易所 App。 + +这就是 NOFXi 在做的事。下面讲我们怎么做到的。 + +--- + +## 从安装到第一笔交易:5 分钟 + +现在想让 AI 帮你交易,流程是这样的:装 Agent 平台、折腾环境、找交易 Skill 一个个装、去交易所申请 API Key 搞权限、发现 Skill 之间不兼容。大部分人在这里放弃了。 + +NOFXi 把这个流程压缩到一步。一键安装,预装全套交易 Skill,交易所配置统一化。Skill 之间的依赖和协同出厂就是通的——异动监控发现机会、通知 Agent、Agent 调交易引擎下单、同时触发风控。这条链路不需要用户自己搭。 + +这不性感,但这是一切后续价值的前提。 + +--- + +## 一套协议抹平所有市场差异 + +NOFXi 定义了一个 12 方法的 Trader Interface,把不同交易所和券商的差异全部抹平在协议层内部。 + +为什么这件事难:Binance 和 Bybit 的保证金计算不同。Hyperliquid 是链上合约,有 gas 和滑点。OKX 的止损单在持仓模式切换后行为会变。每家交易所的精度、错误码、WebSocket 格式全都不一样。 + +这不是写一层 wrapper 就行的。15,000+ 行交易所对接代码,9 家加密交易所(Binance、Bybit、OKX、Bitget、KuCoin、Gate、Hyperliquid、Aster、Lighter)已上线运行。美股通过 Alpaca 接入开发中,港股通过长桥设计完成,A 股通过沪港通规划中。 + +已完成的部分在真实资金环境验证过。未完成的部分路径清晰、技术方案确定。 + +--- + +## 让 AI 可被信任地下单 + +交易场景下 LLM 的幻觉不是一条错误回答,是一笔真金白银的损失。我们在实战中遇到过 AI 编造股票价格、编造持仓记录、不调工具直接胡说的情况。 + +解决方案不是加一条 prompt,是在架构层面做硬约束: + +- 所有价格、持仓、余额数据必须从交易所 API 实时获取,AI 被禁止从训练数据输出任何交易数据 +- 每笔交易生成待确认订单,用户确认后才执行,5 分钟未确认自动取消 +- 连续亏损达阈值时系统自动停止开新仓,独立于 AI 决策的硬编码保护 +- 系统任何单点故障都不会影响用户的持仓安全 + +这些约束都是踩坑踩出来的。每一条背后有具体的事故场景。 + +API Key 安全:开源自部署版本中,API Key 存储在用户本地,不上传到任何服务器。云端托管版本中,API Key 使用 AES-256 加密存储,且只需要交易权限,不需要提款权限——即使泄露,攻击者也无法转走资金。 + +--- + +## 开箱有 Skill,不是空壳 + +ElizaOS 给你一个空的 Agent 骨架,交易能力自己搭。NOFXi 装上就有东西。 + +预装的不是 demo:多交易所执行(9 家差异全部处理)、异动监控(价格+量能+费率+持仓量多维度交叉验证)、跨市场行情(加密+美股+港股+A股+盘前盘后)、策略工作室(可视化构建,不用写代码)、智能下单(确认+风控+熔断三层安全)。 + +每一个 Skill 在真实交易中跑过,处理过边界情况,修过 bug。 + +--- + +## 能接任何优秀的第三方 + +NOFXi 基于 Skill 架构,天然支持第三方扩展。一个外部服务要接进来,写一份描述文件、封装几个工具接口,Agent 自动学会调用。不用改 NOFXi 代码。 + +这意味着: + +- VergeX(我们的另一个产品,AI Trading Layer,社区驱动策略)的策略可以直接在 NOFXi 中被用户订阅和执行。两个产品各自独立发展,互相增强 +- 第三方量化团队、信号服务商、数据供应商(链上数据、情绪数据、财经新闻)都可以作为 Skill 接入 +- 新的交易所和券商实现 12 个方法即可接入,社区可以贡献 +- 风控服务、回测工具、税务计算都可以扩展 + +NOFXi 的能力天花板不取决于我们团队有多少人,取决于有多少优秀的供应商接进来。 + +--- + +## 为什么现在没人做到这件事 + +有人做了一部分。 + +3Commas 和 Pionex 有百万用户,验证了交易自动化需求,但它们是参数化机器人,不是 AI,不能对话,策略不能适应市场变化。 + +Composer 拿了 YC 的钱做自然语言策略,最接近我们的方向。但它只做美股,不碰加密,闭源不可扩展。 + +ElizaOS 是开源 Agent 框架,有社区但交易能力几乎为零。Coinbase AgentKit 只限自家生态。AlgosOne 做全自动 AI 交易但完全黑箱。 + +开箱即用、跨市场、AI 对话、人机协同、开放扩展、开源——这些条件要同时满足,需要同时在 Agent 架构和交易工程两个领域有足够深度。大部分团队只有其中一个。 + +--- + +## 市场规模 + +- 全球加密衍生品日交易量 $100B+,散户交易者 5000 万+ +- 全球股票散户交易者 1.5 亿+,管理资产 $70T+ +- AI 交易工具市场 $3.2B(2025)→ $12B(2030) +- 智能投顾 AUM $5.9T(2025)→ $16T(2030) +- AI 交易工具在散户中的渗透率不到 1% + +切入点:从加密交易者开始(7×24 市场,用户对 AI 接受度最高,监管最宽松),再向美股、港股扩展。 + +--- + +## 我们已经有什么 + +NOFX 不是 PPT 项目: + +- GitHub 11,132 star · 2,853 fork +- 峰值数万月活跃用户 +- 真实交易收入 +- 9 家交易所实盘对接,15,000+ 行经过真实交易验证的代码 +- VergeX(AI Trading Layer)作为策略生态已独立运行 + +NOFXi 是在这个基础上的升级。现有用户是第一批种子用户,现有代码是核心资产。 + +--- + +## GTM 策略 + +第一步:存量转化。NOFX 社区 11K star 用户是天然的种子用户。NOFXi 发布后通过 GitHub、Discord、Telegram 社区直接触达。预期首月转化数千活跃用户。 + +第二步:交易社区渗透。TradingView、币安广场、Twitter 交易 KOL 合作。NOFXi 的即插即用特性降低了推广门槛——KOL 可以直接演示"从安装到交易 5 分钟"。 + +第三步:交易所 BD。与交易所合作推广 NOFXi,交易所获得交易量增长,我们获得返佣和渠道。双赢。 + +第四步:Skill 生态驱动增长。第三方策略供应商在 NOFXi 上发布策略,自带流量。每多一个优质策略,NOFXi 的用户就多一批。 + +--- + +## 商业模式 + +四条收入线: + +**订阅** +- 开源版免费自部署,获客和建社区 +- Pro 约 99 元/月 — 云端运行 + 核心 Skill + 多交易所 +- Premium 约 299 元/月 — 全市场 + 高级风控 + 专属策略 +- Enterprise 面议 — 机构定制 + 私有部署 +- 对比:量化实盘年费 3000+ 元,NOFXi Pro 年费约 1200 元 + +**交易所返佣** +用户通过 NOFXi 产生的交易量,交易所按比例返佣。加密交易所返佣通常 20-40%。随用户规模线性增长的被动收入。 + +**Skill 生态抽成** +第三方在 NOFXi 内提供付费 Skill(策略、数据、风控),平台抽成 20-30%。App Store 模式。 + +**机构服务** +基金、家族办公室、资管机构的定制 Agent。高客单价,长期合同。 + +--- + +## 开源与商业化 + +NOFX 的 11K star 来自开源。NOFXi 延续开源路线——核心 Agent 和交易引擎开源,云端服务和高级 Skill 付费。 + +开源的价值:获客成本接近零、社区帮助迭代和测试、代码可审计建立信任(交易领域这一点尤其重要)。 + +竞品 fork 了怎么办:代码可以复制,但社区跟不过来。开源世界同品类只有一个赢家——Docker、K8s、React 都是这样。11K star 的社区在帮我们每天迭代,新的 fork 从零开始追的不是代码,是社区信任和持续维护能力。 + +--- + +## 合规 + +NOFXi 不托管资金。用户的钱始终在用户自己的交易所和券商账户。我们通过用户的 API Key 操作,且只需交易权限不需提款权限。 + +人机协同设计意味着人类保有最终决策权。确认模式下每笔交易需用户确认;自动模式下用户预设规则和边界。法律上这是辅助工具。 + +渐进式市场进入:加密市场监管最宽松先做。美股通过持牌券商 Alpaca 的 API。港股通过持牌券商长桥。A 股通过沪港通合规通道。每个市场借助已有合规基础设施,不自己拿牌照。 + +开源 = 代码可审计。对监管来说,这比黑箱产品有本质优势。 + +--- + +## 技术架构 + +NOFXi 构建在 OpenClaw Agent 架构之上。OpenClaw 是开源通用 AI Agent 框架,提供 Agent 运行时、Skill 加载、工具调用协议和多端交互。 + +NOFXi 与 OpenClaw 的关系类似 App 与操作系统:OpenClaw 提供底层能力,NOFXi 专注交易领域的深度。好处是不用从零搭 Agent 框架,且 OpenClaw 社区的通用能力可以直接用。 + +风险方面:OpenClaw 是开源项目,不存在单一厂商锁定。即使停止维护,可以 fork 独立演进。团队对 OpenClaw 有深入理解和贡献能力。 + +--- + +## 关于壁垒 + +说实话:代码可以复制,API 是公开的。 + +但 11K star 的社区每天在帮我们迭代。万级用户帮我们发现边界情况。9 家交易所几百个坑——Bybit 止损静默失败、OKX 持仓模式切换陷阱、LLM 编造价格——每一个都是用户亏钱换来的教训。竞品抄到的是某一天的快照,我们明天又往前走了一步。 + +Skill 生态是另一层:用户用的 Skill 越多,迁移到别的产品就越麻烦。供应商越多,用户越多,供应商越想接入。这个飞轮一旦转起来,就是真正的壁垒。 + +--- + +## 目标用户与增长路径 + +第一阶段:NOFX 现有社区的加密交易活跃用户。存量转化,不需要从零获客。 + +第二阶段:非技术背景交易者。NOFXi 的即插即用降低了门槛,不会编程的交易者也能用自然语言交易。这个群体远大于技术用户。 + +第三阶段:机构和量化团队。Skill 生态成熟后,NOFXi 可以作为机构交易 Agent 基础设施。企业版高客单价。 + +关键指标链路:开源版安装量 → Pro 转化率 → 月活跃交易用户 → 交易量。NOFX 已验证前两步,NOFXi 要跑通后两步。 + +--- + +## 团队 + +[待补充] + +## 融资 + +[待补充] diff --git a/docs/pitch-deck/index.html b/docs/pitch-deck/index.html new file mode 100644 index 00000000..72d54a66 --- /dev/null +++ b/docs/pitch-deck/index.html @@ -0,0 +1,829 @@ + + + + + +NOFXi — Investor Deck + + + + +
+ +
+ + +
+
CONFIDENTIAL · 2026
+

NOFXi

+
The AI That Trades For You
+

全球首个跨市场 AI 交易 Agent
越用越懂你 · 多 AI 博弈决策 · 交易智慧网络

+
+ + +
+
THE PROBLEM
+

万亿美元市场的痛

+

1.5 亿散户交易者,$70T+ 资产。三个致命问题:

+
+
+ 😩 +

信息过载

+

加密 24/7,美股港股 A 股时区不同。一条推文引发暴跌。

散户不可能全天候盯盘

+
+
+ 🔧 +

工具割裂

+

加密用 TradingView,美股用 Robinhood,港股用富途。

四个市场,四套逻辑

+
+
+ 🏦 +

量化垄断

+

顶级量化年化 30-100%。门槛:Python + 百万资金 + 半年学习。

信息不对称 = 财富不对等

+
+
+
+ + +
+
THE SOLUTION
+

NOFXi 不是交易工具

+

它是你的 AI 交易团队

+
+
+
🕐
+

24/7 在线

+

永远不休息

+
+
+
🌍
+

全市场

+

Crypto + 美股 + 港股

+
+
+
🧠
+

有记忆

+

从你的交易中学习

+
+
+
💬
+

自然语言

+

「帮我抄底 NVDA」

+
+
+
⚔️
+

多 AI 博弈

+

辩论后才下单

+
+
+
+ 「美股跌太多了,帮我用 30% 仓位抄底 NVDA,同时做空等量 BTC 对冲风险」
+ — 一句话,NOFXi 自动完成跨市场操作 +
+
+ + +
+
CORE CAPABILITY #1
+
+
+

🧠 交易记忆网络

+
你的 AI 越用越值钱
+

用了三年的 TradingView 依然不知道你是谁。
NOFXi 从第一笔交易就在构建你的专属记忆图谱。

+
+
+ 📊 +

行为画像

知道你恐慌时卖出、FOMO 时追高,主动干预情绪化决策

+
+
+ 🔗 +

环境关联

记住「加息 + 非农超预期 = 你亏 12%」,下次提前预警

+
+
+ 📈 +

进化学习

每笔盈亏修正判断权重。三个月后,你的 Agent 独一无二

+
+
+
+
+
+
💰 投资价值
+

用户迁移成本极高 — 换软件 = 从零训练,没人愿意

+

SaaS 梦寐以求的留存率 — 用户越久,Agent 越强,粘性越高

+

Spotify 用几年懂你的音乐
NOFXi 用几个月懂你的交易

+
+
+
+
+ + +
+
CORE CAPABILITY #2
+

⚔️ 多 AI 博弈决策

+
华尔街投研团队,人人可用
+

桥水有 1500 人投研团队。散户只有自己。NOFXi 用 AI 复刻机构决策流水线:

+
+
+
🟢
+

Bull AI

+

穷尽做多理由
挖掘被低估机会

+
+
+
+
🔴
+

Bear AI

+

魔鬼代言人
专找风险和空头逻辑

+
+
+
+
🧩
+

Strategist

+

综合多空博弈
输出交易方案

+
+
+
+
🛡️
+

Risk AI

+

最后一道关
不过审 = 不执行

+
+
+
+
+

Execute

+
+
+
+
💰 投资价值
+

多 AI 对抗的 prompt 框架 + 辩论收敛算法 + 实战权重调优 — 需要上万笔真实交易迭代。时间壁垒 + 数据壁垒,不是开源能复制的。

+
+
+ + +
+
CORE CAPABILITY #3
+

🌍 全市场统一 Agent

+
一个大脑管所有资产 — 全球唯一
+
+ 「BTC 大跌,帮我把 30% 仓位转到黄金 ETF 避险,同时买入港股腾讯 1000 股」 +
+
+
+
+

✅ 加密货币

+ 已上线 +
+

Binance · Bybit · OKX · Bitget
KuCoin · Gate · Hyperliquid
Aster · Lighter

+
+
+
+

🔨 美股

+ 开发中 +
+

Alpaca
Paper Trading + Live
盘前盘后支持

+
+
+
+

📋 港股 / A股

+ 规划中 +
+

LongPort 长桥
沪港通
300+ 只大盘股

+
+
+
+
💰 投资价值
+

12+ 交易所/券商的管道工程极其复杂。先发者 = 标准制定者,后来者从零追赶。

+
+
+ + +
+
CORE CAPABILITY #4
+

🏪 记忆市场

+
交易智慧的 App Store
+
+
+

eToro 让你复制操作
NOFXi 让你复制大脑

+
+
+ 1️⃣ +

顶级交易员打包 Agent 记忆出售
判断框架 + 风险偏好 + 踩坑经验

+
+
+ 2️⃣ +

买家在他人记忆上继续训练
你的习惯 + 他的经验 = 超级 Agent

+
+
+ 3️⃣ +

实盘评分系统
胜率 / 夏普比率 / 最大回撤

+
+
+
+
+
+
+
用户
越多
+
+
记忆
越丰富
+
+
🔄
+
+
新用户
越想来
+
+
平台
越值钱
+
+

网络效应飞轮

+
+
+
+
+
💰 投资价值
+

GitHub 是代码的网络,NOFXi 是交易智慧的网络。平台抽成 20-30%。双边网络效应 = 越滚越大。

+
+
+ + +
+
CORE CAPABILITY #5
+

💬 自然语言策略引擎

+
量化民主化 — 说人话,做量化
+
+ 「当 BTC RSI < 30 且美股期货是绿的,用 10% 仓位做多,止损 3%,止盈 8%,每周五收盘前平仓」 +
+
+
+
🔍
+

解析语义

+

理解策略意图
处理模糊表述

+
+
+
+
⚙️
+

绑定指标

+

RSI / EMA / MACD
自动绑定数据源

+
+
+
+
👁️
+

7×24 监控

+

条件触发执行
不用盯盘

+
+
+
+
📊
+

持续复盘

+

自动评估表现
建议优化

+
+
+
+
+

传统量化

+

6 个月 + $1M

+

Python + 回测框架 + 数据工程

+
+
+

NOFXi

+

一句话

+

知识是门槛,不是编程

+
+
+
+ + +
+
TECHNOLOGY
+

🔒 技术壁垒

+
为什么别人做不了?
+
+
+ 🔌 +

统一交易协议层

+

12+ 交易所/券商,每个 API 完全不同。Stripe 统一支付,NOFXi 统一交易。

+
+
+ 🤖 +

Agent 决策引擎

+

多轮 Tool Calling,5 轮决策循环。新增能力 = 注册工具,LLM 自动学会使用。

+
+
+ 🔒 +

安全执行沙箱

+

确认机制 + Panic Recovery + 数据真实性约束。交易 ≠ 聊天,一个错误 = 真金白银。

+
+
+ 🔄 +

自驱进化架构

+

Sentinel(异动) + Brain(主动) + Learner(学习) — 不需用户干预的自我进化闭环。

+
+
+ 🌀 +

实战数据飞轮

+

每笔真实交易训练系统。竞品从零开始,我们已在积累。时间 = 不可逾越的壁垒。

+
+
+
+ + +
+
ECOSYSTEM
+

📱 开放生态

+
NOFXi = 交易世界的 iPhone + App Store
+

Agent 是操作系统,Plugin 是 App。每接入一个伙伴,能力增强一分。

+
+
+ 🔌 +

交易执行

+

Vergex 等量化平台
策略/信号一键接入

+
+
+ 📊 +

数据源

+

Nansen · Bloomberg
Santiment 情绪数据

+
+
+ 🧮 +

策略市场

+

第三方策略发布
用户订阅 · 平台抽成

+
+
+ 🛡️ +

风控服务

+

专业风控团队
执行前自动审核

+
+
+
+

🤝 Vergex 深度集成

+

策略提供商 + 执行通道 + 数据源 + 品牌联合 —「NOFXi × Vergex 联合策略」

+
+
+ + +
+
MARKET OPPORTUNITY
+

📈 市场机会

+
+
+
$70T+
+

全球散户交易资产

+
+
+
$12B
+

加密交易工具 · 2030

+
+
+
$16T
+

智能投顾 AUM · 2030

+
+
+
$4B
+

Copy Trading · 2028

+
+
+

切入路径

+
+
+ Phase 1 · 现在 +

加密交易者

+

7×24 市场 · AI 接受度最高
9 交易所已上线
目标:1,000 用户

+
+
+ Phase 2 · Q3 2026 +

跨市场交易者

+

美股 + 港股 · 记忆市场上线
月交易量 $100M+
目标:10,000 用户

+
+
+ Phase 3 · 2027 +

资产管理 Agent

+

DeFi + CeFi + TradFi
AUM $1B+
目标:100,000 用户

+
+
+
+ + +
+
BUSINESS MODEL
+

💵 商业模式

+
+
+ 💎 +

Pro 订阅

+
$29-99/月
+

高级 AI 模型
更多交易对 · 更长记忆

+
主要收入
+
+
+ 🏪 +

记忆市场

+
抽成 20-30%
+

交易员出售记忆
平台抽佣

+
平台收入
+
+
+ 🔄 +

交易量返佣

+
按量分成
+

与交易所合作
交易量返佣

+
被动收入
+
+
+ 🏢 +

企业版

+
高客单价
+

为基金/机构
定制 Agent

+
高端收入
+
+
+
+ + +
+
OPEN SOURCE STRATEGY
+

🔓 开源商业模式

+
开源引擎获客,云端服务赚钱
+

Red Hat ($34B) · GitLab ($8B) · Databricks ($43B) — 都是开源公司。

+
+
+

🆓 开源(免费)→ 获取

+
+

+ 交易引擎 — Trader interface + 交易所对接
+ Agent 框架 — 基础对话 + 工具调用
+ 单用户版 — 自己部署,完全免费 +

+
+
+ 开发者社区 + 代码可审计=信任 + 获客成本趋零 + 你的接口=行业标准 +
+
+
+

💰 不开源(收费)→ 变现

+
+
+

记忆网络 — 云端同步,数据不是代码能复制的

+
+
+

记忆市场 — 双边平台,自建 GitHub 上面没用户

+
+
+

多 AI 集群 — 自跑 4 个 LLM $200+/月,我们卖 $29 双赢

+
+
+

数据飞轮 — 开源版永远比云端版慢一代

+
+
+
+
+
+
一句话
+

代码可以复制,但记忆网络、调优过的 AI 团队、和双边市场不能复制。这是 Red Hat 模式 + App Store 模式。

+
+
+ + +
+

NOFXi

+

+ 正在构建交易智慧的网络。
+ 每个用户训练自己的 AI 交易团队,
+ 每个交易员的经验都能被分享和增值。 +

+
+ 这不是又一个交易工具 — 这是交易的未来。 +
+

Trade Smarter, Together.

+
+ +
+ + + + + + + + diff --git a/kernel/engine.go b/kernel/engine.go index 2cda1639..c79976bf 100644 --- a/kernel/engine.go +++ b/kernel/engine.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "net/http" + "os" "nofx/logger" "nofx/market" "nofx/provider/hyperliquid" @@ -194,6 +195,21 @@ func NewStrategyEngine(config *store.StrategyConfig) *StrategyEngine { } client := nofxos.NewClient(nofxos.DefaultBaseURL, apiKey) + // If claw402 wallet key is available, route nofxos requests through claw402 + if walletKey := os.Getenv("CLAW402_WALLET_KEY"); walletKey != "" { + claw402URL := os.Getenv("CLAW402_URL") + if claw402URL == "" { + claw402URL = "https://claw402.ai" + } + claw402Client, err := nofxos.NewClaw402DataClient(claw402URL, walletKey, nil) + if err == nil { + client.SetClaw402(claw402Client) + logger.Infof("🔗 NofxOS data routed through claw402 (%s)", claw402URL) + } else { + logger.Warnf("⚠️ Failed to init claw402 data client: %v (using direct nofxos.ai)", err) + } + } + return &StrategyEngine{ config: config, nofxosClient: client, diff --git a/mcp/payment/x402.go b/mcp/payment/x402.go index 0267e950..1afa9b8c 100644 --- a/mcp/payment/x402.go +++ b/mcp/payment/x402.go @@ -82,6 +82,13 @@ func X402DecodeHeader(b64 string) ([]byte, error) { return decoded, nil } +// MakeClaw402SignFunc creates an X402SignFunc from a private key for claw402 payments. +func MakeClaw402SignFunc(privateKey *ecdsa.PrivateKey) X402SignFunc { + return func(paymentHeaderB64 string) (string, error) { + return SignBasePaymentHeader(privateKey, paymentHeaderB64, "Claw402") + } +} + // SignBasePaymentHeader decodes a base64 x402 header, parses it, and signs with // EIP-712 (USDC TransferWithAuthorization). func SignBasePaymentHeader(privateKey *ecdsa.PrivateKey, paymentHeaderB64 string, providerName string) (string, error) { diff --git a/provider/nofxos/claw402.go b/provider/nofxos/claw402.go new file mode 100644 index 00000000..0e4d6107 --- /dev/null +++ b/provider/nofxos/claw402.go @@ -0,0 +1,112 @@ +package nofxos + +import ( + "context" + "crypto/ecdsa" + "fmt" + "net/http" + "nofx/mcp" + "nofx/mcp/payment" + "os" + "strings" + "time" + + "github.com/ethereum/go-ethereum/crypto" +) + +// Claw402DataClient wraps nofxos API calls through claw402's x402 payment gateway. +// Instead of calling nofxos.ai directly, it calls claw402.ai/api/v1/nofx/... +// and pays with USDC for each request. +type Claw402DataClient struct { + claw402URL string + privateKey *ecdsa.PrivateKey + httpClient *http.Client + logger mcp.Logger +} + +// NewClaw402DataClient creates a client that routes nofxos requests through claw402. +// privateKeyHex is the wallet private key (0x-prefixed hex string). +func NewClaw402DataClient(claw402URL, privateKeyHex string, logger mcp.Logger) (*Claw402DataClient, error) { + if claw402URL == "" { + claw402URL = "https://claw402.ai" + } + claw402URL = strings.TrimRight(claw402URL, "/") + + if privateKeyHex == "" { + privateKeyHex = os.Getenv("CLAW402_WALLET_KEY") + } + if privateKeyHex == "" { + return nil, fmt.Errorf("claw402 wallet private key not set") + } + + hexKey := strings.TrimPrefix(privateKeyHex, "0x") + pk, err := crypto.HexToECDSA(hexKey) + if err != nil { + return nil, fmt.Errorf("invalid claw402 private key: %w", err) + } + + return &Claw402DataClient{ + claw402URL: claw402URL, + privateKey: pk, + httpClient: &http.Client{Timeout: 30 * time.Second}, + logger: logger, + }, nil +} + +// endpoint mapping: nofxos path → claw402 path +var endpointMap = map[string]string{ + "/api/ai500/list": "/api/v1/nofx/ai500/list", + "/api/ai500/stats": "/api/v1/nofx/ai500/stats", +} + +// mapEndpoint converts a nofxos endpoint to a claw402 endpoint. +// For endpoints not in the static map, applies the general pattern: +// /api/xxx → /api/v1/nofx/xxx +func mapEndpoint(nofxosPath string) string { + if mapped, ok := endpointMap[nofxosPath]; ok { + return mapped + } + // General pattern: /api/xxx → /api/v1/nofx/xxx + if strings.HasPrefix(nofxosPath, "/api/") { + return "/api/v1/nofx/" + strings.TrimPrefix(nofxosPath, "/api/") + } + return nofxosPath +} + +// DoRequest makes a GET request through claw402 with x402 payment. +func (c *Claw402DataClient) DoRequest(endpoint string) ([]byte, error) { + claw402Path := mapEndpoint(endpoint) + // Strip auth= query params (claw402 uses x402 payment, not auth keys) + if idx := strings.Index(claw402Path, "?auth="); idx != -1 { + claw402Path = claw402Path[:idx] + } + if idx := strings.Index(claw402Path, "&auth="); idx != -1 { + claw402Path = claw402Path[:idx] + } + + fullURL := c.claw402URL + claw402Path + + buildReq := func() (*http.Request, error) { + req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, fullURL, nil) + if err != nil { + return nil, err + } + req.Header.Set("X-Client-ID", "nofx") + return req, nil + } + + signFn := payment.MakeClaw402SignFunc(c.privateKey) + + body, err := payment.DoX402Request( + c.httpClient, + buildReq, + signFn, + "claw402-data", + c.logger, + ) + if err != nil { + return nil, fmt.Errorf("claw402 data request failed (%s): %w", claw402Path, err) + } + + return body, nil +} diff --git a/provider/nofxos/client.go b/provider/nofxos/client.go index 9d8bc32a..cbc2092f 100644 --- a/provider/nofxos/client.go +++ b/provider/nofxos/client.go @@ -21,10 +21,11 @@ const ( // Client is the NofxOS API client type Client struct { - BaseURL string - AuthKey string - Timeout time.Duration - mu sync.RWMutex + BaseURL string + AuthKey string + Timeout time.Duration + mu sync.RWMutex + claw402 *Claw402DataClient // If set, routes requests through claw402 } var ( @@ -71,6 +72,13 @@ func (c *Client) SetConfig(baseURL, authKey string) { } } +// SetClaw402 enables routing requests through claw402 payment gateway. +func (c *Client) SetClaw402(claw402Client *Claw402DataClient) { + c.mu.Lock() + defer c.mu.Unlock() + c.claw402 = claw402Client +} + // GetBaseURL returns the current base URL func (c *Client) GetBaseURL() string { c.mu.RLock() @@ -85,14 +93,22 @@ func (c *Client) GetAuthKey() string { return c.AuthKey } -// doRequest performs an HTTP GET request with authentication +// doRequest performs an HTTP GET request with authentication. +// If claw402 client is configured, routes through claw402 payment gateway instead. func (c *Client) doRequest(endpoint string) ([]byte, error) { c.mu.RLock() + claw402Client := c.claw402 baseURL := c.BaseURL authKey := c.AuthKey timeout := c.Timeout c.mu.RUnlock() + // Route through claw402 if configured + if claw402Client != nil { + return claw402Client.DoRequest(endpoint) + } + + // Direct call to nofxos.ai url := baseURL + endpoint if !strings.Contains(url, "auth=") { if strings.Contains(url, "?") { diff --git a/trader/alpaca/trader.go b/trader/alpaca/trader.go index e4ce58c4..e61e11fd 100644 --- a/trader/alpaca/trader.go +++ b/trader/alpaca/trader.go @@ -390,39 +390,45 @@ func (t *AlpacaTrader) GetMarketPrice(symbol string) (float64, error) { } // SetStopLoss places a stop order +// SetStopLoss places a stop order. Uses "nofxi-sl-" client_order_id prefix +// so CancelStopLossOrders can distinguish SL orders from user-placed stop orders. func (t *AlpacaTrader) SetStopLoss(symbol string, positionSide string, quantity, stopPrice float64) error { side := "sell" // stop loss for long = sell when price drops if positionSide == "SHORT" { side = "buy" } - order := AlpacaOrderRequest{ - Symbol: symbol, - Qty: fmt.Sprintf("%.4f", quantity), - Side: side, - Type: "stop", - TimeInForce: "gtc", - StopPrice: fmt.Sprintf("%.2f", stopPrice), + order := map[string]string{ + "symbol": symbol, + "qty": fmt.Sprintf("%.4f", quantity), + "side": side, + "type": "stop", + "time_in_force": "gtc", + "stop_price": fmt.Sprintf("%.2f", stopPrice), + "client_order_id": fmt.Sprintf("nofxi-sl-%s-%d", symbol, time.Now().UnixNano()), } _, err := t.doPost("/v2/orders", order) return err } -// SetTakeProfit places a limit order as take-profit +// SetTakeProfit places a limit order as take-profit. +// Uses a "nofxi-tp-" client_order_id prefix so CancelTakeProfitOrders can +// distinguish TP orders from user-placed limit orders. func (t *AlpacaTrader) SetTakeProfit(symbol string, positionSide string, quantity, takeProfitPrice float64) error { side := "sell" // take profit for long = sell when price rises if positionSide == "SHORT" { side = "buy" } - order := AlpacaOrderRequest{ - Symbol: symbol, - Qty: fmt.Sprintf("%.4f", quantity), - Side: side, - Type: "limit", - TimeInForce: "gtc", - LimitPrice: fmt.Sprintf("%.2f", takeProfitPrice), + order := map[string]string{ + "symbol": symbol, + "qty": fmt.Sprintf("%.4f", quantity), + "side": side, + "type": "limit", + "time_in_force": "gtc", + "limit_price": fmt.Sprintf("%.2f", takeProfitPrice), + "client_order_id": fmt.Sprintf("nofxi-tp-%s-%d", symbol, time.Now().UnixNano()), } _, err := t.doPost("/v2/orders", order) @@ -430,13 +436,39 @@ func (t *AlpacaTrader) SetTakeProfit(symbol string, positionSide string, quantit } // CancelStopLossOrders cancels stop orders for a symbol +// CancelStopLossOrders cancels only NOFXi-created stop-loss orders +// (identified by "nofxi-sl-" client_order_id prefix). func (t *AlpacaTrader) CancelStopLossOrders(symbol string) error { - return t.cancelOrdersByType(symbol, "stop") + orders, err := t.getOpenOrdersRaw(symbol) + if err != nil { + return err + } + for _, o := range orders { + if strings.EqualFold(o.Type, "stop") && strings.HasPrefix(o.ClientOrderID, "nofxi-sl-") { + if _, err := t.doDelete("/v2/orders/" + o.ID); err != nil { + logger.Warnf("[Alpaca] cancel SL order %s: %v", o.ID, err) + } + } + } + return nil } -// CancelTakeProfitOrders cancels limit orders (used as take-profit) for a symbol +// CancelTakeProfitOrders cancels only NOFXi-created take-profit limit orders +// for a symbol (identified by "nofxi-tp-" client_order_id prefix). +// This avoids accidentally canceling user-placed limit buy/sell orders. func (t *AlpacaTrader) CancelTakeProfitOrders(symbol string) error { - return t.cancelOrdersByType(symbol, "limit") + orders, err := t.getOpenOrdersRaw(symbol) + if err != nil { + return err + } + for _, o := range orders { + if strings.EqualFold(o.Type, "limit") && strings.HasPrefix(o.ClientOrderID, "nofxi-tp-") { + if _, err := t.doDelete("/v2/orders/" + o.ID); err != nil { + logger.Warnf("[Alpaca] cancel TP order %s: %v", o.ID, err) + } + } + } + return nil } // CancelAllOrders cancels all pending orders for a symbol. @@ -604,6 +636,23 @@ func (t *AlpacaTrader) IsMarketOpen() (bool, string, error) { // --- Helper: cancel orders by type --- +// getOpenOrdersRaw returns raw AlpacaOrder structs (with ClientOrderID) for filtering. +func (t *AlpacaTrader) getOpenOrdersRaw(symbol string) ([]AlpacaOrder, error) { + path := "/v2/orders?status=open" + if symbol != "" { + path += "&symbols=" + symbol + } + data, err := t.doGet(path) + if err != nil { + return nil, fmt.Errorf("get open orders: %w", err) + } + var orders []AlpacaOrder + if err := json.Unmarshal(data, &orders); err != nil { + return nil, fmt.Errorf("parse orders: %w", err) + } + return orders, nil +} + func (t *AlpacaTrader) cancelOrdersByType(symbol, orderType string) error { orders, err := t.GetOpenOrders(symbol) if err != nil { diff --git a/trader/alpaca/trader_test.go b/trader/alpaca/trader_test.go index 45036e4d..85fa0142 100644 --- a/trader/alpaca/trader_test.go +++ b/trader/alpaca/trader_test.go @@ -116,26 +116,33 @@ func newMockAlpacaServer() *mockAlpacaServer { } json.NewEncoder(w).Encode(result) case "POST": - var req AlpacaOrderRequest - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + // Parse as generic map to capture all fields including client_order_id + var raw map[string]string + if err := json.NewDecoder(r.Body).Decode(&raw); err != nil { http.Error(w, `{"message":"invalid body"}`, 400) return } + reqType := raw["type"] + reqSide := raw["side"] + reqSymbol := raw["symbol"] + reqQty := raw["qty"] // Simulate order fill for market orders fillStatus := "accepted" - if req.Type == "market" { + if reqType == "market" { fillStatus = "filled" - // If buy, add position - if req.Side == "buy" { - m.addPosition(req.Symbol, req.Qty, "150.00") + if reqSide == "buy" { + m.addPosition(reqSymbol, reqQty, "150.00") } } - order := m.createOrder(req.Symbol, req.Side, req.Qty, req.Type, fillStatus) - if req.StopPrice != "" { - order.StopPrice = req.StopPrice + order := m.createOrder(reqSymbol, reqSide, reqQty, reqType, fillStatus) + if v := raw["stop_price"]; v != "" { + order.StopPrice = v } - if req.LimitPrice != "" { - order.LimitPrice = req.LimitPrice + if v := raw["limit_price"]; v != "" { + order.LimitPrice = v + } + if v := raw["client_order_id"]; v != "" { + order.ClientOrderID = v } if fillStatus != "filled" { order.Status = "new" // stop/limit orders stay open