集成 integrations

集成技能用于管理和接入外部数据源,为交易机器人提供实时数据流和API连接,增强自动化交易系统的数据处理能力。

算法交易 0 次安装 0 次浏览 更新于 3/5/2026

name: 集成 description: “外部数据源、连接器和自定义数据流” emoji: “🔗”

集成 - 完整的API参考

管理外部数据源,添加自定义连接器,并为交易机器人插入新数据流。


聊天命令

列出数据源

/integrations                               列出所有数据源
/integrations status                        显示源健康状态
/integrations sources                       可用源类型

管理源

/integrations enable fedwatch              启用CME FedWatch
/integrations disable 538                   禁用FiveThirtyEight
/integrations add webhook "my-signals"      添加自定义webhook源
/integrations add rest "my-api" <url>       添加REST API源
/integrations remove <source-id>            移除数据源

配置源

/integrations config fedwatch              查看源配置
/integrations set fedwatch interval 60     设置刷新间隔
/integrations set fedwatch key <api-key>   设置API密钥
/integrations test <source-id>             测试源连接

查看数据

/integrations data fedwatch                源的最新数据
/integrations history <source> --hours 24  源的历史数据
/integrations subscribe <source>           实时更新

TypeScript API参考

创建集成管理器

import { createIntegrationsManager } from 'clodds/integrations';

const integrations = createIntegrationsManager({
  // 存储
  storage: 'sqlite',
  dbPath: './integrations.db',

  // 默认刷新间隔
  defaultIntervalMs: 60000,

  // 重试设置
  maxRetries: 3,
  retryDelayMs: 5000,
});

内置数据源

// 启用内置源
await integrations.enable('fedwatch');     // CME FedWatch
await integrations.enable('538');          // FiveThirtyEight
await integrations.enable('silver');       // Silver Bulletin
await integrations.enable('rcp');          // RealClearPolitics
await integrations.enable('odds-api');     // The Odds API
await integrations.enable('polymarket');   // Polymarket价格
await integrations.enable('kalshi');       // Kalshi价格
await integrations.enable('binance');      // Binance现货价格
await integrations.enable('crypto');       // 多交易所加密货币

添加自定义Webhook源

// 添加接收自定义信号的webhook
const source = await integrations.addWebhook({
  name: 'my-signals',
  description: '自定义交易信号',

  // Webhook配置
  path: '/webhooks/my-signals',
  secret: process.env.WEBHOOK_SECRET,

  // 数据模式(可选验证)
  schema: {
    type: 'object',
    properties: {
      signal: { type: 'string', enum: ['BUY', 'SELL', 'HOLD'] },
      symbol: { type: 'string' },
      confidence: { type: 'number', min: 0, max: 1 },
    },
    required: ['signal', 'symbol'],
  },

  // 转换传入数据
  transform: (payload) => ({
    signal: payload.signal,
    symbol: payload.symbol,
    confidence: payload.confidence || 0.5,
    timestamp: Date.now(),
  }),
});

console.log(`Webhook URL: ${source.url}`);
// POST到:https://your-domain.com/webhooks/my-signals

添加自定义REST源

// 添加REST API数据源
const source = await integrations.addRest({
  name: 'my-api',
  description: '自定义价格API',

  // API配置
  url: 'https://api.example.com/prices',
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${process.env.MY_API_KEY}`,
  },

  // 轮询间隔
  intervalMs: 30000,

  // 转换响应
  transform: (response) => ({
    price: response.data.price,
    volume: response.data.volume,
    timestamp: Date.now(),
  }),
});

添加WebSocket源

// 添加WebSocket数据源
const source = await integrations.addWebSocket({
  name: 'live-prices',
  description: '实时价格推送',

  // WebSocket配置
  url: 'wss://stream.example.com/prices',

  // 消息处理器
  onMessage: (data) => ({
    type: 'price',
    symbol: data.s,
    price: parseFloat(data.p),
    timestamp: data.t,
  }),

  // 订阅消息
  subscribe: {
    method: 'SUBSCRIBE',
    params: ['btcusdt@trade'],
  },

  // 重连设置
  reconnect: true,
  reconnectIntervalMs: 5000,
});

订阅数据

// 订阅实时更新
integrations.subscribe('my-signals', (data) => {
  console.log(`信号: ${data.signal} ${data.symbol}`);
  console.log(`置信度: ${data.confidence}`);

  if (data.signal === 'BUY' && data.confidence > 0.8) {
    // 执行交易逻辑
  }
});

// 订阅多个源
integrations.subscribeAll(['fedwatch', 'crypto', 'my-signals'], (source, data) => {
  console.log(`[${source}] ${JSON.stringify(data)}`);
});

获取最新数据

// 从源获取当前数据
const fedData = await integrations.getData('fedwatch');

console.log('联邦利率概率:');
for (const meeting of fedData.meetings) {
  console.log(`${meeting.date}: ${meeting.probabilities}`);
}

// 带新鲜度检查获取
const data = await integrations.getData('crypto', {
  maxAgeMs: 60000,  // 如果超过60秒则重新获取
});

检查状态

// 获取源状态
const status = await integrations.getStatus('my-api');

console.log(`状态: ${status.status}`);  // 'healthy' | 'degraded' | 'error'
console.log(`最后获取: ${status.lastFetch}`);
console.log(`最后错误: ${status.lastError}`);
console.log(`获取次数: ${status.fetchCount}`);
console.log(`错误次数: ${status.errorCount}`);

// 获取所有状态
const all = await integrations.getAllStatuses();

内置数据源

类型 数据 刷新
fedwatch REST 联邦利率概率 5分钟
538 REST 选举预测 1小时
silver REST Silver Bulletin预测 1小时
rcp REST 民调平均值 15分钟
odds-api REST 体育博彩赔率 1分钟
polymarket WebSocket 市场价格 实时
kalshi WebSocket 市场价格 实时
binance WebSocket 加密货币价格 实时

自定义源类型

类型 最适合 延迟
webhook 外部信号推送给您 即时
rest 您定期轮询的API
websocket 实时流数据 毫秒

在机器人中使用数据

import { createTradingBot } from 'clodds/trading';
import { createIntegrationsManager } from 'clodds/integrations';

const integrations = createIntegrationsManager();
const bot = createTradingBot();

// 在机器人策略中使用自定义信号
integrations.subscribe('my-signals', async (signal) => {
  if (signal.signal === 'BUY' && signal.confidence > 0.9) {
    await bot.execute({
      platform: 'polymarket',
      market: signal.symbol,
      side: 'YES',
      size: 100 * signal.confidence,
    });
  }
});

// 使用联邦数据进行宏观投注
integrations.subscribe('fedwatch', async (data) => {
  const cutProb = data.meetings[0].probabilities['25bp_cut'];
  if (cutProb > 0.8) {
    // 高概率的降息
    await bot.execute({
      platform: 'kalshi',
      market: 'fed-rate-cut',
      side: 'YES',
      size: 500,
    });
  }
});

环境变量

# 内置源
CME_FEDWATCH_API_KEY=your-key
FIVETHIRTYEIGHT_API_KEY=your-key
ODDS_API_KEY=your-key

# 自定义源
MY_SIGNALS_WEBHOOK_SECRET=your-secret
MY_API_KEY=your-key

最佳实践

  1. 验证传入数据 — 为webhooks使用模式
  2. 设置适当的间隔 — 不要频繁轮询
  3. 优雅地处理错误 — 源有时会失败
  4. 监控新鲜度 — 对陈旧数据进行警报
  5. 一致转换 — 规范化数据格式
  6. 使用WebSocket降低延迟 — 当毫秒很重要时