[TOC]

Dans la dernière vidéo, nous avons implémenté une stratégie de double moyenne mobile avec ClawdBot/OpenClaw. Nombreux sont ceux qui, insatisfaits, ont posé la question suivante dans les commentaires : l’IA peut-elle analyser les conditions du marché, prendre ses propres décisions et passer des ordres de manière autonome ? Aujourd’hui, nous allons relever ce défi et créer un système de trading entièrement automatisé par l’IA.
Certains amis craignent que laisser l’IA trader directement soit trop risqué, nous avons donc conçu une architecture plus sûre :ClawdBot comme cerveauElle est chargée de collecter les données, d’analyser l’actualité et de générer des signaux de trading ;Plateforme de quantification des inventeurs (FMZ) à deux mainsElle est chargée de recevoir les signaux, d’exécuter les transactions et de gérer le contrôle des risques. Elle tire parti des capacités analytiques de l’IA, offre les garanties de sécurité d’une plateforme professionnelle et permet une surveillance et un examen en temps réel.

Avant de commencer, analysons le système dans son ensemble. Le système complet se compose de…fin du cerveauetFin de l’exécutionComposé de deux éléments principaux, liés par des requêtes HTTP, formant une boucle fermée complète de trading quantitatif d’IA :

Le cœur de ClawdBot réside dans son manuel d’utilisation, véritable guide détaillé pour l’IA, qui définit clairement ses étapes de fonctionnement, ses critères de jugement et les actions à effectuer. Examinons la structure de ce manuel :
Tout d’abord, indiquez à l’IA quelles données clés elle doit lire lorsqu’elle ouvre la page de la devise cible :
【操作指令】
1. 自动化打开浏览器新标签页
2. 导航至目标币种页面:https://www.coingecko.com/en/coins/bitcoin
3. 等待页面完全加载
【需要读取的数据】
- BTC当前价格
- 24小时交易量
【需要读取的新闻】
- 滚动页面找到 "News" 区域
- 读取最新的3-5条新闻标题和摘要
- 将所有新闻整合为一条信息汇总
- 判断整体情绪(利好/利空/中性)
Ensuite, définissez des critères de négociation clairs, en précisant dans quelles circonstances acheter et dans quelles circonstances vendre :
【买入条件】
□ 新闻情绪整体正面(利好消息主导)
□ 交易量放大显示市场活跃
□ 综合判断市场处于上升趋势
【卖出条件】
□ 新闻情绪整体负面(利空消息主导)
□ 市场出现明显风险信号
【观望条件】
□ 新闻情绪中性或混杂
□ 市场方向不明确
L’IA doit générer des données au format JSON standard. Il s’agit du protocole de communication principal entre ClawdBot et la plateforme de l’inventeur, garantissant une analyse des données sans ambiguïté.
{
"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": "新闻情绪积极,交易量放大,适合建仓"
}
Enfin, demandez à l’IA d’envoyer le signal JSON à la plateforme de l’inventeur et d’enregistrer les opérations locales pour un examen ultérieur :
【发送信号】
执行HTTP POST请求:
URL: https://www.fmz.com/api/v1?method=pub&robot={实盘ID}&channel={UUID}
- 实盘ID:发明者平台上对应机器人的唯一数字标识,用于精准指定接收信号的目标交易机器人。
- UUID:通用唯一识别码,作为自定义频道唯一标识,是ClawdBot与FMZ的通信密钥,请勿泄露,避免恶意操作。
【记录日志】
将每次操作的时间、币种、决策、信号发送状态等信息追加到本地 tradediary.csv 文件,便于后续策略复盘与优化。
Bien entendu, cette directive a été affinée grâce à de nombreux tests. Une fois les tests concluants, nous pourrons l’intégrer à une compétence et la configurer pour qu’elle s’exécute automatiquement en tant que tâche planifiée.


Une fois les capacités de prise de décision basées sur l’IA établies, la tâche actuelle pour la plateforme de l’inventeur consiste à développer un code de support pour mettre en œuvre l’ensemble du processus de réception du signal, d’exécution des transactions et de gestion du contrôle des risques.
Commencez par définir les éléments de configuration principaux permettant de gérer de manière centralisée les paramètres de transaction, de surveillance et de contrôle des risques. L’UUID doit être conforme à celui spécifié dans les directives ClawdBot.
const CONFIG = {
TRADE_AMOUNT: 0.01, // 每次固定交易数量
CHECK_INTERVAL: 3000, // 信号监听与风控检查间隔(毫秒)
UUID: "自定义UUID", // 与ClawdBot一致的频道标识,作为通信密钥
STOP_LOSS_PERCENT: 5, // 止损/踏空保护比例(%)
};
Intégrée à la plateforme FMZGetChannelDataCette fonction écoute un canal UUID spécifié et récupère le signal JSON envoyé par l’IA. Un détail important : un horodatage est utilisé pour déterminer si le signal a été traité, évitant ainsi son exécution répétée en raison de problèmes de réseau ou de plateforme, et prévenant de ce fait les transactions erronées.
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;
}
}
Analysez le contenu principal du signal, en vous basant surtrade_decisionCe champ exécute l’opération d’achat/vente correspondante. Avant l’achat, il vérifie si le solde en USDT est suffisant ; avant la vente, il vérifie si le solde dans la devise cible est suffisant afin d’éviter un échec de transaction pour solde insuffisant.
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;
}
}
Le code définit un pourcentage de stop-loss fixe. Lorsque le prix du marché atteint ce niveau prédéfini, il exécute automatiquement une opération inverse.Stop lossetLimitez vos pertes si vous ratez une opportunité.Deux scénarios principaux pour un contrôle complet des risques liés aux transactions :
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 };
}
L’essence de toute la stratégie repose sur une boucle infinie, exécutée par…Contrôle des risques en premierLe principe consiste à traiter les contrôles de stop-loss, le traitement des signaux d’IA et les mises à jour du tableau de bord dans cet ordre, en veillant à ce que le contrôle des risques soit toujours la priorité absolue :
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);
}
}
L’exécution de transactions en elle-même n’étant pas suffisamment intuitive, nous avons également créé un tableau de bord visuel regroupant quatre tableaux de données essentiels. Ce tableau de bord affiche les informations du compte, le contrôle des risques, les signaux et l’historique des transactions en un seul endroit, offrant ainsi une vue d’ensemble claire de l’état opérationnel du système.
| Nom de la table | Afficher le contenu |
|---|---|
| 💰 Aperçu des avantages | Quantité initiale/actuelle de devises, solde en USDT, capital total du compte, montant et pourcentage des profits/pertes |
| 🛡️ Surveillance des ordres stop-loss | Dernier type de transaction, prix de la transaction, variation de prix actuelle, distance par rapport à la ligne de stop-loss, état actuel du contrôle des risques. |
| 🤖 Signal actuel de l’IA | Devise cible, cours en temps réel, résumé de l’actualité, analyse du sentiment de marché, décisions de trading de l’IA et justification de ces décisions. |
| 📋 Historique des transactions | L’heure, le type d’opération, le prix de la transaction et le motif des 10 dernières transactions. |

Une fois les instructions de ClawdBot correctement déboguées et le code de la plateforme de l’inventeur validé par les tests, le système peut fonctionner de manière entièrement automatique : dans le backend de ClawdBot, les instructions écrites sont regroupées en un seul fichier…Skill(Modèle d’opération d’IA réutilisable), et configurerTâches planifiéesPar exemple, si l’exécution a lieu toutes les 10 minutes, le système collecte, analyse et prend des décisions automatiquement, puis envoie des signaux à la fréquence définie. La plateforme de l’inventeur écoute et exécute ensuite les transactions en temps réel, sans intervention manuelle.

Il est important de rappeler que le trading quantitatif comporte toujours des risques de marché et que les décisions de l’IA ne sont pas infaillibles. Veuillez prendre en compte les points suivants avant de trader :
Passons en revue les réalisations d’aujourd’hui : nous avons réussi à construire un ensembleSystème de trading quantitatif entièrement automatisé par IA de bout en boutLe système repose sur deux modules principaux : ClawdBot, véritable cerveau du système, qui collecte les données de marché, analyse le sentiment des actualités et génère les décisions de trading ; et la plateforme quantitative Inventor, qui assure l’exécution des signaux, la réception des ordres, le trading automatisé, la gestion des risques et le suivi visuel. Grâce à une interface HTTP, les deux modules échangent des données de manière standardisée, permettant ainsi un trading entièrement automatisé sans intervention manuelle.
Plus important encore, cette architecture offre une grande évolutivité : les journaux de transactions peuvent être réinjectés dans l’IA pour analyse et optimisation, et les compétences de ClawdBot peuvent être continuellement améliorées grâce à l’ajout de nouvelles sources de données (telles que des données contractuelles et des rapports d’études sectorielles) et d’une logique de décision plus précise. Bien entendu, le modèle actuel reste relativement basique et ne fournit qu’un cadre et une approche pratique pour le trading quantitatif piloté par l’IA.
Si vous avez de meilleures idées d’optimisation ou de nouvelles demandes de fonctionnalités, n’hésitez pas à les partager dans la section des commentaires !
Code de référence : https://www.fmz.com/strategy/526322