[TOC]

前回の動画では、ClawdBot/OpenClawを用いた二重移動平均線戦略を作成しました。多くの視聴者からまだ満足のいく結果が得られず、コメント欄で「AIは市場の状況を分析し、独自の判断を下し、自ら注文を出すことができるのでしょうか?」という質問が寄せられました。本日は、この究極の目標に挑戦し、完全自動化されたAI取引システムを構築します。
AIに直接取引させるのはリスクが高すぎると心配する友人もいるので、私たちはより安全なアーキテクチャを設計しました。ClawdBotを脳としてデータの収集、ニュースの分析、取引シグナルの生成を担当します。発明家定量化プラットフォーム(FMZ)を両手でシグナルの受信、取引の実行、リスク管理を担います。AIの分析機能を活用し、プロフェッショナルプラットフォームのセキュリティ保証を提供し、リアルタイムの監視とレビューを可能にします。

始める前に、システム全体を分解してみましょう。システム全体は…で構成されています。脳の端そして実行終了2 つのコア コンポーネントで構成され、HTTP リクエストを介してリンクされ、完全な AI 定量取引のクローズド ループを形成します。

ClawdBotの中核となるのは取扱説明書です。これはAIのための詳細なユーザーマニュアルとも言え、操作手順、判断基準、そして実行すべきアクションを明確に定義しています。この取扱説明書の構成を見てみましょう。
まず、対象通貨のページを開いたときに読み取る必要がある主要データを AI に伝えます。
【操作指令】
1. 自动化打开浏览器新标签页
2. 导航至目标币种页面:https://www.coingecko.com/en/coins/bitcoin
3. 等待页面完全加载
【需要读取的数据】
- BTC当前价格
- 24小时交易量
【需要读取的新闻】
- 滚动页面找到 "News" 区域
- 读取最新的3-5条新闻标题和摘要
- 将所有新闻整合为一条信息汇总
- 判断整体情绪(利好/利空/中性)
次に、どのような状況で買うか、どのような状況で売るかを指定して、明確な取引基準を定義します。
【买入条件】
□ 新闻情绪整体正面(利好消息主导)
□ 交易量放大显示市场活跃
□ 综合判断市场处于上升趋势
【卖出条件】
□ 新闻情绪整体负面(利空消息主导)
□ 市场出现明显风险信号
【观望条件】
□ 新闻情绪中性或混杂
□ 市场方向不明确
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": "新闻情绪积极,交易量放大,适合建仓"
}
最後に、AI に JSON 信号を発明者のプラットフォームにプッシュし、将来のレビューのためにローカル操作を記録するように指示します。
【发送信号】
执行HTTP POST请求:
URL: https://www.fmz.com/api/v1?method=pub&robot={实盘ID}&channel={UUID}
- 实盘ID:发明者平台上对应机器人的唯一数字标识,用于精准指定接收信号的目标交易机器人。
- UUID:通用唯一识别码,作为自定义频道唯一标识,是ClawdBot与FMZ的通信密钥,请勿泄露,避免恶意操作。
【记录日志】
将每次操作的时间、币种、决策、信号发送状态等信息追加到本地 tradediary.csv 文件,便于后续策略复盘与优化。
もちろん、このガイドラインは複数のテストを通じて改良されています。テストが成功したら、スキルとしてパッケージ化し、スケジュールされたタスクとして自動的に実行されるように設定できます。


AI を活用した意思決定機能が確立されたので、発明者のプラットフォームの現在のタスクは、シグナルの受信、取引の実行、リスク管理の全プロセスを実装するためのサポート コードを開発することです。
まず、トランザクション、監視、リスク管理パラメータを一元管理するためのコア設定項目を定義します。UUIDは、ClawdBotガイドラインで指定されているものと一致している必要があります。
const CONFIG = {
TRADE_AMOUNT: 0.01, // 每次固定交易数量
CHECK_INTERVAL: 3000, // 信号监听与风控检查间隔(毫秒)
UUID: "自定义UUID", // 与ClawdBot一致的频道标识,作为通信密钥
STOP_LOSS_PERCENT: 5, // 止损/踏空保护比例(%)
};
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;
}
}
信号の核となる内容を分析する。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;
}
}
このコードは固定の損切り率を設定します。市場価格が設定された損切りラインに達すると、自動的に逆指値注文を実行します。ストップロスそして機会を逃したら損切りする取引リスクを包括的に管理するための 2 つのコアシナリオ:
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 };
}
全体の戦略の中核は無限ループであり、これは次のように実行されます…リスク管理を第一に原則としては、ストップロス チェック、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);
}
}
取引を実行するだけでは直感的に操作しきれません。そこで、4つのコアデータテーブルを含むビジュアルダッシュボードも作成しました。このダッシュボードでは、アカウント情報、リスク管理、シグナル、取引記録がすべて一箇所に表示され、システムの運用状況を明確に把握できます。
| テーブル名 | コンテンツを表示 |
|---|---|
| 💰 特典の概要 | 初期/現在の通貨量、USDT残高、口座残高、損益額、損益率 |
| 🛡️ ストップロス監視 | 最新の取引タイプ、取引価格、現在の価格変動、ストップロスラインからの距離、現在のリスク管理状況。 |
| 🤖 現在のAI信号 | ターゲット通貨、リアルタイム価格、ニュース概要、感情評価、AI による取引決定とその決定の根拠。 |
| 📋 取引記録 | 過去 10 件の取引の時間、操作の種類、取引価格、理由。 |

ClawdBot の命令が正しくデバッグされ、発明者のプラットフォーム コードがテストに合格すると、システムは完全に自動的に実行できるようになります。ClawdBot のバックエンドでは、記述された命令が 1 つのファイルにパッケージ化されます…Skill(再利用可能なAI操作テンプレート)を作成し、セットアップするスケジュールされたタスク(例えば10分ごとに実行するなど)システムは自動的にデータを収集し、分析と判断を行い、設定された頻度でシグナルを送信します。その後、発明者のプラットフォームは、手動による監視を必要とせずに、リアルタイムで取引を監視し、実行します。

定量取引には常に市場リスクが伴い、AIの判断は必ずしも正確ではないことをご理解ください。取引開始前に以下の点にご注意ください。
今日の成果を振り返ってみましょう。セットを無事に構築できましたエンドツーエンドのAI完全自動定量取引システムコアは2つの主要モジュールで構成されています。ClawdBotは頭脳として機能し、市場データの収集、ニュースセンチメント分析、取引判断の生成を担います。一方、Inventor社の定量プラットフォームは執行側として機能し、シグナル受信、自動取引、リスク管理、視覚的監視を担います。両者はHTTPインターフェースを介して標準化されたデータ交換を実現し、手動監視を必要としない完全な自動取引を実現します。
さらに重要なのは、このアーキテクチャが強力なスケーラビリティを誇っていることです。取引ログはAIにフィードバックされ、レビューと最適化を行うことができます。また、ClawdBotのスキルは継続的に反復処理され、より多くのデータソース(契約データや業界調査レポートなど)とより洗練された意思決定ロジックが追加されます。もちろん、現在のモデルはまだ比較的基本的なものであり、AI主導の定量取引のためのフレームワークと実用的なアプローチを提供しているに過ぎません。
より良い最適化のアイデアや新しい機能のリクエストがある場合は、コメント欄でお気軽に共有してください。