BitShares Forum
Main => 中文 (Chinese) => Topic started by: alt on September 10, 2026, 04:10:27 am
-
https://github.com/pch957/btsbots/blob/main/TradeBots.md
BTSBots增加AI交易agent
demo.btsbots在 XBTSX.USDT/BTS 市场测试,使用的 gemini-3.5-flash-lite 模型
- 正在连接 Meteor 节点: wss://ws.btsbots.com/websocket
🔌[DDP 协议] 连接已激活。
🔑[等待登陆] 未登陆,等待认证...
✓ [BotsKey] 从 pass 成功载入账号 [demo.btsbots] 及其关联的 2 把 Key。
✓ [BotsClient] 登录成功!
🔄 [配置更新] 成功载入策略 [ai_agent]: 基于 Google AI Studio (Gemini 2.0) / OpenAI 的全自主量化交易 Agent (支持吃单与做
市)
🚀 [TradeBots] 机器人引擎就绪!策略: [ai_agent] | 监听账户: [demo.btsbots]
======================================================================
📊 [BTSBots AI Agent] 负责市场历史成交统计与盈亏看板 (PnL Dashboard)
======================================================================
• 负责市场范围: [('BTS', 'XBTSX.USDT'), ('XBTSX.USDT', 'BTS')]
• 撮合成交总笔数: 16 笔
• 累计成交换手额: 449.86 CNY
• 累计法币净盈亏: 🔴 -5.47 CNY
• 各代币累计净流动明细:
└─ BTS : -34678.5170 (公允折合: -349.65 CNY)
└─ XBTSX.USDT: +51.8450 (公允折合: +344.17 CNY)
======================================================================
💓 [Pulse] 区块 #114230048 | 2026-09-10 13:52:48
🧠 [AI Agent 思考分析] [区块 #114230049]
└─ 补齐BTS市场做市挂单
🛡️ [风控拦截] 严重警告: 报价 0.00157960 偏离公允价 0.00151879 超过 2.0% 红线 -> 自动修正到安全区间
📡 [触发 AI 决策] [区块 #114230049] 原因: 检测到有充足余额的市场缺失挂单 ['BTS/XBTSX.USDT'],强制唤醒 AI 建立流动
性
# 🤖 BTSBots TradeBots 开发者与量化策略指南
`TradeBots` 是专为 BitShares(比特股)DEX 量化交易与做市设计的 Python 自动化交易框架。它深度集成了 Meteor DDP 实时数据流、BitShares 原生高效订单修改操作(OP 77,无需撤单即可直改价格与数量)以及零信任密钥管理。
---
## 🚀 快速上手
### 启动量化与 AI Agent 策略机器人
```bash
# 1. 启动 AI 自主交易 Agent 机器人 (支持 Google AI Studio / OpenAI / DeepSeek / Ollama)
GEMINI_API_KEY="AIzaSy..." uv run trade_bots_ai.py --pass btsbots/my_account --strategy ai_agent
# 2. 启动简单法定做市策略 (SimpleMaker)
uv run trade_bots.py --pass btsbots/my_account --strategy simple
# 3. 启动动态自适应多档网格策略 (DynamicGrid - 震荡收割机)
uv run trade_bots_grid.py --pass btsbots/my_account --strategy grid
# 4. 启动通用 N 环路原子无损套利策略 (UniversalArbitrage - 负对数图算法)
uv run trade_bots_arbitrage.py --pass btsbots/my_account --strategy arbitrage
# 5. 启动布林带均值回归做市策略 (BollingerMeanReversion)
uv run trade_bots_bollinger.py --pass btsbots/my_account --strategy bollinger
```
---
## 🧠 AI 自主交易 Agent (`trade_bots_ai.py`)
`AITradingAgent` 将大语言模型(LLM)与去中心化区块链高频交易引擎深度结合,为 AI 提供 360° 结构化全景市场决策上下文,并由底层的零信任硬风控护栏(Guardrails)确保每一笔链上操作的安全合规。
### 1. 核心架构与决策流
```text
┌────────────────────────────────────────────────────────┐
│ Meteor DDP 实时行情与成交流 │
└───────────────────────────┬────────────────────────────┘
│
┌───────────────────────────▼────────────────────────────┐
│ 360° 全景市场上下文构建器 (Context) │
│ • 负责市场资产画像、余额与持仓上限 (Max Holding CNY) │
│ • Top 5 盘口深度、微观流动性与单价物理单位 (Price Unit)│
│ • 历史成交记录与法定 CNY 实时盈亏看板 (PnL Tracker) │
│ • 市场双向缺口与在单残缺度诊断 (Coverage & Health) │
│ • 动态库存倾斜加价指导 (Dynamic Inventory Skew) │
└───────────────────────────┬────────────────────────────┘
│ JSON 提示词
┌───────────────────────────▼────────────────────────────┐
│ 主流 LLM 决策推理引擎 │
│ (Gemini 2.0 / GPT-4o / DeepSeek / Ollama) │
└───────────────────────────┬────────────────────────────┘
│ 输出 JSON 意向 (Intents)
┌───────────────────────────▼────────────────────────────┐
│ 🛡️ 零信任硬风控护栏 (Guardrails) │
│ • 市场范围锁 (Market Scoping Guard: 彻底隔离无关市场) │
│ • 法币下单额度硬截断熔断 (target_order_cny Cap) │
│ • 最大持仓上限拦截 (max_holding_cny) │
│ • 双向价差保底锁 (Anti Self-Match: 严禁平价自成交) │
│ • 冗余重复挂单自动清理撤单 │
└───────────────────────────┬────────────────────────────┘
│ 原子打包提交
┌───────────────────────────▼────────────────────────────┐
│ BitShares 区块链原生广播 (OP 77 / OP 1) │
└────────────────────────────────────────────────────────┘
```
### 2. AI Agent 五大核心技术优势
- **免费 Google AI Studio 原生支持**:使用 `gemini-2.0-flash` 模型,高吞吐低延迟,免去高昂 API 费用。
- **智能自主门控与静默心跳(Gating & Pulse Heartbeat)**:仅在发生缺单、在单被吃超 50%、价格变动等实质信号时才唤醒 AI;平稳时终端保持单行脉冲心跳,绝不刷屏。
- **动态库存倾斜(Dynamic Inventory Skew)**:越接近设定的资产持仓上限,买入挂单价格向下偏离折价越多;未设上限则视为无上限。
- **多资产法定盈亏看板(PnL Dashboard)**:启动即自动汇总结算负责市场的撮合成交笔数、累计换手额与净盈亏。
- **单价物理单位防混淆**:明确区分 `A/B` 市场单价单位为 `B per 1 A`,彻底避免买卖单数值颠倒错单。
---
## 📊 经典交易策略与数学原理
### 1. 简单法定做市 (`SimpleMaker` / `trade_bots.py`)
- **场景**:日常做市、提供双向流动性。
- **原理**:基于资产的法定公允价格(或自定义锚定比率)计算理论中间价,向上加价 `maker_spread%` 挂单,同时设置严格的 Maker 防吃单保护。
### 2. 动态多档网格策略 (`DynamicGrid` / `trade_bots_grid.py`)
- **场景**:宽幅震荡行情。
- **原理**:自适应盘口中间价 $P_{\text{mid}} = \frac{P_{\text{ask1}} + P_{\text{bid1}}}{2}$ 作为中轴,按等比步长铺设 $N$ 档网格,买卖双向严格受 Maker 边界保护(买单不高过卖一,卖单不低过买一),利用 **OP 77 动态平移网格档位**。
### 3. 通用 $N$ 环路原子无损套利 (`UniversalArbitrage` / `trade_bots_arbitrage.py`)
- **场景**:跨币种环路价差套利(自动发现 2 环、3 环、4 环机会)。
- **负对数图算法优化**:
$$\prod_{i=1}^k P_i > 1 \iff \sum_{i=1}^k -\ln(P_i) < 0$$
将各市场的最优兑换汇率转换为有向图边权重 $-\ln(P)$,通过**负权环路探测算法**在毫秒级内自动寻优。
- **原子事务**:将整个闭环的 $N$ 笔操作打包在同一个区块链 Transaction 内原子提交,零滑点零单边风险。
### 4. 布林带均值回归做市 (`BollingerMeanReversion` / `trade_bots_bollinger.py`)
- **场景**:波动率扩张与均值回归行情。
- **原理**:实时统计滑动采样均线(MA)与标准差 $\sigma$,在上轨超买区与下轨超卖区挂单做市,赚取波动率收缩利润。
---
## ⚙️ 配置文件说明 (`trade_rules.json` / `trade_rules-example.json`)
```json
{
"strategies": {
"ai_agent": {
"strategy_name": "AITradingAgent",
"description": "基于 Google AI Studio / OpenAI 的全自主量化交易 Agent",
"block_delay": 1.0,
"keep_bts_fees": 30.0,
"max_holding_cny": {
"XBTSX.USDT": 2000.0,
"CNY": 5000.0,
"BTS": 10000.0
},
"ai_agent": {
"provider": "gemini",
"model": "gemini-2.0-flash",
"api_base": "https://generativelanguage.googleapis.com/v1beta/openai/",
"api_key": "YOUR_GEMINI_API_KEY",
"max_price_deviation_pct": 15.0,
"min_maker_spread_pct": 1.5
},
"custom_price": { "CNY": [13.597625854, "BTS"] },
"default": { "target_order_cny": 50.0 },
"markets": [["BTS", "CNY"], ["BTS", "XBTSX.USDT"]]
},
"simple": {
"strategy_name": "SimpleMaker",
"description": "基于公允法定价值 (CNY) 的简单做市策略",
"block_delay": 1.0,
"keep_bts_fees": 20.0,
"custom_price": { "CNY": [16.0, "BTS"] },
"default": { "freq": 2, "maker_spread": 1.5, "target_order_cny": 50.0 },
"markets": [["BTS", "CNY"], ["BTS", "USD"]]
},
"grid": {
"strategy_name": "DynamicGrid",
"description": "多档动态等比网格策略",
"block_delay": 1.0,
"keep_bts_fees": 20.0,
"custom_price": { "CNY": [16.0, "BTS"], "USD": [7.0, "CNY"] },
"default": {
"freq": 2,
"grid_levels": 3,
"grid_step_pct": 1.2,
"target_order_cny_per_grid": 30.0
},
"markets": [["BTS", "CNY"], ["BTS", "USD"]]
},
"arbitrage": {
"strategy_name": "UniversalArbitrage",
"description": "通用 N 环路原子无损套利策略",
"block_delay": 0.5,
"keep_bts_fees": 30.0,
"min_profit_pct": 0.5,
"trade_amount_cny": 100.0,
"max_cycle_length": 4,
"markets": [["BTS", "CNY"], ["BTS", "USD"], ["CNY", "USD"]]
},
"bollinger": {
"strategy_name": "BollingerMeanReversion",
"description": "布林带均值回归做市策略",
"block_delay": 1.0,
"keep_bts_fees": 20.0,
"custom_price": { "CNY": [16.0, "BTS"] },
"default": { "freq": 2, "window_size": 20, "k_std": 2.0, "target_order_cny": 50.0 },
"markets": [["BTS", "CNY"], ["BTS", "USD"]]
}
}
}
```
---
## 🛠️ 二次开发指南
### 1. 核心数据查询 API
| 接口名称 | 参数 | 返回值 | 说明 |
| :--- | :--- | :--- | :--- |
| `self.get_price(asset)` | `asset: str` | `float` | 获取资产公允定价(支持 `custom_price` 链式锚定换算) |
| `self.get_free_balance(asset)` | `asset: str` | `float` | 获取资产可用余额(若为 BTS 已自动扣除保留的手续费) |
| `self.get_total_balance(asset)` | `asset: str` | `float` | 获取资产总持仓(空闲余额 + 在单资产) |
| `self.get_my_orders(sell, recv)`| `sell, recv: Optional[str]` | `List[dict]` | 获取当前账号在指定方向上的有效挂单(已清洗 order_id) |
| `self.get_market_orders(sell, recv)` | `sell, recv: str` | `List[dict]` | 获取市场上除自身以外的盘口深度订单列表(按单价升序) |
| `self.calculate_market_pnl(markets)` | `markets: Optional` | `dict` | 统计指定市场的成交笔数、换手额及法定净盈亏 |
| `self.get_order_by_id(order_id)` | `order_id: str` | `Optional[dict]` | 根据订单 ID 检索订单完整详情 |
| `self.is_chain_synced()` | 无 | `Tuple
[bool, delay, ts]`| 检查区块链时钟是否正常同步(30 秒容差) |
---
### 2. 极简订单意向提交接口 (`apply_order_intents`)
#### ① 取消订单 (`cancel`)
```python
{"action": "cancel", "order_id": "1.7.573627825", "reason": "清理冗余订单"}
```
#### ② 修改订单 (`update` - 原生 OP 77,极简入参)
```python
# 仅需传入 order_id 与期望的目标新值,底层自动计算 Delta 与在单基数
{"action": "update", "order_id": "1.7.573174054", "price": 0.0754, "amount": 1000.0}
# 或仅改价格:
{"action": "update", "order_id": "1.7.573174054", "price": 0.0754}
# 或仅改数量:
{"action": "update", "order_id": "1.7.573174054", "amount": 1000.0}
```
#### ③ 新建挂单 (`create`)
```python
{
"action": "create",
"sell_asset": "BTS",
"receive_asset": "CNY",
"amount": 500.0,
"price": 0.0754,
"reason": "初始流动性挂单"
}
```
---
### 3. 自定义策略完整编写范例
```python
import asyncio
from typing import List, Dict, Any, Optional
from btsbots.tradebots import TradeBots
class MyCustomBot(TradeBots):
async def calculate_strategy(self, block_num: int) -> Optional[List[Dict[str, Any]]]:
intents = []
for (a_s, a_b), m_cfg in self.markets_config.items():
freq = int(m_cfg.get("freq", 1))
if (block_num % freq) != 0:
continue
p_s = self.get_price(a_s)
p_b = self.get_price(a_b)
if p_s <= 0 or p_b <= 0:
continue
fair_price = p_s / p_b
spread_pct = float(m_cfg.get("maker_spread", 1.5)) / 100.0
target_price = fair_price * (1.0 + spread_pct)
target_cny = float(m_cfg.get("target_order_cny", 50.0))
target_amount = target_cny / p_s
my_orders = self.get_my_orders(a_s, a_b)
if my_orders:
primary = my_orders[0]
curr_p = float(primary.get("p", 0.0))
# 偏离超过 0.5% 则极简更新订单
if abs(curr_p - target_price) / target_price > 0.005:
intents.append({
"action": "update",
"order_id": primary["order_id"],
"price": target_price,
"amount": target_amount,
"reason": "跟随行情调价"
})
else:
free_b = self.get_free_balance(a_s)
if free_b >= (target_amount * 0.1):
intents.append({
"action": "create",
"sell_asset": a_s,
"receive_asset": a_b,
"amount": min(free_b, target_amount),
"price": target_price,
"reason": "初始做市挂单"
})
return intents if intents else None
async def main():
bot = MyCustomBot(config_path="trade_rules.json", strategy_name="simple")
try:
await bot.run()
while True:
await asyncio.sleep(1)
finally:
await bot.close()
if __name__ == "__main__":
asyncio.run(main())
```[/list]