从零搭建AI自动交易系统:让ClawdBot(OpenClaw)成为你的交易大脑

引言

上期视频我们用ClawdBot/OpenClaw写了一个双均线策略,很多朋友还嫌不过瘾,在评论区问:能不能让AI自己看行情、自己做决策、自己下单?今天我们就来挑战一下这个终极目标,搭建一套完全自动化的AI交易系统。

有些朋友担心直接让AI交易风险太大,所以我们设计了一个更安全的架构:ClawdBot作为大脑,负责采集数据、分析新闻、生成交易信号;发明者量化平台(FMZ)作为双手,负责接收信号、执行交易、管理风控。这样既发挥了AI的分析能力,又有专业平台的安全保障,还能实时监控和复盘。

一、系统架构拆解

在动手之前,我们先把整个系统拆解清楚。整套系统由大脑端执行端两大核心部分组成,通过HTTP请求联动,形成完整的AI量化交易闭环:

1. ClawdBot(大脑端)

  1. 采集实时数据:通过浏览器自动化,获取目标币种的实时价格、交易量及新闻动态。
  2. 分析新闻情绪:AI整合新闻内容,判断市场情绪为利好、利空或中性。
  3. 生成交易决策JSON:结合数据与情绪分析,生成买入、卖出或观望的决策,并打包为JSON格式,作为跨平台通信的标准化数据。
  4. HTTP POST发送到FMZ:将JSON格式的决策信号通过HTTP POST请求推送至发明者量化平台执行端。

2. FMZ策略(执行端)

  1. 监听频道接收信号:持续监听指定专属频道,捕获大脑端发送的HTTP请求及内含的交易信号。
  2. 解析JSON并执行交易:对接收的JSON数据进行格式解析,提取核心交易指令,触发平台实盘机器人自动完成下单操作。
  3. 风控管理与止损保护:交易执行中实时监控市场价格,按预设规则执行止损、踏空保护等风控操作,降低交易风险。
  4. 可视化仪表板展示:在平台仪表板实时展示交易状态、执行结果、风控数据及账户权益等信息,实现全流程可视化监控。

二、编写指导语:教AI做什么

ClawdBot的核心是指导语,相当于给AI写一份详细的操作手册,明确其操作步骤、判断标准和执行动作。我们来看这份指导语的结构:

2.1 数据采集部分

首先告诉AI打开目标币种的页面,需要读取哪些关键数据:

【操作指令】
1. 自动化打开浏览器新标签页
2. 导航至目标币种页面:https://www.coingecko.com/en/coins/bitcoin
3. 等待页面完全加载

【需要读取的数据】
- BTC当前价格
- 24小时交易量

【需要读取的新闻】
- 滚动页面找到 "News" 区域
- 读取最新的3-5条新闻标题和摘要
- 将所有新闻整合为一条信息汇总
- 判断整体情绪(利好/利空/中性)

2.2 决策逻辑部分

接着定义清晰的交易判断标准,明确什么情况下买入、什么情况下卖出:

【买入条件】
□ 新闻情绪整体正面(利好消息主导)
□ 交易量放大显示市场活跃
□ 综合判断市场处于上升趋势

【卖出条件】
□ 新闻情绪整体负面(利空消息主导)
□ 市场出现明显风险信号

【观望条件】
□ 新闻情绪中性或混杂
□ 市场方向不明确

2.3 输出格式定义

要求AI生成标准的JSON格式数据,这是ClawdBot与发明者平台之间的核心通信协议,确保数据解析无歧义:

{
    "coin": "BTC",
    "timestamp": "2024-01-15T14:00:00.000Z",
    "current_price": 42500.00,
    "volume_24h": "25,000,000,000",
    "news_summary": "ETF资金持续流入,机构增持意愿强烈",
    "news_sentiment": "positive",
    "trade_decision": "买入",
    "decision_reason": "新闻情绪积极,交易量放大,适合建仓"
}

2.4 执行动作

最后告诉AI把JSON信号推送至发明者平台,并做好本地操作记录,方便后续复盘:

【发送信号】
执行HTTP POST请求:
URL: https://www.fmz.com/api/v1?method=pub&robot={实盘ID}&channel={UUID}
- 实盘ID:发明者平台上对应机器人的唯一数字标识,用于精准指定接收信号的目标交易机器人。
- UUID:通用唯一识别码,作为自定义频道唯一标识,是ClawdBot与FMZ的通信密钥,请勿泄露,避免恶意操作。

【记录日志】
将每次操作的时间、币种、决策、信号发送状态等信息追加到本地 tradediary.csv 文件,便于后续策略复盘与优化。

当然,这份指导语是通过多次测试完善的。测试通过之后,我们可以把它打包成一个Skill,设置定时任务自动执行。

三、发明者平台:接收信号的代码

AI的决策有了,现在需要发明者平台这边编写配套代码,实现信号接收、交易执行与风控管理的全流程落地。

3.1 配置参数

首先定义核心配置项,集中管理交易、监控、风控相关参数,其中UUID需与ClawdBot指导语中的保持一致:

const CONFIG = {
    TRADE_AMOUNT: 0.01,           // 每次固定交易数量
    CHECK_INTERVAL: 3000,         // 信号监听与风控检查间隔(毫秒)
    UUID: "自定义UUID",            // 与ClawdBot一致的频道标识,作为通信密钥
    STOP_LOSS_PERCENT: 5,         // 止损/踏空保护比例(%)
};

3.2 信号接收与去重

通过FMZ平台内置的GetChannelData函数监听指定UUID频道,获取AI发送的JSON信号。这里有个重要细节:通过时间戳判断信号是否已处理,防止因网络或平台问题导致同一信号重复执行,避免误交易:

function receiveSignal() {
    try {
        const res = GetChannelData(CONFIG.UUID);
        
        if (res === null || res === "") {
            return null;
        }
        
        const signal = typeof res === 'string' ? JSON.parse(res) : res;
        
        // 校验信号格式,确保核心字段完整
        if (!signal.coin || !signal.trade_decision) {
            Log(" 信号格式无效,核心字段缺失");
            return null;
        }
        
        // 检查时间戳是否已处理(信号去重核心逻辑)
        if (isSignalProcessed(signal.timestamp)) {
            return null;
        }
        
        Log(` 收到新信号: ${signal.coin} - ${signal.trade_decision}`);
        return signal;
        
    } catch (e) {
        Log(` 获取信号失败: ${e.message}`);
        return null;
    }
}

3.3 交易执行逻辑

解析信号中的核心内容,根据trade_decision字段执行对应的买入/卖出操作。买入前会检查USDT余额是否足够,卖出前会检查目标币种余额是否足够,避免因余额不足导致交易失败:

function executeBuy(signal, reason) {
    const symbol = signal.coin + "_USDT"; // 拼接交易对,如BTC_USDT
    exchange.SetCurrency(symbol); // 指定当前交易对
    
    const account = _C(exchange.GetAccount); // 获取账户实时资产
    const ticker = _C(exchange.GetTicker); // 获取币种实时行情
    const currentPrice = ticker.Last; // 获取最新成交价
    
    // 资金充足性检查
    const requiredBalance = currentPrice * CONFIG.TRADE_AMOUNT;
    if (account.Balance < requiredBalance) {
        Log(` 余额不足,需要 USDT $${requiredBalance.toFixed(2)},当前仅 $${account.Balance.toFixed(2)}`);
        return false;
    }
    
    // 执行市价买入(-1表示市价,按当前市场价格成交)
    const orderId = exchange.Buy(-1, CONFIG.TRADE_AMOUNT * currentPrice);
    
    if (orderId) {
        addTradeRecord({
            coin: signal.coin,
            action: "买入",
            price: currentPrice,
            amount: CONFIG.TRADE_AMOUNT,
            reason: reason
        });
        Log(` ${signal.coin} 市价买入成功,成交价格: $${currentPrice.toFixed(2)}`);
        return true;
    }
    Log(` ${signal.coin} 买入失败,未生成订单ID`);
    return false;
}

function executeSell(signal, reason) {
    try {
        const symbol = signal.coin + "_USDT";
        exchange.SetCurrency(symbol);
        
        const account = _C(exchange.GetAccount);
        const ticker = _C(exchange.GetTicker);
        const currentPrice = ticker.Last;
        
        // 目标币种充足性检查
        if (account.Stocks < CONFIG.TRADE_AMOUNT) {
            Log(` ${signal.coin} 余额不足,需要 ${CONFIG.TRADE_AMOUNT}枚,当前仅 ${account.Stocks.toFixed(6)}枚`);
            return false;
        }
        
        // 执行市价卖出
        const orderId = exchange.Sell(-1, CONFIG.TRADE_AMOUNT);
        
        if (orderId) {
            // 添加交易记录至平台
            addTradeRecord({
                coin: signal.coin,
                action: "卖出",
                price: currentPrice,
                amount: CONFIG.TRADE_AMOUNT,
                reason: reason || signal.decision_reason,
                timestamp: new Date().toISOString()
            });
            
            Log(` ${signal.coin} 市价卖出成功 - 成交价格: $${currentPrice.toFixed(2)}, 成交数量: ${CONFIG.TRADE_AMOUNT}`);
            return true;
        } else {
            Log(` ${signal.coin} 卖出失败,未生成订单ID`);
            return false;
        }
        
    } catch (e) {
        Log(` 卖出异常: ${e.message}`);
        return false;
    }
}

3.4 止损风控机制

代码中设置了固定止损比例,当市场价格触及预设止损线时会自动执行反向交易操作,分为亏损止损踏空止损两个核心场景,全方位控制交易风险:

function checkStopLoss() {
    const latestTrade = getLatestTradeRecord(); // 获取最新一笔交易记录
    
    if (!latestTrade) return { triggered: false }; // 无交易记录则跳过风控检查
    
    const ticker = _C(exchange.GetTicker);
    const currentPrice = ticker.Last;
    const tradePrice = latestTrade.price; // 最新交易的成交价格
    const priceChangePercent = ((currentPrice - tradePrice) / tradePrice) * 100; // 价格涨跌幅百分比
    
    // 场景一:买入后价格下跌触发亏损止损,限制最大亏损
    if (latestTrade.action === "买入") {
        const stopLossPrice = tradePrice * (1 - CONFIG.STOP_LOSS_PERCENT / 100); // 计算止损价格
        
        if (currentPrice <= stopLossPrice) {
            Log(` 亏损止损触发!当前跌幅: ${priceChangePercent.toFixed(2)}%,触发${CONFIG.STOP_LOSS_PERCENT}%止损线`);
            return {
                triggered: true,
                action: "卖出",
                reason: `止损卖出:跌幅触发${CONFIG.STOP_LOSS_PERCENT}%止损线,当前跌幅${priceChangePercent.toFixed(2)}%`
            };
        }
    }
    
    // 场景二:卖出后价格上涨触发踏空止损,避免错过大幅上涨行情
    if (latestTrade.action === "卖出") {
        const stopLossPrice = tradePrice * (1 + CONFIG.STOP_LOSS_PERCENT / 100); // 计算踏空保护价格
        
        if (currentPrice >= stopLossPrice) {
            Log(` 踏空止损触发!当前涨幅: ${priceChangePercent.toFixed(2)}%,触发${CONFIG.STOP_LOSS_PERCENT}%保护线`);
            return {
                triggered: true,
                action: "买入",
                reason: `踏空止损:涨幅触发${CONFIG.STOP_LOSS_PERCENT}%保护线,当前涨幅${priceChangePercent.toFixed(2)}%`
            };
        }
    }
    
    return { triggered: false };
}

3.5 主循环逻辑

整个策略的运行核心是一个无限循环,按风控优先的原则依次处理止损检查、AI信号处理和仪表板更新,确保风险控制始终是第一优先级:

function main() {
    initialize(); // 初始化:创建交易记录、仪表板等
    Log(" 现货自动交易机器人启动,开始监听AI信号...");
    
    while (true) { // 无限循环,持续运行
        // 1. 检查止损(优先级最高),触发则立即执行
        const stopLossInfo = checkStopLoss();
        if (stopLossInfo.triggered) {
            executeStopLoss(stopLossInfo);
        }
        
        // 2. 获取并处理AI信号,无信号则跳过
        const signal = receiveSignal();
        if (signal) {
            processSignal(signal);
        }
        
        // 3. 实时更新可视化仪表板
        displayDashboard();
        
        // 4. 按预设间隔等待,进入下一轮检查
        Sleep(CONFIG.CHECK_INTERVAL);
    }
}

3.6 可视化显示

光跑交易不够直观,我们还做了一个可视化仪表板,包含四个核心数据表格,将账户、风控、信号、交易记录一站式展示,系统运行状态一目了然:

四、自动化执行

当ClawdBot指导语调试无误、发明者平台代码测试通过后,即可实现系统全自动化运行:在ClawdBot后台将编写好的指导语打包成一个Skill(可复用的AI操作模板),并设置定时任务(如每10分钟执行一次),系统便会按设定频率自动采集数据、分析决策、发送信号,发明者平台则实时监听并执行交易,全程无需人工盯盘。

五、注意事项与风险提示

这里要特别提醒大家,量化交易始终伴随市场风险,AI决策并非绝对准确,操作前请务必注意以下几点:

  1. AI决策仅供参考,其分析基于公开数据和预设逻辑,不能完全依赖它进行投资决策;
  2. 虽然加了止损机制,但极端市场行情(如插针、暴跌)下,策略可能存在失效风险,无法完全规避损失;
  3. 建议先用模拟盘或小资金测试,至少运行1-2个交易周期验证系统稳定性后,再考虑逐步加大投入;
  4. 注意风险隔离,建议使用独立的交易账户和设备进行操作,避免泄露账户信息和UUID通信密钥;
  5. 定期检查策略运行状态,查看交易日志和平台报错信息,确保ClawdBot和发明者平台各模块正常工作;
  6. 交易日志可作为反馈数据,优化ClawdBot指导语的决策逻辑和发明者平台的风控参数,让系统持续迭代升级。

总结

回顾一下今天的成果:我们成功搭建了一套端到端的AI全自动量化交易系统,核心分为两大模块——ClawdBot作为大脑,负责市场数据采集、新闻情绪分析和交易决策生成;发明者量化平台作为执行端,负责信号接收、自动化交易、风控管理和可视化监控,两边通过HTTP接口实现标准化数据互通,真正实现无需人工盯盘的全自动交易。

更重要的是,这套架构具备很强的可扩展性:交易日志可以反馈给AI进行复盘优化,ClawdBot的Skill也能持续迭代,添加更多数据源(如合约数据、行业研报)和更精细的决策逻辑。当然目前的模型还比较基础,仅为大家提供一种AI量化交易的思路和实操玩法。

如果你有更好的优化想法或新的功能需求,欢迎在评论区交流!

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线