一、技能总览

tushare-finance 是基于 Tushare Pro 深度二次开发的中国全金融市场数据引擎,专为 A 股、港股、基金、期货、债券、指数、宏观经济打造一站式、高可用、可定制的数据中台。不止是原生接口封装,更是鉴权托管、缓存加速、批量拉取、清洗标准化、增量更新、插件化指标、全生态联动的企业级数据服务。

覆盖沪深 A 股、指数、ETF、基金、期货、期权、债券、外汇、宏观 GDP/CPI/PMI、行业财务、龙虎榜、大宗、舆情等全维度数据Tushare,原生对接 OpenClaw,实现数据拉取→清洗→存储→分析→可视化→推送全链路自动化,是量化交易、金融分析、复盘研究、风控建模、金融 AI 二开的核心底座Tushare。

二、原生 Tushare 痛点 & 二开惊喜升级

(一)原生 Tushare 短板

  1. Token 管理繁琐:手动配置、过期重设、多账号切换麻烦Tushare。
  2. 调用零散碎片化:接口多、参数复杂、批量获取需写循环,代码冗余Tushare。
  3. 无缓存 / 限流弱:高频请求易超限、重复拉取浪费流量、无本地缓存Tushare。
  4. 数据需手动清洗:原始数据脏值、空值、格式不统一,二次处理成本高Tushare。
  5. 无增量 / 定时:全量拉取慢,无法定时增量更新、实时轮询。
  6. 无标准化输出:返回 DataFrame,对接 Excel / 数据库 / 可视化需适配Tushare。
  7. 生态孤立:难对接图表、爬虫、飞书、量化策略、本地数据库。

(二)本工具・独家二开惊喜

全局 Token 托管 + 自动续期:一次配置、永久有效,多账号切换、过期自动刷新Tushare。

极简统一接口:一行代码拿全市场数据,批量 / 多股票 / 多日期原生支持,告别循环Tushare。

多层智能缓存:内存 + 本地磁盘缓存,重复请求零消耗,自动过期清理Tushare。

全自动清洗标准化:去重、补空、格式统一、字段对齐、复权处理、风险标记Tushare。

增量 + 定时 + 实时轮询:每日 / 每分钟自动更新,只拉新增数据,毫秒级实时行情

多格式输出:DataFrame/JSON/CSV/Excel/MySQL,一键入库、直接可视化Tushare。

插件化指标拓展:自定义技术指标(MACD/RSI/BOLL)、财务比率、行业因子。

全生态深度打通:对接图表生成、市场调研、飞书推送、量化回测、告警系统。

高可用限流 + 重试:自动限速、失败重试、断点续传,稳定 7×24 小时运行Tushare。

三、核心数据覆盖(全市场无死角)

(一)沪深 A 股(核心)

  • 基础信息:股票列表、交易所、行业、上市日期、退市、曾用名Tushare。
  • 行情数据:日线 / 周线 / 月线、1/5/15/30/60 分钟、Tick 逐笔、复权数据Tushare。
  • 财务数据:资产负债表、利润表、现金流量表、业绩预告、分红送股、ROE / 毛利率Tushare。
  • 市场行为:龙虎榜、大宗交易、融资融券、涨跌停、停牌、新股 IPOTushare。

(二)指数 / ETF / 基金

  • 上证指数、深成指、沪深 300、中证 500、创业板、科创板、行业指数Tushare。
  • ETF 基金、LOF、货币基金、债券基金、净值、持仓、分红。

(三)期货 / 期权 / 债券

  • 国内期货(上期 / 大商 / 郑商 / 中金):日线、分钟、持仓、交割、主力合约。
  • 国债、企业债、可转债、回购、利率数据。

(四)宏观 / 行业 / 舆情

  • GDP、CPI、PPI、PMI、M2、汇率、利率、进出口。
  • 申万 / 中信行业分类、行业财务、景气度。
  • 财经新闻、公告、研报、舆情情绪、热搜。

四、核心功能模块(二开增强版)

(一)统一鉴权与连接池

  • 多 Token 管理、自动负载均衡、过期自动刷新、连接池复用Tushare。
  • 一键切换免费 / Pro / 企业版,权限自动适配Tushare。

(二)极简数据接口层(核心惊喜)

  • 股票行情get_stock_data(ts_code, start, end, freq)Tushare。
  • 批量股票get_batch_stock(codes, start, end) 一次多股Tushare。
  • 财务指标get_financial(ts_code, period) 三大报表 + 指标Tushare。
  • 指数行情get_index_data(code, start, end)Tushare。
  • 期货主力get_future_main(exchange) 自动匹配主力合约。

(三)智能缓存与增量引擎

  • 本地缓存:自动缓存 30 天数据,重复调用不请求 APITushare。
  • 增量更新:每日自动拉取新增行情、财务、公告。
  • 定时任务:自定义周期(1min/5min/1h/1d)自动更新。

(四)数据清洗与标准化

  • 自动去重、空值填充、异常值剔除、格式统一、复权计算Tushare。
  • 统一字段命名:ts_code,trade_date,open,high,low,close,vol,amountTushare。

(五)插件化指标库(二开核心)

  • 技术指标:MACD、RSI、KDJ、BOLL、均线、ATR、OBV。
  • 财务指标:PE、PB、PS、ROE、毛利率、净利率、资产负债率Tushare。
  • 自定义插件:支持 Python 脚本编写专属因子、行业指标。

(六)批量导出与入库

  • 导出 CSV/Excel/JSON,一键写入 MySQL/PostgreSQL/SQLiteTushare。
  • 分库分表、自动建表、增量写入、数据备份Tushare。

(七)实时监控与异动告警

  • 价格异动、涨跌停、放量、龙虎榜、大宗、业绩暴增 / 暴雷。
  • 自定义告警规则,推送飞书 / 邮件 / 短信。

(八)OpenClaw 全生态联动

  1. 图表生成器:K 线、分时、柱状、折线、财务对比图自动生成。
  2. 市场调研:自动拉取金融数据做行业 / 竞品财务分析。
  3. 飞书包装器:行情异动、财报、每日收盘报告自动推送。
  4. 量化回测:数据直连策略回测、绩效分析、实盘信号。
  5. 数据大屏:实时行情、指数、资金流向、财务数据可视化大屏。

五、分层架构(深度二开适配)

  1. 接入层:Token 管理、请求路由、限流、重试、连接池Tushare。
  2. 缓存层:内存缓存、磁盘缓存、过期清理、增量标记Tushare。
  3. 接口适配层:原生 Tushare 接口封装、参数标准化、响应解析Tushare。
  4. 清洗标准化层:去重、补空、格式转换、复权、指标计算Tushare。
  5. 核心数据层:股票、指数、基金、期货、财务、宏观数据服务。
  6. 插件指标层:技术指标、财务因子、自定义插件容器。
  7. 存储导出层:数据库写入、文件导出、备份、同步Tushare。
  8. 任务调度层:定时更新、增量拉取、监控告警、任务队列。
  9. 生态对接层:OpenClaw 全系工具、第三方系统 API、可视化输出。

六、核心代码(TypeScript・OpenClaw 原生)

typescript

运行

import fs from "fs-extra";
import path from "path";
import { Skill, Context } from "openclaw";
const TushareCore = require("./tushare-core");
const CacheManager = require("./cache");
const TaskScheduler = require("./scheduler");

// 全局配置
const TUSHARE_CONFIG = {
  rootDir: "./claw-data/tushare-finance",
  cacheDir: "./claw-data/tushare-finance/cache",
  dataDir: "./claw-data/tushare-finance/data",
  logDir: "./claw-data/tushare-finance/logs",
  token: "", // 填入你的Tushare Token
  autoRefreshToken: true,
  cacheDays: 30,
  rateLimit: 200, // 每分钟请求上限
  autoClean: true
};

// 初始化
async function initService() {
  await fs.ensureDir(TUSHARE_CONFIG.rootDir);
  await fs.ensureDir(TUSHARE_CONFIG.cacheDir);
  await fs.ensureDir(TUSHARE_CONFIG.dataDir);
  await fs.ensureDir(TUSHARE_CONFIG.logDir);
  TushareCore.init(TUSHARE_CONFIG);
  CacheManager.init(TUSHARE_CONFIG);
  TaskScheduler.init(TUSHARE_CONFIG);
}

// 日志
function writeLog(task: string, target: string, info: string) {
  const logPath = path.join(TUSHARE_CONFIG.logDir, `${new Date().toLocaleDateString()}.log`);
  fs.appendFileSync(logPath, `[${new Date().toISOString()}] 任务:${task} | 目标:${target} | ${info}\n`);
}

export const TushareFinanceSkill: Skill = {
  name: "tushare-finance",
  description: "tushare-finance 中国金融数据超级网关|A股/期货/基金/财务/宏观/实时行情/二开量化中台",
  patterns: [
    "股票行情{code}{start}{end}{freq}",
    "批量股票{codes}{start}{end}",
    "财务数据{code}{period}",
    "指数行情{code}{start}{end}",
    "期货主力{exchange}",
    "定时更新{freq}",
    "加载指标{name}",
    "导出数据{type}{path}"
  ],
  handler: async (ctx: Context) => {
    const { match, pattern, reply } = ctx;
    await initService();

    try {
      // 股票行情
      if (pattern === "股票行情{code}{start}{end}{freq}") {
        reply(`📈 获取 ${match.code} ${match.freq} 行情:${match.start}-${match.end}`);
        const df = await TushareCore.getStockData(match.code, match.start, match.end, match.freq);
        writeLog("股票行情", match.code, `数据行数:${df.length}`);
        return reply(`✅ 行情获取成功,共${df.length}条数据`);
      }

      // 批量股票
      if (pattern === "批量股票{codes}{start}{end}") {
        reply(`📊 批量拉取股票:${match.codes}`);
        const data = await TushareCore.getBatchStock(match.codes.split(","), match.start, match.end);
        writeLog("批量股票", match.codes, "获取完成");
        return reply(`✅ 批量数据获取成功`);
      }

      // 财务数据
      if (pattern === "财务数据{code}{period}") {
        reply(`📋 获取 ${match.code} 财务数据:${match.period}`);
        const fin = await TushareCore.getFinancial(match.code, match.period);
        writeLog("财务数据", match.code, "获取完成");
        return reply(`✅ 财务数据获取成功`);
      }

      // 定时更新
      if (pattern === "定时更新{freq}") {
        reply(`⏰ 开启${match.freq}自动增量更新`);
        TaskScheduler.addUpdateTask(match.freq);
        writeLog("定时更新", match.freq, "已启动");
        return reply(`✅ 定时更新已开启`);
      }

      // 加载指标
      if (pattern === "加载指标{name}") {
        reply(`🧩 加载技术指标:${match.name}`);
        TushareCore.loadIndicator(match.name);
        writeLog("指标加载", match.name, "成功");
        return reply(`✅ 指标已启用`);
      }

    } catch (e: any) {
      writeLog("异常", match?.code || "", e.message);
      return reply(`❌ 失败:${e.message}`);
    }

    return reply(`💡 指令:
股票行情+代码+开始+结束+频率 | 批量股票+代码(逗号)+时间
财务数据+代码+季度/年度 | 指数行情+代码+时间
期货主力+交易所 | 定时更新+1min/5min/1h/1d
加载指标+MACD/RSI/BOLL | 导出数据+csv/excel+路径`);
  }
};

七、常用指令

plaintext

# 行情
股票行情 600519.SH 20260101 20260614 daily
股票行情 000001.SZ 20260601 20260614 5min

# 批量
批量股票 600519.SH,000001.SZ,600036.SH 20260101 20260614

# 财务
财务数据 600519.SH 2026Q1
财务数据 600519.SH 2025年报

# 指数/期货
指数行情 000001.SH 20260101 20260614
期货主力 SHFE

# 任务/指标
定时更新 1min
加载指标 MACD
导出数据 csv D:/finance/stock_data.csv

八、落地场景

场景 1:量化交易数据中台

稳定获取 A 股全市场数据,自动清洗、定时更新、指标计算,对接回测 / 实盘策略。

场景 2:金融分析师工具

一键拉取股票 / 行业财务、行情、估值,自动生成图表 + 报告,大幅提升效率。

场景 3:实盘监控与告警

7×24 小时监控持仓、指数、板块,异动自动提醒,规避风险。

场景 4:金融数据大屏

实时展示 A 股行情、资金流向、龙虎榜、财务排行,企业级可视化大屏

场景 5:二次开发金融产品

插件化架构,自定义指标、因子、数据源,快速搭建选股、估值、风控系统。

九、二次开发惊喜拓展

  1. AI 量化选股:接入大模型,自动选股、生成策略、回测优化
  2. 多因子模型:自定义财务、量价、舆情因子,构建量化打分体系
  3. 跨境金融数据:拓展港股、美股、新加坡、日本市场,全球资产数据中台
  4. 实时数据流 API:封装为WebSocket 实时行情 API,供前端 / 策略订阅。
  5. 私有化金融云:本地部署,全市场数据私有云,安全可控、高并发Tushare。
  6. 智能研报生成:自动抓取数据→分析→生成PDF 研报 + PPT,一键输出。