2
tập trung vào
319
Người theo dõi

Làm cho các chiến lược truyền thống trở nên thông minh hơn: Lối chơi thực tế với quy trình làm việc + AI

Được tạo ra trong: 2025-10-16 15:04:55, cập nhật trên: 2025-10-28 14:09:42
comments   3
hits   361

Làm cho các chiến lược truyền thống trở nên thông minh hơn: Lối chơi thực tế với quy trình làm việc + AI

Mở đầu: Quy trình làm việc có thể làm gì?

Nhiều người cho rằng quy trình làm việc chỉ có thể tự động hóa các tác vụ đơn giản, nhưng chúng mạnh mẽ hơn nhiều so với những gì họ nghĩ. Đặc biệt trên Nền tảng Định lượng Inventor, quy trình làm việc không chỉ có thể vận hành các chiến lược truyền thống mà còn cho phép AI hỗ trợ bạn theo dõi thị trường, đưa ra quyết định và điều chỉnh các thông số trong quá trình thực hiện chiến lược.

Nói một cách đơn giản:Các chiến lược truyền thống chịu trách nhiệm về công việc, trong khi AI chịu trách nhiệm về suy nghĩ

Hôm nay, chúng ta hãy sử dụng một trường hợp thực tế để thảo luận về cách kết hợp hai phương pháp này để tạo ra chiến lược thông minh hơn.


1. Trước tiên chúng ta hãy nói về những điểm khó khăn của các chiến lược truyền thống

Chúng tôi sử dụng phổ biến nhấtChiến lược giao dịch lưới hai chiềuĐể tôi cho bạn một ví dụ.

Chiến lược lưới điện hai chiều là gì?

Đây là chiến lược lưới giao dịch cả mua và bán cùng lúc:

  • Lưới đa kho: Mở các vị thế mua theo đợt khi giá giảm và đóng chúng để kiếm lời khi giá tăng trở lại
  • Lưới kho trống: Mở các vị thế bán theo đợt khi giá tăng và đóng chúng để kiếm lời khi giá giảm trở lại
  • Bất kể giá cả biến động, bạn có thể kiếm được chênh lệch thông qua biến động giá

Chiến lược này mang lại lợi nhuận ổn định trong thị trường biến động, nhưng nó có một vấn đề nghiêm trọng:Các thông số được cố định

Làm cho các chiến lược truyền thống trở nên thông minh hơn: Lối chơi thực tế với quy trình làm việc + AI

Ví dụ

Giả sử bạn đặt giá BTC bắt đầu ở mức 40.000 đô la cho lưới hai chiều, với bước nhảy là 1% và tối đa 5 cấp độ:

Lưới vị thế dài (Phạm vi giá giảm)

  • 39600 mua tầng đầu tiên
  • 39200 mua tầng thứ hai
  • 38800 mua tầng thứ ba
  • 38400 mua tầng thứ tư
  • 38000 mua bậc thứ năm (vị trí đầy đủ)

Lưới vị thế bán (phạm vi giá tăng)

  • 40400 mở số đầu tiên
  • 40800 mở bánh răng thứ hai
  • 41200 mở số ba
  • 41600 mở số thứ tư
  • 42000 mở vị thế bán khống 5 (vị thế đầy đủ)

Đây là vấn đề

Điều gì sẽ xảy ra nếu BTC đột nhiên giảm mạnh xuống mức 35.000?

  • Tất cả 5 vị thế mua đã được mở và giá tiếp tục giảm
  • Tất cả các vị thế đều bị mắc kẹt sâu và các khoản lỗ thả nổi tiếp tục mở rộng
  • Giá ban đầu là 40000 được thiết lập cố định và lưới không thể tự động điều chỉnh
  • Có thể mất một thời gian dài để giá trở lại phạm vi lưới

Hoặc ngược lại, điều gì sẽ xảy ra nếu BTC tăng vọt lên 45.000?

  • Tất cả 5 vị thế bán khống đều được mở và giá tiếp tục tăng
  • Các vị thế bán khống tiếp tục mất tiền, nhưng lưới điện không thể theo kịp
  • Các chiến lược truyền thống chỉ có thể chờ đợi và không làm gì cả.

Đây là hạn chế của các chiến lược truyền thống - họ không chủ động suy nghĩ về những thay đổi của thị trường.

Vậy, có cách nào để làm cho các chiến lược trở nên thông minh hơn không? Câu trả lời là: sử dụng quy trình làm việc để kết hợp các chiến lược truyền thống với AI. Hãy cùng xem xét cách AI có thể can thiệp vào những thời điểm quan trọng để giúp điều chỉnh chiến lược thông qua quy trình làm việc của nền tảng Inventor.


2. Kiến trúc quy trình làm việc tổng thể

Làm cho các chiến lược truyền thống trở nên thông minh hơn: Lối chơi thực tế với quy trình làm việc + AI

Biểu đồ luồng nút

┌─────────────────────┐
│  K线收盘触发器       │  ← 每60秒触发一次
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│   参数初始化节点      │  ← 首次运行或重置后:初始化网格
│                     │    (包含波动率检查)
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│  网格策略源码节点     │  ← 执行开平仓逻辑
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│   触发判断节点       │  ← 监控持仓+判断是否触发AI
│                     │    (冷却期)
└──────────┬──────────┘
           ↓
┌─────────────────────┐
│    分支判断节点      │  ← 根据触发条件分流
└────┬─────────┬──────┘
     │         │
  false       true
     │         │
     ↓         ↓
┌────────┐  ┌─────────────────────┐
│无操作  │  │ 情绪新闻获取(MCP)    │  ← Alpha Vantage API
└────────┘  └──────────┬──────────┘
                       ↓
            ┌─────────────────────┐
            │   结果整理节点       │  ← 整合新闻+持仓数据
            └──────────┬──────────┘
                       ↓
            ┌─────────────────────┐
            │  AI参数分析节点      │  ← 情感分析节点判断Yes/No
            │  (Sentiment)        │    
            └────┬─────────┬──────┘
                 │         │
               Yes        No
                 │         │
                 ↓         ↓
        ┌────────────┐  ┌────────┐
        │ 重置策略   │  │AI冷却  │  ← 记录lastAItime
        │ ·平掉所有仓│  └────────┘
        │ ·清除grid  │
        │ ·清除price │
        │ ·记录时间  │
        └────────────┘
                 │
                 ↓
        (下个周期重新初始化)

Cấu hình biến toàn cục

Trước khi bắt đầu, bạn cần cấu hình các biến sau trong quy trình làm việc n8n của mình:

$vars.contract = "BTC_USDT.swap"  // 交易对
$vars.maxPositions = 5             // 最大档位数
$vars.stepPercent = 0.01           // 网格步长(1%)
$vars.lotSize = 0.001              // 每手交易量

3. Mã chi tiết của từng nút

Nút 1: Bộ kích hoạt đóng dòng K

Tên nút: Cò đóng K-line 1
Loại nút: klineCloseTrigger

Mô tả chức năng

  • Đây là cốt lõi của toàn bộ quy trình làm việc và được kích hoạt tự động sau mỗi 60 giây.
  • Khi được kích hoạt, dữ liệu 500 dòng K mới nhất sẽ được kéo
  • Sau khi kích hoạt, quá trình sẽ tự động nhập vào nút tiếp theo

Nút 2: Khởi tạo tham số

Tên nút: Khởi tạo tham số
Loại nút: Code

Mã đầy đủ

let grid = _G('grid');
let initPrice = _G('initPrice');
let initEquity = _G('initEquity');

// ========== 从 n8n 变量读取配置参数 ==========
let maxPositions = $vars.maxPositions;      // 最大档位数
let stepPercent = $vars.stepPercent;        // 网格步长
let volatilityThreshold = 0.02; // 波动率阈值(默认2%)
let volatilityPeriod = 20; // 波动率计算周期(默认20根K线)

// ========== 波动率检查函数 ==========
function checkVolatility() {
  // 获取历史K线数据
  let records = exchange.GetRecords();
  if (!records || records.length < volatilityPeriod) {
    Log('K线数据不足,无法计算波动率');
    return { isHigh: false, value: 0 };
  }
  
  // 计算最近N根K线的价格波动率
  let prices = [];
  for (let i = records.length - volatilityPeriod; i < records.length; i++) {
    prices.push(records[i].Close);
  }
  
  // 计算平均价格
  let avgPrice = prices.reduce((a, b) => a + b, 0) / prices.length;
  
  // 计算标准差
  let squareDiffs = prices.map(price => Math.pow(price - avgPrice, 2));
  let avgSquareDiff = squareDiffs.reduce((a, b) => a + b, 0) / squareDiffs.length;
  let stdDev = Math.sqrt(avgSquareDiff);
  
  // 计算波动率 (标准差/平均价格)
  let volatility = stdDev / avgPrice;
  
  Log('当前波动率:', (volatility * 100).toFixed(2) + '%', 
      '阈值:', (volatilityThreshold * 100).toFixed(2) + '%');
  
  return {
    isHigh: volatility > volatilityThreshold,
    value: volatility
  };
}

// ========== 初始化前先检查波动率 ==========
if (!grid || Object.keys(grid).length === 0) {
  
  // 检查波动率
  let volatilityCheck = checkVolatility();
  
  if (volatilityCheck.isHigh) {
    Log('⚠️ 当前市场波动率过高:', (volatilityCheck.value * 100).toFixed(2) + '%');
    Log('等待市场平稳后再初始化网格...');
    return { 
      status: 'waiting',
      reason: 'high_volatility',
      volatility: volatilityCheck.value
    };
  }
  
  Log('✓ 波动率检查通过,开始初始化网格');
  
  // ========== 获取初始权益 ==========
  if (!initEquity) {
    let equity = exchange.GetAccount();
    if (equity) {
      initEquity = equity.Equity;
      _G('initEquity', initEquity);
      Log('使用当前市场权益作为初始权益:', initEquity);
    } else {
      Log('获取市场账户失败');
      return null;
    }
  }

  // ========== 获取初始价格 ==========
  if (!initPrice) {
    let ticker = exchange.GetTicker();
    if (ticker) {
      initPrice = ticker.Last;
      _G('initPrice', initPrice);
      Log('使用当前市场价格作为初始价格:', initPrice);
    } else {
      Log('获取市场价格失败');
      return null;
    }
  }

  // ========== 初始化网格 ==========
  grid = {
    // ========== 配置参数 ==========
    stepPercent: stepPercent,        // 网格步长
    maxPositions: maxPositions,      // 最大档位数
    
    // ========== 网格数据 ==========
    longOpenPrices: [],    // 目标多仓开仓价格数组
    longClosePrices: [],   // 目标多仓平仓价格数组
    longPositions: [],     // 多仓持仓状态数组
    shortOpenPrices: [],   // 目标空仓开仓价格数组
    shortClosePrices: [],  // 目标空仓平仓价格数组
    shortPositions: []     // 空仓持仓状态数组
  };
  
  // 初始化多仓网格(价格下跌时开多)
  for (let i = 1; i <= maxPositions; i++) {
    grid.longOpenPrices.push(initPrice * (1 - stepPercent * i));
    grid.longClosePrices.push(initPrice * (1 - stepPercent * (i - 1)));
    grid.longPositions.push({
      isOpen: false,
      openTime: null,
      openPrice: null
    });
  }
  
  // 初始化空仓网格(价格上涨时开空)
  for (let i = 1; i <= maxPositions; i++) {
    grid.shortOpenPrices.push(initPrice * (1 + stepPercent * i));
    grid.shortClosePrices.push(initPrice * (1 + stepPercent * (i - 1)));
    grid.shortPositions.push({
      isOpen: false,
      openTime: null,
      openPrice: null
    });
  }
  
  _G('grid', grid);
  Log('========== 网格初始化完成 ==========');
  Log('初始价格:', initPrice);
  Log('初始权益:', initEquity);
  Log('网格步长:', (stepPercent * 100) + '%');
  Log('最大档位:', maxPositions);
  Log('当前波动率:', (volatilityCheck.value * 100).toFixed(2) + '%');
  Log('多仓网格范围:', grid.longOpenPrices[0].toFixed(2), '-', grid.longOpenPrices[maxPositions-1].toFixed(2));
  Log('空仓网格范围:', grid.shortOpenPrices[0].toFixed(2), '-', grid.shortOpenPrices[maxPositions-1].toFixed(2));
  Log('===================================');
} 

return {};

Mô tả chức năng

  • Khởi tạo chỉ được thực hiện khi cần có chiến lược khởi động lại., chiến lược được bỏ qua trực tiếp khi nó đang chạy bình thường
  • Việc khởi tạo chiến lược cần phải ở trạng thái ổn định, do đó cần thêm kiểm tra tính biến động để tránh mở vị thế khi trạng thái biến động quá lớn, có thể gây ra thêm tổn thất.
  • Sử dụng_G()Chức năng này thực hiện tính bền vững của dữ liệu và dữ liệu không bị mất sau khi khởi động lại
  • Khởi tạo ba dữ liệu chính: vốn chủ sở hữu ban đầu, giá ban đầu và cấu trúc lưới
  • Tính toán mảng giá lưới cho cả hướng dài và hướng ngắn

Nút 3: Mã nguồn chiến lược lưới

Tên nút: Mã nguồn chiến lược lưới
Loại nút: Code

Mã đầy đủ

var lotSize = $vars.lotSize || 0.001; // 每手数量

var grid = _G('grid');
var initPrice = _G('initPrice');

// 策略未初始化,直接退出策略
if (!initPrice || !grid) {
    return {};
} 

// ========== 多仓开仓检查函数 ==========
function checkLongOpen(price) {
    for (var i = 0; i < grid.longOpenPrices.length; i++) {
        // 条件1: 价格低于或等于目标开仓价
        // 条件2: 该档位当前没有持仓
        if (price <= grid.longOpenPrices[i] && !grid.longPositions[i].isOpen) {
            Log('准备开多仓');
            
            // 设置交易方向为买入(做多)
            exchange.SetDirection('buy');
            
            // 下市价单: -1表示市价, lotSize是数量
            var orderId = exchange.Buy(-1, lotSize);
            
            if (orderId) {
                // 记录开仓信息
                grid.longPositions[i] = {
                    isOpen: true,           // 标记为已开仓
                    openTime: Date.now(),   // 记录开仓时间戳
                    openPrice: price        // 记录开仓价格
                };
                
                // 持久化保存
                _G('grid', grid);
                
                Log('✓ 开多 第', i + 1, '档', 
                    '开仓价:', price, 
                    '目标平仓价:', grid.longClosePrices[i]);
            }
        }
    }
}

// ========== 多仓平仓检查函数 ==========
function checkLongClose(price) {
    for (var i = 0; i < grid.longClosePrices.length; i++) {
        // 条件1: 该档位有持仓
        // 条件2: 价格达到或超过目标平仓价
        if (grid.longPositions[i].isOpen && price >= grid.longClosePrices[i]) {
            Log('准备平多仓');
            
            // 设置交易方向为平多
            exchange.SetDirection('closebuy');
            
            // 下市价单平仓
            var orderId = exchange.Sell(-1, lotSize);
            
            if (orderId) {
                // 计算盈利百分比
                var profit = ((price - grid.longPositions[i].openPrice) / 
                             grid.longPositions[i].openPrice * 100).toFixed(2);
                
                Log('✓ 平多 第', i + 1, '档', 
                    '开仓价:', grid.longPositions[i].openPrice, 
                    '平仓价:', price, 
                    '盈利:', profit + '%');
                
                // 清除持仓信息
                grid.longPositions[i] = {
                    isOpen: false,
                    openTime: null,
                    openPrice: null
                };
                
                // 持久化保存
                _G('grid', grid);
            }
        }
    }
}

// ========== 空仓开仓检查函数 ==========
function checkShortOpen(price) {
    for (var i = 0; i < grid.shortOpenPrices.length; i++) {
        // 条件1: 价格高于或等于目标开仓价
        // 条件2: 该档位当前没有持仓
        if (price >= grid.shortOpenPrices[i] && !grid.shortPositions[i].isOpen) {
            Log('准备开空仓');
            
            // 设置交易方向为卖出(做空)
            exchange.SetDirection('sell');
            
            // 下市价单开空
            var orderId = exchange.Sell(-1, lotSize);
            
            if (orderId) {
                // 记录开仓信息
                grid.shortPositions[i] = {
                    isOpen: true,
                    openTime: Date.now(),
                    openPrice: price
                };
                
                _G('grid', grid);
                
                Log('✓ 开空 第', i + 1, '档', 
                    '开仓价:', price, 
                    '目标平仓价:', grid.shortClosePrices[i]);
            }
        }
    }
}

// ========== 空仓平仓检查函数 ==========
function checkShortClose(price) {
    for (var i = 0; i < grid.shortClosePrices.length; i++) {
        // 条件1: 该档位有持仓
        // 条件2: 价格达到或低于目标平仓价
        if (grid.shortPositions[i].isOpen && price <= grid.shortClosePrices[i]) {
            Log('准备平空仓');
            
            // 设置交易方向为平空
            exchange.SetDirection('closesell');
            
            // 下市价单平仓
            var orderId = exchange.Buy(-1, lotSize);
            
            if (orderId) {
                // 计算盈利百分比(空单盈利 = 开仓价 - 平仓价)
                var profit = ((grid.shortPositions[i].openPrice - price) / 
                             grid.shortPositions[i].openPrice * 100).toFixed(2);
                
                Log('✓ 平空 第', i + 1, '档', 
                    '开仓价:', grid.shortPositions[i].openPrice, 
                    '平仓价:', price, 
                    '盈利:', profit + '%');
                
                // 清除持仓信息
                grid.shortPositions[i] = {
                    isOpen: false,
                    openTime: null,
                    openPrice: null
                };
                
                _G('grid', grid);
            }
        }
    }
}

// ========== 主逻辑 ==========
// 获取当前市场价格
var ticker = exchange.GetTicker();
if (!ticker) {
    Log('获取ticker失败');
    return {};
}

var price = ticker.Last;

// 依次检查多空开平
checkLongOpen(price);      // 检查是否需要开多
checkLongClose(price);     // 检查是否需要平多
checkShortOpen(price);     // 检查是否需要开空
checkShortClose(price);    // 检查是否需要平空

return {};

Mô tả chức năng

  • Bốn chức năng độc lập xử lý logic mở dài và mở ngắn tương ứng
  • Duyệt qua tất cả các vị trí lưới mỗi lần thực hiện để kiểm tra xem các điều kiện có được kích hoạt hay không
  • Sử dụng lệnh thị trường (-1) để đảm bảo giao dịch
  • Ngay lập tức duy trì các thay đổi trạng thái

Ví dụ về logic giao dịch

场景1: 价格从40000跌到39500
→ checkLongOpen检测到 price(39500) <= longOpenPrices[0](39600)
→ 开多第1档,记录开仓价39500
→ 等待价格回升到40000平仓

场景2: 价格从39500回升到40100
→ checkLongClose检测到 price(40100) >= longClosePrices[0](40000)
→ 平多第1档,盈利 (40100-39500)/39500 = 1.52%

Nút 4: Kích hoạt phán đoán

Tên nút: Phán đoán kích hoạt Loại nút: Code

Mã đầy đủ

// ========== 触发判断节点 ==========
var grid = _G('grid');
var ticker = exchange.GetTicker();
var curaccount = exchange.GetAccount();
var initPrice = _G('initPrice');
var initEquity = _G('initEquity');

if (!ticker || !grid || !initPrice || !curaccount || !initEquity) {
    return {};
}

let curProfit = curaccount.Equity - initEquity;
LogProfit(curProfit, "&");

var currentPrice = ticker.Last;
var now = Date.now();
var maxPositions = grid.maxPositions || 5;

// 统计开仓数量和总浮动盈亏
var openCount = 0;
var lastOpenPosition = null;
var totalProfit = 0;
var longCount = 0;
var shortCount = 0;

// 统计多仓
for (var i = 0; i < grid.longPositions.length; i++) {
    if (grid.longPositions[i].isOpen) {
        openCount++;
        longCount++;
        lastOpenPosition = grid.longPositions[i];
        var posProfit = ((currentPrice - grid.longPositions[i].openPrice) / grid.longPositions[i].openPrice) * 100;
        totalProfit += posProfit;
    }
}

// 统计空仓
for (var i = 0; i < grid.shortPositions.length; i++) {
    if (grid.shortPositions[i].isOpen) {
        openCount++;
        shortCount++;
        lastOpenPosition = grid.shortPositions[i];
        var posProfit = ((grid.shortPositions[i].openPrice - currentPrice) / grid.shortPositions[i].openPrice) * 100;
        totalProfit += posProfit;
    }
}

// 构建持仓表格
var table = {
    type: "table",
    title: "双向网格持仓",
    cols: ["初始价", "当前价", "网格步长", "多仓数", "空仓数", "总持仓", "初始权益", "当前权益", "累计盈亏", "浮动盈亏%"],
    rows: [[
        _N(initPrice, 2),
        _N(currentPrice, 2),
        _N(grid.stepPercent * 100, 2) + '%',
        longCount,
        shortCount,
        openCount + '/' + maxPositions,
        _N(initEquity, 2),
        _N(curaccount.Equity, 2),
        _N(curProfit, 2),
        _N(totalProfit, 2) + '%'
    ]]
};

LogStatus("`" + JSON.stringify(table) + "`");

// 不是满仓不触发AI
if (openCount < maxPositions) {
    return { aiTrigger: { shouldTrigger: false } };
}

// 检查AI冷却时间
var lastAItime = _G('lastAItime');
if (lastAItime && (now - lastAItime) < 600000) {
    Log('AI冷却中,剩余', ((600000 - (now - lastAItime)) / 60000).toFixed(1), '分钟');
    return { aiTrigger: { shouldTrigger: false } };
}

// 满仓时计算条件
var holdHours = (now - lastOpenPosition.openTime) / 3600000;
var priceDeviation = Math.abs(currentPrice / lastOpenPosition.openPrice - 1);

// 价格偏离>3% 或 持仓>24小时
var shouldTriggerAI = priceDeviation > 0.03 || holdHours >= 24;

if (shouldTriggerAI) {
    Log('触发AI分析 偏离:', (priceDeviation * 100).toFixed(2) + '% 时长:', holdHours.toFixed(1), '小时');
}

return {
    aiTrigger: {
        shouldTrigger: shouldTriggerAI
    }
};

Mô tả chức năng

  • Giám sát thời gian thực mọi trạng thái vị trí
  • Tính toán nhiều chỉ số chính: số lượng vị thế, lãi lỗ thả nổi, thời gian nắm giữ, độ lệch giá
  • Hiển thị bảng trực quan trên thanh trạng thái
  • Logic phán đoán cốt lõi:Thời gian làm mát AI đã đạt đến, AI sẽ chỉ được kích hoạt khi kho đầy + bất thường

Giải thích chi tiết về các điều kiện kích hoạt

AI冷却:
满足AI冷却时间,进行AI触发;

条件组合:
满仓(openCount >= 5) 
  AND 
  (
    价格偏离>3%  OR  持仓时长>24小时
  )

实际案例:
场景1: 开仓3个 → 不触发(未满仓)
场景2: 开仓5个,持仓12小时,偏离1.5% → 不触发(未达阈值)
场景3: 开仓5个,持仓30小时,偏离1% → 触发(持仓过久)
场景4: 开仓5个,持仓5小时,偏离5% → 触发(价格偏离大)

Nút 5: Phán đoán nhánh

Tên nút: Chi nhánh
Loại nút: Switch

Mô tả chức năng

  • Theo nút trả về trước đóaiTrigger.shouldTriggerChuyển hướng giá trị
  • Nhánh 1 (sai): Nhập nút “không hoạt động”, chu kỳ hiện tại kết thúc, tiết kiệm chi phí gọi AI
  • Nhánh 2 (đúng): Nhập nút “Thu thập tin tức cảm xúc” và bắt đầu quá trình phân tích AI

Nút này làChìa khóa để kiểm soát chi phí, đảm bảo rằng AI chỉ được gọi khi thực sự cần thiết.


Nút 6: Thu thập tin tức tình cảm

Tên nút: Sentiment News Acquisition
Loại nút: MCP Client

Mô tả chức năng

  • Gọi công cụ NEWS_SENTIMENT của Alpha Vantage
  • Nhận 50 tin tức cho cặp giao dịch được chỉ định trong 24 giờ qua
  • Bao gồm điểm tình cảm cho từng mục tin tức

Cấu hình công cụ

工具: NEWS_SENTIMENT
参数:
- tickers: CRYPTO:{{$vars.contract}}  // 从变量读取交易对
- 使用默认配置: 返回最多50条新闻,时间范围由API自动确定

Nút 7: Đối chiếu kết quả

Tên nút: Kết quả
Loại nút: Code

Mã đầy đủ

// n8n 的正确语法
const inputData = $input.all();
const sentimentData = inputData[0].json;  // 获取新闻情绪数据

// 从特定节点获取持仓数据
const positionNode = $node["触发判断"].json;

// 返回整合后的数据
return {
  timestamp: new Date().toISOString(),
  
  // 原始新闻数据
  sentimentData: sentimentData,
  
  // 持仓状态数据
  positions: positionNode
};

Mô tả chức năng

  • Tích hợp hai nguồn dữ liệu: tâm lý tin tức + trạng thái vị trí
  • Chuẩn bị dữ liệu đầu vào đầy đủ cho các nút phân tích AI
  • Thêm dấu thời gian để dễ theo dõi

Nút 8: Phân tích tham số AI

Tên nút: Phân tích tham số AI
Loại nút: Phân tích tình cảm

Làm cho các chiến lược truyền thống trở nên thông minh hơn: Lối chơi thực tế với quy trình làm việc + AI

Nội dung đầy đủ nhanh chóng

## 策略背景
你正在分析一个双向网格交易策略。该策略基于初始价格(initPrice)设置多空双向网格:
- **多仓网格**: 在价格下跌时逐级开多,回升时平仓获利(步长1%)
- **空仓网格**: 在价格上涨时逐级开空,回落时平仓获利(步长1%)
- **最大持仓**: 多空各5档,共10个仓位

## 当前触发条件
系统已检测到以下异常情况之一:
1. 持仓数量达到5个(满仓状态)
2. 最长持仓时间超过24小时(持仓被套)
3. 持有空仓时,价格突破网格上限(价格持续上涨)
4. 持有多仓时,价格跌破网格下限(价格持续下跌)

## 你的分析任务
请基于以下数据综合判断:

### 数据1: 持仓状态(positions)
{{JSON.stringify($json.positions)}}

### 数据2: 市场情绪(sentimentData)
{{JSON.stringify($json.sentimentData)}}

## 判断标准

**需要调整网格价格**的情况:
- 市场趋势明确且持续(新闻情绪极度偏多/空)
- 当前价格已远离初始网格范围(突破或跌破超过3%)
- 持仓严重被套且市场情绪不支持反转
- 新闻显示基本面发生重大变化(监管、技术升级、重大事件)

**不需要调整**的情况:
- 价格在网格范围内正常波动
- 新闻情绪中性或矛盾
- 短期波动,缺乏趋势确认
- 持仓浮亏在可接受范围内

**注意**:
- 必须返回明确的"Yes"或"No"
- 理由需简洁、具体、可操作
- 谨慎判断,避免频繁调整网格

Mô tả chức năng

  • sử dụngNút phân tích tình cảmThay thế đoạn hội thoại AI thông thường và đưa ra kết quả có cấu trúc hơn
  • Đầu ra hai loại (Có/Không) để tránh câu trả lời mơ hồ
  • Mô hình AI: Mô hình lớn (gọi qua OpenRouter)
  • Đồng thời, giải thích lý do được trả về để tạo điều kiện cho việc kiểm tra ngược và tối ưu hóa

Ví dụ về trả về AI

{
  "sentiment": "Yes",
  "sentimentScore": 0.95,
  "reason": ...
}

Nút 9: Chiến lược thiết lập lại

Tên nút: Chiến lược thiết lập lại
Loại nút: Code

Mã đầy đủ

Log('清仓仓位,重置所有参数')

let positions = exchange.GetPosition();

if (positions[0].Type === 0) {
    // 平多仓 - 市价卖出
    const orderId = exchange.CreateOrder(positions[0].Symbol, 'closebuy', -1, positions[0].Amount);
    Log(`✓ 平多仓成功,订单ID: ${orderId}`);
} else if (positions[0].Type === 1) {
    // 平空仓 - 市价买入
    const orderId = exchange.CreateOrder(positions[0].Symbol, 'closesell', -1, positions[0].Amount);
    Log(`✓ 平空仓成功,订单ID: ${orderId}`);
}

_G('grid', null);
_G('initPrice', null);
_G('lastAItime', Date.now());

return {};

Mô tả chức năng

  • Thực hiện các hoạt động đóng tương ứng theo loại vị thế (dài hạn/ngắn hạn)
  • Sử dụng lệnh thị trường để đảm bảo thực hiện ngay lập tức
  • Xóa tất cả dữ liệu lưới cố định
  • Lưới sẽ được tự động xây dựng lại theo mức giá mới trong kỳ tiếp theo

Quy trình thực hiện

当前时刻: 价格35000,多仓5档全开
↓
AI判断: Yes,建议调整
↓
执行清仓: 平掉所有多单
↓
清除数据: grid=null, initPrice=null
↓
60秒后: K线触发器再次触发
↓
重新初始化: 以35000为新的初始价格
↓
重建网格: 新的多空网格围绕35000展开

Nút 10: Làm mát AI

Tên nút: Làm mát bằng AI
Loại nút: Code

Log('AI分析不支持调整原始价格')

_G('lastAItime', Date.now())

return {};

Mô tả chức năng

  • Thực hiện khi AI phán đoán “Không”
  • Ghi lại thời gian thống kê AI
  • Kết thúc chu kỳ này

Toàn bộ quá trình được tự động hóa hoàn toàn, từ phát hiện vấn đề cho đến hoàn tất điều chỉnh, mà không cần bất kỳ sự can thiệp nào của con người.


Tại sao điều này lại hữu ích?

So với các phương pháp truyền thống

Kích thước Giám sát thủ công và điều chỉnh thông số Quy trình làm việc + AI tự động ra quyết định
Tần suất giám sát Cần phải theo dõi 24 giờ Tự động kiểm tra sau mỗi 60 giây
Tốc độ phản ứng Sự chậm trễ vào đêm muộn và sáng sớm Phản hồi trong vòng vài giây
Chất lượng quyết định Dễ dàng vận hành theo cảm xúc Phân tích khách quan, kết hợp với cảm nhận tin tức
Chi phí lao động Lao động cường độ cao Chỉ cần kiểm tra nhật ký thường xuyên

Hiệu ứng hoạt động thực tế

Kịch bản 1: Thị trường biến động (hoạt động bình thường)

8:00  - 价格39500,开多第一档
9:00  - 价格39800,平多第一档,盈利0.76%
10:00 - 价格40300,开空第一档
11:00 - 价格40100,平空第一档,盈利0.50%
...持续震荡,网格正常运行
→ AI监控指标正常,不触发分析,零额外成本

Kịch bản 2: Suy giảm đơn phương (can thiệp của AI)

周一 - 价格从40000跌到38000,多仓5档全开
周二 - 继续下跌至36000,持仓24小时触发AI
     → AI分析:市场情绪-0.65(偏空),建议调整
     → 自动平仓5个多单,止损-10%以上
     → 以36000重建网格,继续震荡获利
周三 - 新网格开始运行,当天盈利1.3%

Nếu không điều chỉnh: 5 lệnh mua sẽ tiếp tục bị kẹt và mức lỗ có thể mở rộng lên hơn -10%.

Tình huống 3: Tác động của tin tức nóng hổi

14:00 - 价格正常震荡在39800
14:30 - 突发监管利空,价格闪崩至37500
14:31 - 多仓满仓+价格偏离触发AI
      → AI抓取新闻:"SEC突击检查交易所"
      → 情绪评分骤降至-0.85  
      → 判断:短期难反转,建议调整
14:32 - 自动平仓并重置网格至37500

Các chiến lược truyền thống có thể mất vài ngày để tự tay phát hiện ra vấn đề


5. Làm thế nào để kiểm soát chi phí và tần suất?

Nhiều người lo lắng về chi phí sử dụng AI, nhưng thực tế là hoàn toàn có thể kiểm soát được:

Tình hình bình thường

  • Chiến lược này tự chạy mà không cần gọi AI
  • Phân tích chỉ được bắt đầu khi một điều kiện bất thường được kích hoạt
  • Chỉ được gọi một lần khi thị trường biến động mạnh, tốn vài xu mỗi lần

những trường hợp cực đoan

  • Nếu thị trường biến động mạnh, AI sẽ can thiệp kịp thời để đưa ra phán đoán
  • Nó hoàn toàn xứng đáng so với những mất mát đã tránh được

6. Có thể chơi những trò gì khác?

Ý tưởng này không chỉ giới hạn ở các chiến lược lưới:

1. Chiến lược trung bình động

  • Giao dịch tự động dựa trên tín hiệu trung bình động
  • AI xác định xem xu hướng chung có thay đổi hay không
  • Quyết định xem có nên điều chỉnh chu kỳ trung bình động hay không

2. Chiến lược Martingale

  • Martingale truyền thống
  • AI giám sát mức độ rủi ro
  • Quyết định có nên giảm đòn bẩy hay không

3. Chiến lược chênh lệch giá

  • Theo dõi chênh lệch tỷ giá hối đoái
  • AI phân tích lý do dẫn đến sự thay đổi chênh lệch giá
  • Điều chỉnh các thông số chênh lệch giá

4. Danh mục đầu tư đa dạng

  • Theo dõi BTC, ETH và SOL cùng lúc
  • AI phân tích mối tương quan giữa các loại tiền tệ khác nhau
  • Điều chỉnh tỷ lệ vị trí một cách linh hoạt

7. Người mới bắt đầu nên bắt đầu như thế nào?

Bước 1: Chạy chiến lược truyền thống trước

  • Chọn chiến lược lưới đơn giản hoặc trung bình động
  • Chạy trong một tuần để làm quen với logic cơ bản
  • Ghi lại các vấn đề gặp phải

Bước 2: Thêm giám sát

  • Thêm mã phán đoán kích hoạt
  • Ghi lại các chỉ số quan trọng
  • Đặt điều kiện kích hoạt (sử dụng nhật ký trước, không kết nối AI)

Bước 3: Truy cập vào quá trình ra quyết định của AI

  • Thiết lập AI Node
  • Viết lời nhắc phán đoán rõ ràng
  • Đầu tiên, hãy để AI chỉ đưa ra gợi ý, không tự động thực hiện

Bước 4: Thực hiện tự động

  • Xác minh tính chính xác của các khuyến nghị AI
  • Cho phép điều chỉnh tham số tự động
  • Tiếp tục tối ưu hóa lời nhắc và điều kiện kích hoạt

8. Một số gợi ý thực tế

1. Viết rõ ràng lời nhắc

❌ "帮我看看要不要调参数"

✅ "当前持仓5个,被套36小时,市场新闻偏空,
   我的网格中心价是40000,现价35000,
   请判断是否需要调整网格参数"

2. Hãy để AI đưa ra lý do

  • Thuận tiện cho bạn để kiểm tra lại và xác minh
  • Khám phá điểm mù của AI
  • Liên tục tối ưu hóa logic ra quyết định

3. Thiết lập ranh giới bảo mật

  • Số tiền tối đa cho một lần điều chỉnh
  • Điều chỉnh giới hạn tần số
  • Xác nhận thủ công các quyết định quan trọng

4. Ghi lại tất cả các quyết định

Lưu lại mọi quyết định của AI:

  • Khi nào nó được kích hoạt?
  • AI đã đưa ra những gợi ý gì?
  • Hiệu quả sau khi thực hiện là gì?

Tóm tắt: Giá trị thực sự của quy trình làm việc

Giá trị lớn nhất của quy trình làm việc của Nền tảng Inventor không phải là thay thế các chiến lược truyền thống, mà làLàm cho các chiến lược truyền thống trở nên thông minh hơn

  • ✅ Các chiến lược truyền thống ổn định và đáng tin cậy, nhưng thiếu tính linh hoạt
  • ✅ Quyết định của AI rất thông minh, nhưng không thể hoàn toàn tin cậy
  • ✅ Kết hợp cả hai, với cả quy tắc và khả năng thích ứng

Giống như việc giao một cố vấn thông minh cho một nhân viên cần cù nhưng cứng nhắc. Nhân viên có trách nhiệm tuân thủ quy định, còn cố vấn có trách nhiệm đưa ra lời khuyên vào những thời điểm quan trọng.

Quan trọng nhấtMọi thứ đều có thể được tự động hóa. Bạn không cần phải theo dõi thị trường 247 hay thức dậy lúc 3 giờ sáng để điều chỉnh các thông số. Chiến lược đang được vận hành và AI sẽ giúp bạn theo dõi. Bạn chỉ cần kiểm tra kết quả thường xuyên.

Đây chính là bản chất của giao dịch định lượng - con người có trách nhiệm suy nghĩ về bức tranh toàn cảnh, máy móc có trách nhiệm thực hiện các chi tiết và AI có trách nhiệm tối ưu hóa kịp thời.