2
Подписаться
319
Подписчики

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek

Создано: 2025-10-22 14:43:47, Обновлено: 2025-10-23 09:51:54
comments   4
hits   1838

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek

1. Введение: значение для сферы торговли на основе ИИ

Недавно американская лаборатория искусственного интеллекта nof1ai запустила резонансный эксперимент: шесть ведущих моделей искусственного интеллекта (Claude, DeepSeek, Gemini, GPT-5, Grok и Tongyi Qianwen) получили по 10 000 долларов каждая для участия в реальном рынке бессрочных фьючерсов на криптовалюту. Это была не имитация торговой сессии, а битва на реальные деньги. Результаты оказались неожиданными: американский ИИ DeepSeek стабильно лидировал, в то время как GPT-5 и Gemini отставали. Главная ценность этого конкурса заключается в том, что команда открыла исходный код используемых сигналов, структур данных и процессов принятия решений, предоставив отличную модель для исследований количественной торговли на основе ИИ.

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek

Основываясь на этой общедоступной архитектуре, в этой статье подробно разбираются каждый узел и логика количественного торгового процесса ИИ, чтобы помочь вам понять, как ИИ принимает торговые решения на реальном рынке.


2. Общая архитектура: трехступенчатая система «восприятие-решение-исполнение»

Эта количественная торговая система на базе ИИ использует классическую трёхэтапную архитектуру «восприятие-решение-исполнение». Весь рабочий процесс состоит из нескольких основных узлов:

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek

Описание основного узла

  1. Триггер таймера- Системный пульс, срабатывает каждые 3 минуты
  2. Сброс параметров- Мониторинг состояния счета и статистика эффективности
  3. Сбор рыночных данных- Многомерный сбор данных и расчет индикаторов
  4. Получение данных о местоположении- Отслеживание текущего статуса позиции
  5. Слияние данных- Интеграция информации о счетах и ​​рынке
  6. ИИ-агент- Основной механизм принятия решений
  7. Исполнение сделки- Анализ сигналов и обработка заказов

Давайте проанализируем логику проектирования каждого узла по отдельности.


Узел 1: Синхронизирующий триггер

Функциональное позиционирование

Триггер синхронизации запускает весь рабочий процесс, подобно биению человеческого сердца, которое заставляет систему периодически работать.

Проектные соображения

  • 3-минутный цикл: Баланс актуальности данных и ограничений вызовов API
  • Фиксированный интервал: Обеспечить стабильность и предсказуемость исполнения политики

4. Узел 2: Сброс параметров (Управление статусом учетной записи)

Функциональное позиционирование

Это ключевой узел управления состоянием, отвечающий за инициализацию, отслеживание и расчет различных основных показателей счета.

Анализ основного кода

// 设置币安模拟交易所API基础地址
api_base = "https://testnet.binancefuture.com"
exchange.SetBase(api_base)

// 初始化检查 - 首次运行时设置基准值
if (_G('invoketime') === null) {
  _G('invoketime', 0);
  _G('STARTTIME', Date.now());
  const initAccount = exchange.GetAccount();
  _G('initmoney', initAccount.Equity);
}

// 累计调用次数
const invoketime = _G('invoketime') + 1;
_G('invoketime', invoketime);

// 计算运行时长(分钟)
const duringtime = Math.floor((Date.now() - _G('STARTTIME')) / 60000);

// 获取当前账户信息
const currentAccount = exchange.GetAccount();
const currentAccountValue = currentAccount.Equity;

// 计算总收益率
const initMoney = _G('initmoney');
const totalReturnPercent = ((currentAccountValue - initMoney) / initMoney * 100).toFixed(2);

// 记录收益到系统日志
LogProfit(currentAccountValue - initMoney, "&")

// 返回5个核心指标
return [{
  json: {
    invoketime: invoketime,
    duringtime: duringtime,
    totalReturnPercent: totalReturnPercent + '%',
    availableCash: currentAccount.Balance.toFixed(2),
    currentAccountValue: currentAccountValue.toFixed(2)
  }
}];

Структура выходных данных

{
  "invoketime": 42,              // 系统调用次数
  "duringtime": 126,             // 运行时长(分钟)
  "totalReturnPercent": "3.45%", // 总收益率
  "availableCash": "10345.67",   // 可用资金
  "currentAccountValue": "10345.00" // 账户总价值
}

Основные моменты дизайна

  1. Постоянное управление состояниемИспользование:_G()Функции реализуют сохранение данных между циклами
  2. Базовая привязка: Запишите первоначальные средстваinitmoneyВ качестве основы для расчета прибыли
  3. Визуализация производительностиПринято:LogProfit()Функция возвращает доход в системный график в режиме реального времени.
  4. Защитное программирование: Автоматическая инициализация для первого запуска, чтобы избежать ошибок нулевого значения

5. Узел 3: Сбор рыночных данных

Функциональное позиционирование

Это «глаз» всей системы, отвечающий за сбор, обработку и расчет различных рыночных данных и технических индикаторов.

Архитектура базовой логики

Функции узлов сбора рыночных данных можно разделить на три уровня:

Уровень 1: Анализ списка валют и циклический сбор

// 解析币种列表
const coins = $vars.coinList ? 
  ($vars.coinList.includes(',') ? $vars.coinList.split(',') : [$vars.coinList]) : [];

if (coins.length === 0) {
  return {};
}

// 为每个币种获取市场数据
const allCoinsData = {};
for (let i = 0; i < coins.length; i++) {
  const coin = coins[i].trim();
  try {
    allCoinsData[coin] = getMarketDataForCoin(coin);
  } catch (e) {
    allCoinsData[coin] = { error: e.toString() };
  }
}

return { data: allCoinsData };

Уровень 2: Сбор данных многопериодной K-линии и расчет индикатора

function getMarketDataForCoin(symbol) {
  // 切换到对应币种的永续合约
  exchange.SetCurrency(symbol + "_USDT");
  exchange.SetContractType("swap");
  
  // 获取3分钟和4小时K线数据
  const kline3m = exchange.GetRecords(60 * 3);      // 3分钟周期
  const kline4h = exchange.GetRecords(60 * 60 * 4); // 4小时周期
  
  // 数据有效性检查
  if (!kline3m || kline3m.length < 50 || !kline4h || kline4h.length < 50) {
    return { error: "K线数据不足" };
  }
  
  // 计算3分钟周期技术指标
  const ema20_3m = TA.EMA(kline3m, 20);      // 20周期指数移动平均
  const macd_3m = TA.MACD(kline3m, 12, 26, 9); // MACD指标
  const rsi7_3m = TA.RSI(kline3m, 7);        // 7周期RSI
  const rsi14_3m = TA.RSI(kline3m, 14);      // 14周期RSI
  
  // 计算4小时周期技术指标
  const ema20_4h = TA.EMA(kline4h, 20);      // 20周期EMA
  const ema50_4h = TA.EMA(kline4h, 50);      // 50周期EMA
  const macd_4h = TA.MACD(kline4h, 12, 26, 9); // MACD指标
  const rsi14_4h = TA.RSI(kline4h, 14);      // 14周期RSI
  const atr3_4h = TA.ATR(kline4h, 3);        // 3周期ATR(波动率)
  const atr14_4h = TA.ATR(kline4h, 14);      // 14周期ATR
  
  // 获取最新K线和最近10根K线
  const latest3m = kline3m[kline3m.length - 1];
  const latest4h = kline4h[kline4h.length - 1];
  const recent10_3m = kline3m.slice(-10);
  const recent10_4h = kline4h.slice(-10);
  
  // 计算平均成交量
  const volumes4h = recent10_4h.map(k => k.Volume);
  const avgVolume4h = volumes4h.reduce((a, b) => a + b, 0) / volumes4h.length;
  
  // 返回结构化数据...
}

Стратегия двойного таймфрейма

  • 3-минутный короткий цикл: фиксация краткосрочных колебаний для точного определения времени входа и выхода
  • 4-часовой длинный цикл: Определите направление общего тренда и избегайте торговли против тренда

Такой многовременной анализ является стандартной функцией профессиональной количественной торговли, что эквивалентно предоставлению ИИ возможности одновременного наблюдения через «микроскоп» и «телескоп».

Уровень 3: Структурированный вывод данных

return {
  symbol: symbol,
  current_price: latest3m.Close,
  current_ema20: ema20_3m[ema20_3m.length - 1],
  current_macd: macd_3m[2][macd_3m[2].length - 1],
  current_rsi_7: rsi7_3m[rsi7_3m.length - 1],
  funding_rate: fundingRate,
  intraday_3min: {
    mid_prices: recent10_3m.map(k => k.Close),
    ema_20_series: recent10_3m.map((k, i) => ema20_3m[ema20_3m.length - 10 + i]),
    macd_series: recent10_3m.map((k, i) => macd_3m[2][macd_3m[2].length - 10 + i]),
    rsi_7_series: recent10_3m.map((k, i) => rsi7_3m[rsi7_3m.length - 10 + i]),
    rsi_14_series: recent10_3m.map((k, i) => rsi14_3m[rsi14_3m.length - 10 + i])
  },
  longer_term_4hour: {
    ema_20: ema20_4h[ema20_4h.length - 1],
    ema_50: ema50_4h[ema50_4h.length - 1],
    atr_3: atr3_4h[atr3_4h.length - 1],
    atr_14: atr14_4h[atr14_4h.length - 1],
    current_volume: latest4h.Volume,
    average_volume: avgVolume4h,
    macd_series: recent10_4h.map((k, i) => macd_4h[2][macd_4h[2].length - 10 + i]),
    rsi_14_series: recent10_4h.map((k, i) => rsi14_4h[rsi14_4h.length - 10 + i])
  }
};

Описание технического индикатора

1. EMA (экспоненциальная скользящая средняя)

  • Функция: определение направления тренда и уровня поддержки/сопротивления.
  • Цена выше EMA20 → краткосрочный бычий тренд
  • EMA20 пересекает EMA50 выше → Золотой крест, сигнал на покупку

2. MACD (схождение-расхождение скользящих средних)

  • Функция: определение моментов разворота импульса и тренда.
  • Гистограмма MACD меняет направление с отрицательного на положительное → импульс усиливается
  • Линия DIF пересекает линию DEA → сигнал «Золотой крест»

3. RSI (индекс относительной силы)

  • Функция: оценить перекупленность и перепроданность
  • RSI > 70 → Перекупленность, возможен откат
  • RSI < 30 → Перепроданность, возможен отскок

4. ATR (средний истинный диапазон)

  • Функция: измерение волатильности рынка и корректировка расстояния стоп-лосса.

6. Узел 4: Сбор данных о местоположении

Функциональное позиционирование

Узел сбора данных о позиции отвечает за отслеживание текущего статуса позиции каждой валюты и предоставление полной информации о позиции ИИ.

Основной код (критическая часть)

function getAllPositions() {
  // 获取当前账户权益
  const curequity = exchange.GetAccount().Equity;
  
  // 获取币种列表
  const coins = $vars.coinList ? 
    ($vars.coinList.includes(',') ? $vars.coinList.split(',') : [$vars.coinList]) : [];
  
  // 计算每个币种的风险金额 = 账户权益 / 币种数量
  const risk_usd = coins.length > 0 ? curequity / coins.length : 0;
  
  // 获取所有实际持仓
  const rawPositions = exchange.GetPositions();
  
  // 创建持仓映射表 (币种符号 -> 持仓对象)
  const positionMap = {};
  
  if (rawPositions && rawPositions.length > 0) {
    for (let pos of rawPositions) {
      if (pos.Amount && Math.abs(pos.Amount) > 0) {
        // 提取币种符号 (如 BTC_USDT.swap -> BTC)
        const coinSymbol = pos.Symbol.replace('_USDT.swap', '')
                                     .replace('.swap', '')
                                     .replace('_USDT', '');
        positionMap[coinSymbol] = pos;
      }
    }
  }
  
  // 为每个币种创建position信息
  const allPositions = [];
  
  for (let i = 0; i < coins.length; i++) {
    const coin = coins[i].trim();
    const pos = positionMap[coin];
    
    if (pos) {
      // 有持仓的情况 - 构建完整持仓信息
      // 获取止盈止损订单ID
      const { tpOrderId, slOrderId } = getTPSLOrderIds(pos.Symbol, currentPrice, pos.Type);
      
      // 获取退出计划
      const exitPlan = _G(`exit_plan_${pos.Symbol}`) || {
        profit_target: null,
        stop_loss: null,
        invalidation_condition: ""
      };
      
      allPositions.push({
        symbol: coin,
        quantity: Math.abs(pos.Amount),        // 持仓数量
        entry_price: pos.Price,                // 入场价格
        current_price: currentPrice,           // 当前价格
        liquidation_price: /* 强平价格计算 */,
        unrealized_pnl: _N(pos.Profit, 2),    // 未实现盈亏
        leverage: pos.MarginLevel || 1,        // 杠杆倍数
        exit_plan: exitPlan,                   // 退出计划
        confidence: exitPlan?.confidence || null,
        risk_usd: risk_usd,                    // 风险金额
        sl_oid: slOrderId,                     // 止损订单ID
        tp_oid: tpOrderId,                     // 止盈订单ID
        wait_for_fill: false,
        entry_oid: pos.Info?.posId || -1,
        notional_usd: _N(Math.abs(pos.Amount) * currentPrice, 2)
      });
    } else {
      // 没有持仓的情况 - 所有字段设为null
      allPositions.push({
        symbol: coin,
        quantity: null,            // 关键字段:null表示无持仓
        entry_price: null,
        current_price: null,
        liquidation_price: null,
        unrealized_pnl: null,
        leverage: null,
        exit_plan: null,
        confidence: null,
        risk_usd: risk_usd,        // 仍然返回risk_usd用于开仓计算
        sl_oid: null,
        tp_oid: null,
        wait_for_fill: false,
        entry_oid: null,
        notional_usd: null
      });
    }
  }
  
  return allPositions;
}

const positions = getAllPositions();
return {positions};

Дизайн ключа

Ключевая роль количественного поля

  • quantity = null: Нет позиций, ИИ может рассмотреть возможность открытия позиций
  • quantity ≠ null: Если есть позиция, ИИ может только удерживать или закрывать позицию, но не может увеличивать позицию.

Такая конструкция позволяет избежать риска «пирамидизации» и обеспечивает наличие только одной активной позиции для каждой валюты.


7. Узел 5: Объединение данных

Функциональное позиционирование

Объедините данные о рынке и позициях в полный контекст, необходимый для принятия решений с помощью ИИ.

Реализация исходного кода

// 获取输入数据
const inputData = $input.all();

// 第一个输入是市场数据,第二个是持仓数据
const marketData = inputData[0].json.data;
const positions = inputData[1].json;

// 返回整理后的数据
return [{
  json: {
    marketData: marketData,
    positions: positions
  }
}];

Простая и эффективная интеграция данных обеспечивает единый интерфейс данных для ИИ.


Узел 6: Агент ИИ (основной механизм принятия решений)

Функциональное позиционирование

Это ядро ​​всей системы — механизм принятия решений на основе искусственного интеллекта. Он получает полную информацию о рынке и состоянии счёта и выдаёт конкретные торговые инструкции.

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek

Описание структуры слова

Принятие решений ИИ-агентом опирается на два типа подсказок:

1. Системное сообщение

  • источник:Сайт NOF1 не опубликовал, основываясь на результатах обратного вычета
  • эффект: определяет роль, правила поведения и структуру принятия решений ИИ, что эквивалентно «руководству по эксплуатации» ИИ.
  • Особенности: Фиксированный и одинаковый для каждого вызова
  • Расположение: Передается как системное сообщение при вызове модели ИИ.

2. Текстовая подсказка

  • источник:Сайт NOF1 объявил о приобретении
  • эффект:Предоставление динамических рыночных данных и состояния счета, что эквивалентно «вводу информации в реальном времени» с помощью ИИ
  • Особенности:Каждый звонок отличается и содержит последние рыночные данные и информацию о позициях.
  • Расположение: передается как пользовательское сообщение при вызове модели ИИ

Такая архитектура с двойными подсказками «фиксированные правила + динамические данные» позволяет ИИ иметь стабильную структуру принятия решений и давать гибкие ответы на основе рыночных условий в режиме реального времени.

Подробное объяснение системных подсказок

Системные подсказки определяют правила поведения ИИ и структуру принятия решений, которые можно разделить на четыре основные части:

Часть 1: Жесткие ограничения

## HARD CONSTRAINTS

### Position Limits
- Tradable coins: {{$vars.coinList}}
- Maximum {{$vars.coinList.split(',').length}} concurrent positions
- No pyramiding or adding to existing positions
- Must be flat before re-entering a coin

### Risk Management
- Maximum risk per trade: 5% of account value
- Leverage range: 5x to 40x
- Minimum risk-reward ratio: 2:1
- Every position must have:
  - Stop loss (specific price level)
  - Profit target (specific price level)  
  - Invalidation condition (format: "If price closes below/above [PRICE] on a [TIMEFRAME] candle")

Философия дизайна

  • Ограничения по местоположению:Каждая валюта занимает одностороннюю позицию, что вынуждает диверсифицировать риски.
  • Нет добавления позиций: Избегайте ловушки «усреднения затрат»
  • Предел риска: Рискуйте до 5% от стоимости вашего счета в одной сделке
  • Риск-возвращение: Как минимум 2:1, что означает, что целевая прибыль как минимум в два раза превышает расстояние стоп-лосса

Часть 2: Структура принятия решений

## DECISION FRAMEWORK

### Identifying Position Status
A coin has an **active position** if `quantity` is NOT null.
A coin has **no position** if `quantity` is null.

### For Coins WITH Active Positions
Check each position in this order:
1. Invalidation condition triggered? → Close immediately
2. Stop loss or profit target hit? → Close
3. Technical setup still valid? → Hold
4. If uncertain → Hold (trust your exit plan)

Available signals: "hold" or "close" ONLY

### For Coins WITHOUT Positions
Only consider if:
- Current active positions < 6
- Available cash > $1000  
- You see a high-probability setup

Available signal: "entry" ONLY

Логическая ясность

  • Строго различайте «удерживание позиций» и «отсутствие позиций».
  • Когда у вас открыта позиция, вы можете выбрать только «Удерживать» или «Закрыть».
  • Если у вас нет позиций, вы можете выбрать только «Открыть» или «Пропустить».
  • Такая конструкция не позволяет ИИ генерировать логически противоречивые инструкции.

Часть 3: Характеристики выходного формата

{
  "BTC": {
    "trade_signal_args": {
      "coin": "BTC",
      "signal": "entry|hold|close",
      "profit_target": 115000.0,
      "stop_loss": 112000.0,
      "invalidation_condition": "If price closes below 112500 on a 3-minute candle",
      "leverage": 15,
      "confidence": 0.75,
      "risk_usd": 624.38,
      "justification": "Reason for this decision"
    }
  }
}

Описание поля

  • signal:Торговый сигнал (вход/удержание/закрытие)
  • profit_target:Цена тейк-профита
  • stop_loss: Цена стоп-лосса
  • invalidation_condition:Условие отказа (описание на естественном языке)
  • leverage:Коэффициент кредитного плеча (5-40)
  • confidence: уверенность ИИ в этом сигнале (0-1)
  • risk_usd: Степень риска, на которую вы готовы пойти
  • justification: Обоснование решения (для аудита и отладки)

Часть 4: Руководство мыслительным процессом

## THINKING PROCESS

Before outputting JSON, think through your decisions step by step:

1. Identify position status for each coin
2. Review coins WITH active positions
3. Review coins WITHOUT positions  
4. Output final decisions in JSON

Эта «цепочка мыслей» побуждает ИИ сначала анализировать, а затем выдавать результаты, что повышает стабильность и объяснимость принятия решений.

Подробное объяснение слов-подсказок для пользователя (динамический ввод данных)

Источник:Слова подсказок пользователю используют синтаксис шаблона для динамического ввода данных в реальном времени.

Пользовательские подсказки динамически генерируются каждый раз при вызове на основе последних рыночных условий и информации о счете:

It has been {{ duringtime }} minutes since you started trading.
The current time is {{ $now.toISO() }} 
You've been invoked {{ invoketime }} times.

ALL OF THE PRICE OR SIGNAL DATA BELOW IS ORDERED: OLDEST - NEWEST

Timeframes note: Unless stated otherwise in a section title, intraday series 
are provided at 3 minute intervals. If a coin uses a different interval, it is 
explicitly stated in that coin's section.

**CURRENT MARKET STATE FOR ALL COINS**
{{ JSON.stringify(marketData) }}

**HERE IS YOUR ACCOUNT INFORMATION & PERFORMANCE**
Current Total Return (percent): {{ totalReturnPercent }}
Available Cash: {{ availableCash }}
Current Account Value: {{ currentAccountValue }}

Current live positions & performance:
{{ JSON.stringify(positions) }}

Подробное объяснение потока данных подсказки

Такая конструкция позволяет ИИ каждый раз получать полный контекст решения:

  1. Восприятие времени

    • Как долго он уже работает?duringtimeминута)
    • Текущая метка времени ($now.toISO()
    • Количество звонков (invoketime(второго сорта)
  2. Рыночные данные(из узла «Сбор рыночных данных»)

    • 3-минутные и 4-часовые данные K-линии для каждой валюты
    • Последовательность технических индикаторов последних 10 тыс. строк
    • Текущая цена, EMA, MACD, RSI и другие индикаторы в режиме реального времени
  3. Статус счета(из узла сброса параметров)

    • Общий доход (totalReturnPercent
    • Доступные средства (availableCash
    • Общая стоимость счета (currentAccountValue
  4. Подробности позиции(Из узла «Получение данных о местоположении»)

    • Количество позиций в каждой валюте (поле количества)
    • Цена входа, текущая цена, нереализованная прибыль и убыток
    • Планы стоп-профита и стоп-лосса, размер риска

Полный рабочий процесс с подсказками

┌─────────────────────────────────────────────────────────────┐
│                    AI模型调用时刻                            │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  系统提示词(固定)                             │
│  ┌────────────────────────────────────────────┐             │
│  │ You are an expert cryptocurrency trader... │             │
│  │ ## HARD CONSTRAINTS                        │             │
│  │ - Maximum 6 positions                      │             │
│  │ - Risk per trade: 5% max                   │             │
│  │ ## DECISION FRAMEWORK                      │             │
│  │ - For coins WITH positions: hold/close     │             │
│  │ - For coins WITHOUT positions: entry       │             │
│  │ ## OUTPUT FORMAT                           │             │
│  │ - JSON with trade_signal_args              │             │
│  └────────────────────────────────────────────┘             │
│                       ↓                                      │
│  用户提示词(动态,每次不同)                                 │
│  ┌────────────────────────────────────────────┐             │
│  │ Running for 126 minutes, invoked 42 times  │             │
│  │ Current Total Return: 3.45%                │             │
│  │ Available Cash: $10,345.67                 │             │
│  │                                            │             │
│  │ Market Data:                               │             │
│  │ {                                          │             │
│  │   "BTC": {                                 │             │
│  │     "current_price": 67234.5,              │             │
│  │     "current_ema20": 67150.2,              │             │
│  │     "current_macd": -141.87,               │             │
│  │     "current_rsi_7": 52.93,                │             │
│  │     "intraday_3min": {...},                │             │
│  │     "longer_term_4hour": {...}             │             │
│  │   },                                       │             │
│  │   "ETH": {...}, ...                        │             │
│  │ }                                          │             │
│  │                                            │             │
│  │ Positions:                                 │             │
│  │ [                                          │             │
│  │   {                                        │             │
│  │     "symbol": "BTC",                       │             │
│  │     "quantity": 0.5,                       │             │
│  │     "entry_price": 66800.0,                │             │
│  │     "unrealized_pnl": 217.25,              │             │
│  │     "exit_plan": {                         │             │
│  │       "stop_loss": 66000.0,                │             │
│  │       "profit_target": 68500.0             │             │
│  │     }                                      │             │
│  │   },                                       │             │
│  │   {                                        │             │
│  │     "symbol": "ETH",                       │             │
│  │     "quantity": null,  // 无持仓          │             │
│  │     ...                                    │             │
│  │   }                                        │             │
│  │ ]                                          │             │
│  └────────────────────────────────────────────┘             │
│                       ↓                                      │
│              AI模型处理和推理                                 │
│                       ↓                                      │
│  AI输出(JSON格式)                                           │
│  ┌────────────────────────────────────────────┐             │
│  │ {                                          │             │
│  │   "BTC": {                                 │             │
│  │     "trade_signal_args": {                 │             │
│  │       "signal": "hold",                    │             │
│  │       "justification": "Position valid..." │             │
│  │     }                                      │             │
│  │   },                                       │             │
│  │   "ETH": {                                 │             │
│  │     "trade_signal_args": {                 │             │
│  │       "signal": "entry",                   │             │
│  │       "profit_target": 2800.0,             │             │
│  │       "stop_loss": 2600.0,                 │             │
│  │       "leverage": 15,                      │             │
│  │       "risk_usd": 833.33,                  │             │
│  │       "justification": "Bullish setup..."  │             │
│  │     }                                      │             │
│  │   }                                        │             │
│  │ }                                          │             │
│  └────────────────────────────────────────────┘             │
│                                                              │
└─────────────────────────────────────────────────────────────┘
                         ↓
              传递给"交易执行"节点

Преимущества этой архитектуры с двумя репликами:

  1. Стабильность правила:Системные подсказки фиксированы, чтобы гарантировать постоянную согласованность правил поведения ИИ.
  2. Своевременность данных:Слова подсказок пользователю динамически обновляются, чтобы гарантировать, что ИИ принимает решения на основе последних данных рынка.
  3. Разделение интересов: Разделение определения правил и ввода данных для легкой отладки и оптимизации
  4. Масштабируемость: Вы можете изменить стратегию оптимизации системных подсказок в любое время, не влияя на поток данных.
  5. Аудиторская возможность: Полный ввод и вывод каждого вызова ИИ может быть записан и отслежен

9. Узел 7: Выполнение транзакции

Функциональное позиционирование

Это «рука» рабочего процесса, отвечающая за преобразование решений ИИ в фактические биржевые приказы и постоянный мониторинг условий тейк-профита и стоп-лосса.

Основная логика выполнения

Узел выполнения транзакций разделен на пять функциональных модулей:

Модуль 1: Анализ и проверка сигналов

// ========== 工具函数 ==========

function parseAIOutput(output) {
  try {
    // 清理输出中的代码块标记
    const cleaned = output.replace(/```[a-z]*\n?/gi, '').trim();
    const start = cleaned.indexOf('{');
    const end = cleaned.lastIndexOf('}');
    return JSON.parse(cleaned.substring(start, end + 1));
  } catch (e) {
    return {};
  }
}

// 主逻辑
const signals = parseAIOutput($input.first().json.output);
Log(signals)

Обработка исключений

  • Обнаружение ошибок парсинга JSON
  • Очистите форматирование markdown в выводе ИИ
  • Предотвратить сбой всей системы из-за проблем с форматом выходных данных ИИ

Модуль 2: Точное управление и расчет местоположения

// 获取交易对精度信息
function getPrecision(coin) {
  try {
    const symbol = coin + '_USDT.swap';
    const markets = exchange.GetMarkets();
    
    if (markets && markets[symbol]) {
      return {
        price: markets[symbol].PricePrecision || 0,
        amount: markets[symbol].AmountPrecision || 0,
        minQty: markets[symbol].MinQty || 5
      };
    }
    
    return { price: 0, amount: 0, minQty: 5 };
  } catch (e) {
    Log(`⚠️ 获取${coin}精度失败,使用默认值`);
    return { price: 0, amount: 0, minQty: 5 };
  }
}

// 计算仓位大小
function calculateQuantity(entryPrice, stopLoss, riskUsd, leverage, precision) {
  const riskPerContract = Math.abs(entryPrice - stopLoss);
  if (riskPerContract <= 0) return 0;
  
  // 基于风险金额计算数量
  const quantity = riskUsd / riskPerContract;
  
  // 限制最大仓位 = (账户余额 × 杠杆 / 6) / 入场价格
  const maxQuantity = (exchange.GetAccount().Balance * leverage / 6) / entryPrice;
  
  let finalQuantity = Math.min(quantity, maxQuantity);
  
  // 应用精度和最小数量限制
  if (precision) {
    finalQuantity = _N(finalQuantity, precision.amount);
    
    if (finalQuantity < precision.minQty) {
      Log(`⚠️ 计算数量 ${finalQuantity} 小于最小下单量 ${precision.minQty}`);
      return 0;
    }
  }
  
  return finalQuantity;
}

Формула расчета позиции

风险距离 = |入场价格 - 止损价格|
仓位大小 = 风险金额 ÷ 风险距离
最大仓位 = (账户余额 × 杠杆 ÷ 6) ÷ 入场价格
最终仓位 = min(仓位大小, 最大仓位)

Этот расчет гарантирует, что:

  • Сумма риска остается постоянной независимо от цены
  • При срабатывании стоп-лосса убыток равен точно установленной сумме риска.
  • Никакое чрезмерное кредитное плечо не приведет к чрезмерным позициям

Модуль 3: Открытие и исполнение позиции

function executeEntry(coin, args) {
  exchange.SetCurrency(coin + '_USDT');
  exchange.SetContractType("swap");
  
  const ticker = exchange.GetTicker();
  if (!ticker) return;
  
  const currentPrice = ticker.Last;
  if (!validateEntry(coin, currentPrice, args.profit_target, args.stop_loss)) return;
  
  const leverage = args.leverage || 10;
  exchange.SetMarginLevel(leverage);
  
  precision = getPrecision(coin);
  quantity = calculateQuantity(currentPrice, args.stop_loss, args.risk_usd, leverage, precision);
  
  if (quantity <= 0) {
    Log(`⚠️ ${coin}:计算数量无效,跳过开仓`);
    return;
  }
  
  const isLong = args.profit_target > args.stop_loss;
  exchange.SetDirection(isLong ? "buy" : "sell");
  
  const orderId = isLong ? exchange.Buy(-1, quantity) : exchange.Sell(-1, quantity);
  
  if (orderId) {
    Sleep(1000);
    Log(`✅ ${coin}:开${isLong ? '多' : '空'} 数量=${quantity} 杠杆=${leverage}x 精度=${precision.amount}`);
  } else {
    Log(`❌ ${coin}:开仓失败`, precision.amount);
  }
}

Модуль 4: Заключительное исполнение

function executeClose(coin) {
  exchange.SetCurrency(coin + '_USDT');
  exchange.SetContractType("swap");
  
  // 取消所有挂单
  const orders = exchange.GetOrders();
  orders?.forEach(o => exchange.CancelOrder(o.Id));
  
  // 获取持仓信息
  const pos = exchange.GetPositions().find(p => 
    p.Symbol.includes(coin) && Math.abs(p.Amount) > 0
  );
  if (!pos) return;
  
  const isLong = pos.Type === PD_LONG || pos.Type === 0;
  const precision = getPrecision(coin);

  // 对平仓数量应用精度
  const closeAmount = _N(Math.abs(pos.Amount), precision.amount);
  
  exchange.SetDirection(isLong ? "closebuy" : "closesell");
  
  const orderId = isLong ? 
    exchange.Sell(-1, closeAmount) : 
    exchange.Buy(-1, closeAmount);
  
  if (orderId) {
    Log(`✅ ${coin}:平${isLong ? '多' : '空'}成功,数量=${closeAmount}`);
    _G(`exit_plan_${coin}_USDT.swap`, null);
  }
}

Модуль 5: Мониторинг стоп-профита и стоп-лосса

function monitorPosition(coin) {
  exchange.SetCurrency(coin + '_USDT');
  exchange.SetContractType("swap");
  
  const pos = exchange.GetPositions().find(p => 
    p.Symbol.includes(coin) && Math.abs(p.Amount) > 0
  );
  if (!pos) return;
  
  const ticker = exchange.GetTicker();
  if (!ticker) return;
  
  const isLong = pos.Type === PD_LONG || pos.Type === 0;
  const currentPrice = ticker.Last;
  
  // 计算盈亏比例
  const pnl = (currentPrice - pos.Price) * (isLong ? 1 : -1) / pos.Price;
  
  // 获取退出计划
  const exitPlan = _G(`exit_plan_${coin}_USDT.swap`);
  if (!exitPlan?.profit_target || !exitPlan?.stop_loss) {
    // 如果没有设置退出计划,使用默认值
    if (pnl >= 0.03) return closePosition(coin, pos, isLong, "止盈", pnl);
    if (pnl <= -0.01) return closePosition(coin, pos, isLong, "止损", pnl);
    return;
  }
  
  // 检查止盈条件
  const shouldTP = isLong ? 
    currentPrice >= exitPlan.profit_target : 
    currentPrice <= exitPlan.profit_target;
    
  // 检查止损条件
  const shouldSL = isLong ? 
    currentPrice <= exitPlan.stop_loss : 
    currentPrice >= exitPlan.stop_loss;
  
  if (shouldTP) return closePosition(coin, pos, isLong, "止盈", pnl);
  if (shouldSL) return closePosition(coin, pos, isLong, "止损", pnl);
}

function closePosition(coin, pos, isLong, reason, pnl) {
  const precision = getPrecision(coin);
  const closeAmount = _N(Math.abs(pos.Amount), precision.amount);
  
  exchange.SetDirection(isLong ? "closebuy" : "closesell");
  isLong ? exchange.Sell(-1, closeAmount) : exchange.Buy(-1, closeAmount);
  
  Log(`${reason === '止盈' ? '✅' : '❌'} ${coin} ${reason} ${(pnl*100).toFixed(2)}%`);
  _G(`exit_plan_${coin}_USDT.swap`, null);
}

Модуль 6: Визуальный дизайн

Для облегчения понимания логики торговых операций ИИ визуализируется анализ торговых сигналов ИИ и состояние позиций.

AlphaArena Big Model Battle: практическое воспроизведение ведущей количественной торговой системы на основе искусственного интеллекта DeepSeek


10. Ключевые моменты дизайна

1. Сила анализа нескольких таймфреймов

Система использует как 3-минутные, так и 4-часовые циклы. Это не просто избыточность данных:

Сценарий случая

  • На 4-часовом графике видно, что BTC находится в восходящем тренде (цена выше EMA20)
  • На 3-минутном графике происходит откат (краткосрочное падение цены)
  • принятие решений:Это «откат тренда», возможность увеличить позиции, а не сигнал к риску.

Двойная координация цикла

  • Определение направления на 4 часа (длинное или короткое)
  • Найдите точку входа за 3 минуты (когда входить в рынок)

2. Три линии защиты в управлении рисками

Первое: распределение финансирования

单笔最大风险 = 账户价值 ÷ 币种数量
最多6个持仓 = 理论最大总风险30%
实际最大风险 < 30%(不会同时触发6个止损)

Второй шаг: установка стоп-лосса

止损距离 = |入场价 - 止损价| / 入场价
典型设置:2-5%
结合杠杆:10x杠杆下,5%价格波动 = 50%本金波动

Третье: Состояние отказа

示例:"如果价格在3分钟K线上收盘低于$66500"
作用:即使止损没触发,技术形态破坏也要离场

3. Форматы выходных данных для проектирования ИИ

Зачем нужен формат JSON?

  • Структурированные данные легко анализировать
  • Избегание двусмысленности в естественном языке
  • Облегчает автоматизированную проверку и обработку

Зачем обеспечивать единообразие полей?

  • Убедитесь, что все сигналы имеют одинаковую структуру поля.
  • Упростить логику анализа кода
  • Избегайте ошибок, вызванных пропущенными полями

11. Ограничения системы и направления улучшения

Текущие ограничения

  1. Неспособность справиться с чрезвычайными ситуациями

    • ИИ учитывает только технические индикаторы и не учитывает новости или политику.
    • Невозможность справиться с событиями «черного лебедя» (такими как взлом биржи)
  2. Ограничения фиксированных циклов

    • 3-минутный триггер может пропустить быстрые колебания
    • Может также привести к переторговке на спокойных рынках.
  3. Риск использования

    • Кредитное плечо 5-40x может привести к быстрой ликвидации в экстремальных рыночных условиях
    • Даже при наличии стоп-лосса проскальзывание может привести к неожиданным потерям.
  4. Устойчивость моделей ИИ

    • Выход больших моделей является случайным
    • Один и тот же вклад может привести к разным решениям

Возможные направления улучшения

  1. Представляем анализ настроений в новостях

    • Интеграция новостных лент криптовалют
    • Анализ настроений рынка с использованием НЛП
  2. Динамическая регулировка частоты срабатывания

    • Увеличьте частоту проверок в период высокой волатильности
    • Уменьшите частоту при низких колебаниях, чтобы сэкономить ресурсы.
  3. Многомодельный механизм голосования

    • Запуск нескольких моделей ИИ одновременно
    • Интегрируйте мнения из нескольких моделей для принятия решений
  4. Добавить проверку бэктестинга

    • Проверка стратегий на исторических данных
    • Оптимизируйте слова и параметры подсказок

12. Резюме

Эта количественная торговая система на основе ИИ демонстрирует, как применять большие языковые модели к реальным сценариям финансовой торговли. Её основные преимущества:

  1. Модульный дизайн:Каждый узел имеет четкие обязанности, прост в обслуживании и расширении.
  2. Строгий контроль риска: Многоуровневый механизм защиты, позволяющий избежать крупных единовременных потерь
  3. Интеграция искусственного интеллекта: Структурированный ввод