[AI tradingOS] 市场数据系统 | 多交易所交易接口 | 适配器模式
第2章:市场数据系统
欢迎回来
在第1章:数据库与配置系统中,我们学习了nofx如何作为"大脑与记忆中枢"存储重要设置。但要让AI有效交易,它还需要实时掌握市场动态。
AI的"市场耳目"是什么?
想象nofx如同一位超级侦探。它拥有记忆(数据库),但如何感知外部世界的变化?它需要观察
对nofx而言,这些"耳目"就是**市场数据系统**。这个系统持续监控金融市场,收集制定智能交易决策所需的关键信息。它就像一个专业的数据通讯社,不过采集的不是新闻,而是价格、交易量和专业指标等数字信息。
场景:获取市场快照
假设AI交易器需要了解:"当前比特币(BTC)兑美元稳定币(USDT)的市场状况如何?"它需要的不仅是价格,而是完整报告
AI可能要求获取:
- BTCUSDT当前价格
- 过去1小时和4小时的价格变化
- 技术指标(如EMA、MACD、RSI)反映的趋势和动量
- 合约交易关键数据:未平仓量(OI)和资金费率
市场数据系统就是为回答这些问题而设计,为AI提供清晰的市场分析快照。
核心机制
1. 原始市场数据:基础建材
原始数据是市场提供的基础事实:
- 实时价格:加密货币的瞬时报价
- K线数据:特定时段(如3分钟/4小时)的价格摘要,包含开盘价、收盘价、最高价、最低价和成交量
- 交易量:特定时段内的买卖总量,高成交量通常预示强趋势
- 未平仓量(OI):未结算的期货合约总量,反映市场资金活跃度
- 资金费率:永续合约市场中多空双方的资金费用,用于锚定合约价格
nofx直接从币安等交易所获取这些原始数据。
2. 数据获取方式:监听策略
nofx通过两种主要方式从交易所获取数据:
| 方式 | 类比 | 用途 | 工作原理 |
|---|---|---|---|
| API客户端 | 致电交易所索要报告 | 历史数据、OI、资金费率等 | 发送请求后获取单次响应 |
| WebSocket | 实时新闻播报 | 实时价格、持续更新的K线 | 建立连接后自动推送数据更新 |
实时数据通常通过"组合流"WebSocket获取,可高效同时监控多种加密货币。
3. 加工数据:理解"为什么"
原始数据只是数字,AI需要理解其含义。技术指标由此产生:
- EMA(指数移动平均):平滑价格数据识别趋势,侧重近期价格
- MACD(异同移动平均线):判断趋势强度、方向和持续时间
- RSI(相对强弱指数):识别超买(可能下跌)/超卖(可能上涨)状态
通过这些计算,nofx将原始数据转化为AI可操作的洞察。
系统调用示例
获取BTCUSDT数据时,系统调用market.Get()函数:
func getBitcoinSnapshot() {data, err := market.Get("BTCUSDT")fmt.Printf("当前价格: %.2f\n", data.CurrentPrice)fmt.Printf("1小时涨跌幅: %.2f%%\n", data.PriceChange1h) fmt.Printf("EMA20: %.3f\n", data.CurrentEMA20)
}
返回的market.Data结构包含完整市场信息:
type Data struct {Symbol stringCurrentPrice float64PriceChange1h float64 CurrentEMA20 float64CurrentMACD float64OpenInterest *OIData//...更多字段
}
底层运行
当调用market.Get("BTCUSDT")时:

关键代码:
- market.Get():协调数据收集与指标计算
- WSMonitor:管理实时K线数据缓存
- APIClient:处理历史数据API请求
- CombinedStreams:维护WebSocket实时连接
小结
市场数据系统作为nofx感知市场的感官系统,通过API和WebSocket获取原始数据,并转化为EMA/MACD/RSI等技术指标,为AI决策提供结构化输入
下一章我们将探讨多交易所交易接口,了解系统如何与交易所进行交互。
第3章:多交易所交易接口
欢迎回来
在第2章:市场数据系统中,我们学习了nofx如何作为AI的"市场耳目"收集处理数据。但理解市场远远不够,AI交易员需要通过下单来执行交易决策
AI的"万能交易遥控器"
假设家中有多台不同品牌的电视机,每台都有独特的遥控器操作方式。如果要让机器人控制所有电视,就得教会它每个遥控器的使用方法——这显然费时费力。
加密货币交易所同样如此。币安、Hyperliquid、Aster DEX等交易所各有其API"语言"来处理下单、查询余额等操作。如果让AI直接学习每家交易所的独特API,系统将变得复杂而脆弱。
多交易所交易接口正是为此而生。它如同一个"万能遥控器",让AI只需掌握一套通用指令,由接口自动转换为各交易所特定的API调用。
核心场景:“开多仓”
假设AI决策:“以0.001数量、5倍杠杆做多BTCUSDT”。
若无统一接口,AI需要了解:
- 币安的API密钥格式和接入方式
- 币安设置杠杆的特殊参数
- 币安市价单的精确API格式
- 币安特有的错误消息处理
若切换到Hyperliquid交易,又需重新学习整套流程。
- 通过多交易所交易接口,AI只需发出通用指令:“交易器,做多BTCUSDT,数量0.001,杠杆5”。接口自动完成底层适配。
核心架构
1. Trader接口:通用语言
在编程中,"接口"是定义行为契约的蓝图。nofx的Trader接口规定了所有交易所必须实现的标准操作:
| 方法 | 说明 |
|---|---|
GetBalance() | 查询账户余额 |
GetPositions() | 获取当前持仓 |
OpenLong() | 开多仓 |
OpenShort() | 开空仓 |
SetLeverage() | 调整杠杆 |
SetStopLoss() | 设置止损 |
GetMarketPrice() | 获取当前价格 |
AI只需了解这些通用方法,无需关心具体实现。
2. 交易所适配器:翻译官
每个支持的交易所都有专属适配器,实现Trader接口并处理交易所特有逻辑:
BinanceTrader:将OpenLong()转换为币安API调用HyperliquidTrader:适配Hyperliquid的特殊参数AsterTrader:处理Aster DEX的独特规则
这种设计使
nofx能灵活扩展新交易所支持,只需新增适配器而无需修改AI核心逻辑。
接口调用示例
AI决策引擎(详见第4章)通过统一接口执行交易:
func executeTrade() {// 1. 设置全仓模式myTrader.SetMarginMode("BTCUSDT", true)// 2. 通用做多指令result, _ := myTrader.OpenLong("BTCUSDT", 0.001, 5)// 3. 查询统一格式的余额balance, _ := myTrader.GetBalance()
}
无论底层是币安还是Hyperliquid,AI代码保持完全一致。
底层实现

执行流程剖析
当AI调用OpenLong()时:

代码实现示例
- 接口定义 (
trader/interface.go)
type Trader interface {OpenLong(symbol string, qty float64, leverage int) (map[string]interface{}, error)//...其他标准方法
}
- Hyperliquid适配器 (
trader/hyperliquid_trader.go)
func (t *HyperliquidTrader) OpenLong(symbol string, qty float64, leverage int) (map[string]interface{}, error) {// 1. 设置杠杆t.SetLeverage(symbol, leverage)// 2. 转换数量精度adjQty := t.roundToSzDecimals(convertSymbol(symbol), qty)// 3. 构造Hyperliquid特定订单order := hyperliquid.CreateOrderRequest{Coin: "BTC",IsBuy: true,Size: adjQty,//...其他参数}// 4. 提交订单_, err := t.exchange.Order(order)return map[string]interface{}{"status":"FILLED"}, err
}
- 币安适配器 (
trader/binance_futures.go)
func (t *FuturesTrader) OpenLong(symbol string, qty float64, leverage int) (map[string]interface{}, error) {// 1. 币安杠杆设置t.client.NewChangeLeverageService().Symbol(symbol).Leverage(leverage).Do()// 2. 数量格式化qtyStr := t.FormatQuantity(symbol, qty)// 3. 币安订单类型order, err := t.client.NewCreateOrderService().Symbol(symbol).Side(futures.SideTypeBuy). // 币安多单枚举//...其他参数.Do()return map[string]interface{}{"orderId":order.OrderID}, err
}
小结
多交易所交易接口通过标准化操作和适配器模式,使AI能够无缝对接不同加密货币交易所
这种设计将复杂的交易所API差异封装在适配器中,为上层提供统一调用方式,极大提升了系统的扩展性和维护性。
现在nofx已具备市场感知和交易执行能力,下一步需要构建智能决策大脑。在第4章:AI决策引擎中,我们将探索系统如何分析市场数据并生成交易信号。
