GaiaEx AcademyGaiaEx Academy
用 GaiaEx API 搭建 AI 交易机器人
开发者AI 与机器学习14 min read

用 GaiaEx API 搭建 AI 交易机器人

从信号生成到执行——一条完整的流水线

分享文章

那个三年里赚了 $0 的机器人

2021 年,一位 23 岁的工程师发布了一份刷爆网络的回测:他的加密机器人在两年的历史数据上把 $1,000 变成了 $420 万。资金曲线沿着完美的 45 度直线一路向上。陌生人纷纷求他给代码。他辞了职,向朋友募了钱,正式上了实盘。

它每一周都在亏钱。不到四个月,账户就跌了 60%,他把它关掉了。

机器人本身并没有「出错」。代码运行得天衣无缝。问题在于,这份回测被反复调参,直到完美贴合过去——而过去从不会一模一样地重演。这个策略只是把 2019 年和 2020 年背了下来,并没有学到任何通用的东西。一旦遇到它没见过的行情,它就完全不知道该怎么办了。

这是关于 AI 交易机器人最重要的一条真相,而几乎没人会把它放在开头讲:机器人的好坏,取决于它周围那套纪律。那些花哨的部分——模型、AI——大概只占 20% 的工作量。另外 80% 是数据卫生、执行管线,以及在你睡觉时阻止一个 bug 或一次闪崩掏空你账户的风险控制。这节课要教的就是那 80%。

AI 交易机器人到底是什么

剥掉营销的外壳,一个交易机器人不过是一段软件,它盯着市场,并按规则下单——不需要人去点按钮。所谓「AI」,是指其中一部分规则是从数据里学来的,而不是手写的,但它干的活儿是一样的:把信息变成决策,自动地、全天候地进行。

人们用机器人,有三个实在的理由:

  • 市场永不打烊。加密市场 24/7/365 全天交易。没有哪个人能在周日凌晨 4 点盯着 BTC;机器人可以。
  • 没有情绪。机器人不会在底部恐慌抛售,也不会在顶部 FOMO 追高。无论你是狂喜还是恐惧,它都执行同一套计划——而那恰恰是人最容易做出最糟糕判断的时刻。
  • 速度与一致性。机器人能同时评估几十种资产,并在毫秒级别做出反应,而且它永远不会「忘记」设置止损。

但请注意这份清单里没有什么:稳赚不赔。机器人只是一种更快、不知疲倦、没有情绪的执行策略的方式。如果策略本身是糟糕的,机器人只会更快、更稳定地亏钱。自动化会放大你拥有的任何优势——也会放大你身上的任何缺陷。

关键洞见:交易机器人不会去发现优势——它只是执行优势。智能存在于策略和风险规则里,而不在于「是机器在按按钮」这件事上。「AI」是策略内部的一件工具,永远不是策略的替代品。

机器人真正在跑的策略

在你碰机器学习之前,先搞懂那些撑起绝大多数真实机器人的主力策略。每一种都假设了某种特定的市场——并在市场性格改变时悄无声息地失效。

  • 网格机器人(Grid bots)在一个价格区间内铺出一排买单和卖单。随着价格来回震荡,机器人在每一格上低买高卖。在横盘、来回拉锯的市场里堪称绝妙——但在强趋势里就是一场灾难:价格跑出网格,你被套在一堆亏损单上(或者干脆错过整段行情)。
  • DCA(定投)机器人按固定间隔买入固定金额,很多还会在更低的价位加上「补仓单」,把平均买入价往下拉。在下跌中累积仓位很不错——但如果价格一直跌,你就一直在接飞刀,平均成本只会不停淌血。
  • 趋势跟踪 / 动量机器人(Trend-following / momentum bots)用均线交叉之类的信号去追强势、抛弱势。它们在干净的趋势里大赚,却在区间震荡的市场里被「来回打脸」——死于一千次小亏损。
  • 套利机器人(Arbitrage bots)利用同一资产在不同场所的不同价格,便宜处买进、贵处卖出。数学很简单,工程却极其残酷。这是一场纯粹的速度游戏,微秒、手续费和转账延迟决定了那份「白捡」的利润是真实的还是海市蜃楼。
  • 做市机器人(Market-making bots)同时报出买价和卖价,赚取价差,提供流动性。在平静的市场里有利可图,在剧烈的市场里却很危险——一次突然的波动会以快于你撤单的速度把你成交在错误的一侧。

藏在这份清单里的教训是:每一种策略都是在赌你正身处哪一种市场。网格机器人无所谓「好」或「坏」——它适合区间,却不适合趋势。自动化交易中最难的问题不是把机器人搭出来;而是知道它的前提假设何时不再成立。

EACH STRATEGY BETS ON A MARKET REGIME Match the bot to the market — or it quietly breaks Sideways / Range Grid · market-making Trending Trend / momentum · DCA Price gaps A B buy A → sell B Arbitrage (speed) Run a grid in a trend, or a trend bot in chop, and the same code bleeds money
没有全天候通用的机器人。每种策略都假设了一种市场状态;真正的本事,是察觉这种状态何时结束。

机器人实际是怎么接线的

人们说「AI 交易机器人」时,仿佛它是一个脚本。但在生产环境里它是一条流水线:摄取、特征、模型、信号、执行、风险——每一块都可以替换,而不必把整个技术栈重新接线。这样搭建并不是为了学术上的整洁;而是为了让你在凌晨 3 点、实盘盈亏与回测背离、你需要弄清是哪一跳出了问题时,还能保持理智。

跟着一个单独的决策走一遍它的路径:

  • 摄取(Ingest)从交易所拉取实时市场数据——价格、成交、订单簿。GaiaEx 通过 REST 提供下单和余额接口,通过 WebSocket 提供订单簿和成交数据。
  • 特征(Features)把原始数字变成有意义的输入:波动率、动量、资金费率、订单簿失衡。
  • 模型(Model)(规则或 ML)读取这些特征,形成一个观点。
  • 信号(Signal)把那个观点转成一个具体的订单:方向、规模、价格。
  • 执行(Execution)把订单发往交易所,处理重试和确认。
  • 风险(Risk)把这一切包裹起来——而且它对其他每一个阶段都拥有否决权。

这套纪律的核心,是让每个阶段都确定性可复现,并且全程记录日志。给每个信号打上一个 ID,给每个订单打上一个客户端 ID,给每一跳盖上一个延迟时间戳。当出问题时——它一定会出问题——你希望读一遍日志就能看到现实究竟在哪里与计划背离,而不是靠猜。

AI TRADING PIPELINE Typical data path: feed → features → model → risk → exchange API Ingest Features Model Signal Exec Risk / kill Logs + metrics at every hop (latency ms, signal ID, order client id) Risk wraps execution: size caps, daily loss, correlation checks
模块化的各个阶段让你可以替换模型或交易场所,而不必重写摄取或风险模块。

先用规则,再上机器学习

炒作的人说「用 AI」。专业的人却说:先从你能用大白话读懂的规则开始。RSI 上的阈值、一次 MACD 指标交叉、成交量高于其移动平均线(均线)。规则容易记日志、容易解释,出问题时也容易追责。如果你那套基于规则的策略都赚不到钱,神经网络也救不了它——它只会以一种你没法调试的方式亏钱。

当模式过于微妙、或维度太高、手写规则无能为力时,机器学习才配得上它的位置:在表格特征上用梯度提升树,在价格 K 线序列上用序列模型。用得好,ML 能从杂乱的输入里榨出信号。但它有一种恶毒的失效模式,叫漂移(drift):实盘市场慢慢地不再像模型训练所用的数据,而表现就在无声无息中衰减。模型依旧吐出自信满满的预测——只是它们现在错了,而且没有任何地方报错。

这就是为什么成熟的交易台会跑一套混合(hybrid)方案:模型提议,而硬编码的规则和风险上限否决。AI 可以建议一笔交易;但它永远无法越过每日亏损上限或仓位上限。机器是一名直觉不错、却无权拿公司去下注的初级分析师。

当心过拟合。一个被调到能精准命中过去的模型,往往只是把噪声背了下来。解药是诚实的验证:在模型从未见过的数据上测试(样本外),用前进式分析(walk-forward),并克制住「再加一个参数就好」的冲动。如果一个策略只在你优化它的那段确切时期里闪闪发光,那它什么也没学到——它是在作弊,而市场迟早会来讨账。

值得计算的特征

模型的聪明程度,取决于你喂给它的输入。光有原始价格很少够用——这门手艺叫特征工程(feature engineering):把 OHLCV、订单簿和衍生品数据,变成真正承载信息的信号。

在一张永续合约交易台上,重要的特征远不止收盘价。资金费率是一笔真实的、反复发生的成本或收入,它能把一个「赚钱」的策略翻成负的。多个时间跨度上的收益率能捕捉跨周期的动量。成交量比率能标记出异常活动。订单簿失衡——买盘深度与卖盘深度之比——是一个短周期的微观结构信号,前提是你订阅了 L2 数据。跨资产背景(ETH 相对 BTC 如何运动)则增添了一个全市场的视角。

有一条纪律把业余者和专业者区分开来:砍掉不挣钱的特征。如果一个特征的置换重要性接近于零,你就是在为噪声付出延迟和过拟合风险。更少、更强的特征,几乎每一次都胜过把一切都塞进去的模型。

def engineer_features(df):
    df["log_ret"] = np.log(df["close"] / df["close"].shift(1))
    df["vol_20"] = df["log_ret"].rolling(20).std()
    df["vol_ratio"] = df["volume"] / df["volume"].rolling(20).mean()
    return df.dropna()

还要当心特征工作中那条头号大忌:前视偏差(look-ahead bias)。如果任何特征不小心用到了在决策时刻本不存在的信息——一根未来的 K 线、一个同周期的收盘价——你的回测会光彩夺目,而你的实盘账户不会。每一个特征都必须只用你在那个时刻本该拥有的数据来计算,没有例外。

执行、签名,以及那些会让你真金白银破财的无聊 bug

那个毫不起眼的执行层,正是钱悄悄漏掉的地方。做对了没人会注意;做错了,一个完美的信号就变成了实打实的亏损。

  • 订单类型。当你在乎价格时用限价单——你设定你能接受的最差价格。把市价单留给真正紧急的时刻,并且要清楚它会付出价差加滑点,这在稀薄或快速的市场里可能极其惨烈。
  • 幂等性(Idempotency)。永远附上一个客户端订单 ID。网络会抽风;一个没带 ID 的重试 POST 可能让你的仓位翻倍。有了 ID,交易所就能识别出重复请求并忽略它。这一个习惯,就能防住一整类灾难性的 bug。
  • 带退避的重试。遇到 429(被限频)或 5xx(服务器错误)时,用指数退避(exponential backoff)等待后再重试——别把 API 锤到把你封禁。
  • 时钟纪律。签名请求通常会把 HTTP 方法、路径、请求体和一个毫秒级时间戳拼接成一个 HMAC 签名。交易所会拒绝时钟偏差过大的请求,所以要在做签名的那台机器上运行 NTP。一个漂移的时钟会让你的每一笔订单都被拒绝,而你完全不知道为什么。

这些都不是「AI」。但它们全都决定了你的 AI 究竟能不能赚到一块钱。回测与实盘账户之间的鸿沟,大多就出在这一层——手续费、滑点、延迟,以及各种边界情况——这恰恰是接下来两节存在的理由。

风险先于 Alpha

这是那条把能活下来的交易者和会爆仓的交易者区分开的操作顺序:风险是套在每一笔订单上的闸门,而不是事后的一句道歉。你要在调校引擎之前先设计好刹车。

那些不容商量的控制项:

  • 仓位上限。限制单一标的的敞口——通常是权益的 2–5%——这样没有任何一笔交易能把你毁掉。
  • 止损。用 ATR(自适应波动率)或固定跳动点来设置,并把它们作为真实的订单挂出去,而不是停留在你脑子里的意图。
  • 每日亏损熔断。如果账户当天亏了,比如说 3%,机器人就停止交易。就这么停。这一条规则救下的账户,比任何精巧的信号都多,因为它给一个 bug 或一个糟糕的日子所能造成的伤害封了顶。
  • 一键熔断开关(kill switch)。一个动作就能撤销所有挂单并平掉每一个仓位。每月测试一次。你需要它的那一天,正是发现它坏了的最糟糕的一天。

对永续合约,把资金费率拖累强平距离也并入同一道闸门——一个在价格上「没事」的仓位,仍可能正在被资金费率放血,或者距离强平只剩一根插针。

托管也属于这场对话。GaiaEx 使用 MPC(多方计算),把密钥材料拆分到多方之间,于是机器人永远不会把一把原始私钥存放在某个文件里、让攻击者有机可乘。而且交易权限可以与提币权限分开授予——所以你机器人用来下单的那把 API 密钥,永远不该被允许把资金转出平台。

RISK CHECK ORDER Example: evaluate before every child order (numbers illustrative) Signal OK? Size ≤ 5% Daily P&L > −3%? Submit / Halt Perps: add funding drag and liquidation distance to the same gate Kill switch = cancel all + flat (test monthly)
风险作为闸门运行在每一笔订单上,而不是事后的一句道歉。

骗局:当机器人本身就是陷阱

有一种风险,那些光鲜的机器人广告从不提起:面向散户兜售的「AI 交易机器人」中,有相当大一部分根本不是交易工具——它们就是那场抢劫本身。诚实的教育必须把这一点讲明白,因为大多数因「机器人」而亏钱的人,钱就是这么没的。

套路总在重复:

  • 保证收益型机器人。「我们的 AI 每天稳赚 2%,零风险。」没有任何正当的策略能保证收益;市场按定义就是不确定的。一个稳定、不会亏的利润承诺,就是一个庞氏骗局的承诺。
  • 权限过大的 API 密钥。许多诈骗机器人要求你连接一把带提币权限的 API 密钥。你照做的那一刻,他们就能掏空账户。2025 年底,Binance 记录了多起经核实的账户被黑案例,以及五位数的损失,追查下来都源于未经授权的第三方机器人干的正是这件事。
  • 不透明、未经审计的代码。闭源、没有安全审计的第三方机器人可能藏着后门。在为时已晚之前,你根本看不到代码拿你的密钥做了什么。
  • 对敲刷量、刷交易量的机器人会悄悄违反交易所规则——害你的账户被限制或封停,而损失无人理赔。

防御措施很具体,值得记牢。永远不要给交易机器人提币权限——把 API 密钥的范围限定为仅交易。使用提币地址白名单,让资金只能转到你预先批准过的地址。开启强力的 2FA(验证器 App 或硬件安全密钥,不要用短信)。优先选择官方的、经过审计的工具,而不是那些把天上的月亮都许给你的匿名 Telegram 机器人。还要记住金融界最古老的那条规则:如果好得不像真的,那它就是骗局,而「AI」只是它的戏服。

诚实的结论:最危险的交易机器人不是一个有 bug 的,而是一个精心打造、专为偷你钱而设计的。任何想要提币权限、保证盈利或藏起代码的机器人,在被证明清白之前都当作有敌意来对待。GaiaEx 的 MPC 托管和范围化权限的存在,正是为了让一个交易集成能够下单,却永远无法卷走你的钱。

从模拟盘到实盘,而不爆仓

你有了策略、干净的特征、一个执行层,还有风险闸门。诱惑就是直接用真实仓位切到实盘。别这么干。那片堆满了死掉的机器人的坟场里,满是在纸面上看着完美、却毫无准备地撞上现实的策略。

有纪律的路径:

  • 用完全相同的代码路径做模拟交易(paper trade)。让实盘的下单逻辑跑在实时数据上,但不动本金,至少跑上几周。把成交和时间戳与策略的预期对比一下。如果模拟盘和回测已经对不上,就停下来,弄清楚原因。
  • 以最小规模上实盘。第一个实盘阶段的目标不是盈利——而是测量真相:真实的滑点、真实的手续费、真实的延迟。许多团队在信任这些数字之前,会假设有一个相对回测 30–50% 的折让
  • 只有当实盘与模型相符时才扩大规模。当真实的滑点和手续费与你的假设对得上时,再逐步加大规模。如果对不上,那就是你的模型在骗你——在给它投钱之前先修好它。

还要在糟糕的日子到来之前就为它做好打算。闪崩和 API 宕机不是假设——它们是已经排好期的事件,只是你不知道日期罢了。如果你唯一的应急预案是「我早上会注意到」,那你根本没有应急预案。在你的交易所支持的地方,把断连即平仓(flatten-on-disconnect)自动化,这样一次掉线就不会在你睡觉时留下一个裸露的仓位在跑。

这套纪律,一句话说完:诚实地回测,耐心地模拟交易,小规模上实盘,缓慢地扩张,并让风险——而不是希望——来决定你的仓位大小。一个搭配出色风险控制的平庸策略能活下来;一个毫无风险控制的精彩策略最终活不下来。