
Tushare
- 111 installs
- 169 repo stars
- Updated June 29, 2026
- lzwme/finance-quant-skills
Helps with ai & agent building tasks.
About
tushare is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- tushare
- AI & Agent Building
- AI-coding skill
Tushare by the numbers
- 111 all-time installs (skills.sh)
- +5 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #4,036 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/lzwme/finance-quant-skills --skill tushareAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 111 |
|---|---|
| repo stars | ★ 169 |
| Last updated | June 29, 2026 |
| Repository | lzwme/finance-quant-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
Tushare 数据获取
任务目标
- 本 Skill 用于:通过 Tushare 数据接口获取 A 股市场数据、财务指标和宏观数据
- 能力包含:实时行情、历史K线、财务数据、指标数据、股票信息、宏观数据、指数数据
- 触发条件:用户提及 Tushare 或需要获取 A 股数据、财务信息、宏观数据时
前置准备
- 依赖说明:安装 tushare 库(已包含在 dependency 中)
- 凭证配置:需配置 Tushare Token(凭证名: TUSHARE_TOKEN,环境变量: TUSHARE_TOKEN)
- 账号申请:访问 https://tushare.pro/ 注册账号并获取 API Token(详见 references/tushare_quickstart.md)
操作步骤
- 标准流程:
1. 确定数据需求 — 智能体理解用户意图(行情/K线/财务/宏观/指数等) 2. 调用对应脚本 — 根据数据类型选择脚本 3. 解析结果 — 智能体分析返回的 JSON 格式数据
- 脚本调用映射:
- 行情/K线/复权数据 →
python scripts/market_data.py --type daily --ts_code 000001.SZ --start_date 20240101 --end_date 20240131 - 财务数据/利润表/资产负债表 →
python scripts/financial_data.py --type financial --ts_code 000001.SZ --period 2023 - 股票列表/交易日历 →
python scripts/stock_info.py --type stock_basic - 指数数据/宏观数据 →
python scripts/macro_index_data.py --type index_daily --ts_code 000001.SH --start_date 20240101 --end_date 20240131 - 可选分支:
- 当需要多只股票数据:使用 --ts_code 参数逗号分隔
- 当需要复权数据:使用 --type adj_factor 获取复权因子
- 当需要指定报告期:使用 --period 参数(YYYY 或 YYYYMM)
使用示例
- 示例1:获取股票日K线数据
- 场景/输入:用户说"查看平安银行最近一个月的K线数据"
- 预期产出:返回日期、开盘价、最高价、最低价、收盘价、成交量等OHLCV数据
- 关键要点:调用
python scripts/market_data.py --type daily --ts_code 000001.SZ --start_date 20240301 --end_date 20240331 - 示例2:查询财务数据
- 场景/输入:用户说"获取招商银行2023年的财务指标"
- 预期产出:返回ROE、ROA、毛利率、净利率等财务指标
- 关键要点:调用
python scripts/financial_data.py --type fina_indicator --ts_code 600036.SH --period 2023 - 示例3:获取指数数据
- 场景/输入:用户说"查询上证指数最近的走势"
- 预期产出:返回上证指数的日期、收盘价、成交量等数据
- 关键要点:调用
python scripts/macro_index_data.py --type index_daily --ts_code 000001.SH --start_date 20240301 --end_date 20240331
快速参考
常用代码示例
import tushare as ts
import pandas as pd
# 设置 Token(需先设置环境变量 TUSHARE_TOKEN)
ts.set_token(os.environ.get('TUSHARE_TOKEN', ''))
pro = ts.pro_api()
# 获取日K线数据
df = pro.daily(ts_code='000001.SZ', start_date='20240101', end_date='20241231')
# 获取财务指标
df = pro.fina_indicator(ts_code='600036.SH', period='2023')
# 获取指数数据
df = pro.index_daily(ts_code='000001.SH', start_date='20240101', end_date='20241231')与其他数据源对比
| 特性 | tushare | jqdatasdk | baostock | akshare |
|---|---|---|---|---|
| 费用 | 免费/付费 | 需注册积分 | 免费 | 免费 |
| 注册要求 | ✅ 需要 | ✅ 需要 | ❌ 不需要 | ❌ 不需要 |
| 数据范围 | 全面(含宏观) | A股+因子 | A股为主 | 全面 |
| 宏观数据 | ✅ 丰富 | ❌ | ❌ | ✅ |
| 调用频率 | 免费有限制 | 有 | 无限制 | 无限制 |
资源索引
- 脚本:
- scripts/market_data.py (用途与参数:获取行情/K线/复权数据,支持 --type/--ts_code/--start_date/--end_date)
- scripts/financial_data.py (用途与参数:获取财务数据/利润表/资产负债表/现金流量表/指标,支持 --type/--ts_code/--period)
- scripts/stock_info.py (用途与参数:获取股票列表/交易日历/名称变更,支持 --type/--ts_code/--start_date/--end_date)
- scripts/macro_index_data.py (用途与参数:获取指数数据/宏观数据/Shibor,支持 --type/--ts_code/--start_date/--end_date)
- 参考:
- references/tushare_quickstart.md (何时读取:首次配置或认证失败时)
- references/api_reference.md (何时读取:需要查看详细API参数说明时)
注意事项
- 脚本执行需配置 Tushare Token,首次使用需先完成凭证配置
- Tushare 股票代码格式:上海市场为 XXXXXX.SH,深圳市场为 XXXXXX.SZ
- 部分数据(如财务数据)可能有延迟,建议在交易日9:30-15:00之外获取
- 脚本返回 JSON 格式数据,智能体负责解析并转换为用户友好的展示
- 调用频率有限制,免费账户每分钟最多120次调用(详见 Tushare 官方文档)
- 首次使用建议先读取 tushare_quickstart.md 完成认证配置
Tushare API 参考
目录
概览
本文档提供 Tushare 核心 API 的详细参数说明和返回格式。
客户端初始化:
import tushare as ts
pro = ts.pro_api('你的Token')行情数据 API
daily
获取日线行情
参数:
ts_code: str,股票代码,格式XXXXXX.SH或XXXXXX.SZ,支持多只股票用逗号分隔trade_date: str,交易日期,格式YYYYMMDDstart_date: str,开始日期,格式YYYYMMDDend_date: str,结束日期,格式YYYYMMDDfields: str,字段列表,逗号分隔
返回字段:
ts_code: 股票代码trade_date: 交易日期open: 开盘价high: 最高价low: 最低价close: 收盘价pre_close: 昨收价change: 涨跌额pct_chg: 涨跌幅 (%)vol: 成交量 (手)amount: 成交额 (千元)
示例:
df = pro.daily(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')adj_factor
获取复权因子
参数:
ts_code: str,股票代码trade_date: str,交易日期start_date: str,开始日期end_date: str,结束日期
返回字段:
ts_code: 股票代码trade_date: 交易日期adj_factor: 复权因子
示例:
df = pro.adj_factor(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')daily_basic
获取每日指标
参数:
ts_code: str,股票代码trade_date: str,交易日期start_date: str,开始日期end_date: str,结束日期fields: str,字段列表
返回字段:
ts_code: 股票代码trade_date: 交易日期close: 收盘价turnover_rate: 换手率 (%)turnover_rate_f: 换手率(自由流通股)volume_ratio: 量比pe: 市盈率pe_ttm: 市盈率TTMpb: 市净率ps: 市销率ps_ttm: 市销率TTMdv_ratio: 股息率dv_ttm: 股息率TTMtotal_share: 总股本 (万股)float_share: 流通股本 (万股)free_share: 自由流通股本 (万股)total_mv: 总市值 (万元)circ_mv: 流通市值 (万元)
示例:
df = pro.daily_basic(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')weekly
获取周线行情
参数: 同 daily
返回字段: 同 daily
monthly
获取月线行情
参数: 同 daily
返回字段: 同 daily
财务数据 API
income
获取利润表
参数:
ts_code: str,股票代码ann_date: str,公告日期,格式YYYYMMDDf_ann_date: str,首次公告日期start_date: str,报告期开始日期end_date: str,报告期结束日期period: str,报告期,格式YYYY或YYYYMMreport_type: str,报告类型1: 合并报表2: 单季合并3: 调整单季合并表4: 调整合并报表5: 调整前合并报表
返回字段:
ts_code: 股票代码ann_date: 公告日期f_ann_date: 首次公告日期end_date: 报告期report_type: 报告类型comp_type: 公司类型basic_eps: 基本每股收益diluted_eps: 稀释每股收益total_revenue: 营业总收入revenue: 营业收入int_income: 利息收入prem_earned: 已赚保费comm_income: 手续费及佣金收入n_commis_income: 手续费及佣金净收入n_oth_income: 其他经营收益n_oth_b_income: 加:其他业务收入total_cogs: 营业总成本oper_cost: 营业成本int_exp: 利息支出comm_exp: 手续费及佣金支出biz_tax_surchg: 营业税金及附加sell_exp: 销售费用admin_exp: 管理费用fin_exp: 财务费用assets_impair_loss: 资产减值损失credit_impair_loss: 信用减值损失prem_refund: 退保金compen_payout: 赔付支出reser_insur_liab: 提取保险责任准备金div_payout_test: 保户红利支出reinsur_exp: 分保费用oper_exp: 营业支出oper_tax: 营业税金及附加assets_impair_loss: 资产减值损失tot_oper_rev: 营业总收入tot_oper_cost: 营业总成本oper_profit: 营业利润non_oper_income: 加:营业外收入non_oper_exp: 减:营业外支出nca_disploss: 减:非流动资产处置损失total_profit: 利润总额income_tax: 减:所得税费用n_income: 净利润n_income_attr_p: 净利润(含少数股东损益)minority_gain: 少数股东损益oth_compr_income: 其他综合收益t_compr_income: 综合收益总额compr_inc_attr_p: 归属于母公司(或股东)的综合收益总额compr_inc_attr_m_s: 归属于母公司所有者的综合收益总额
示例:
df = pro.income(ts_code='000001.SZ',
period='2023',
report_type='1')balancesheet
获取资产负债表
参数: 同 income
返回字段:
ts_code: 股票代码ann_date: 公告日期f_ann_date: 首次公告日期end_date: 报告期report_type: 报告类型comp_type: 公司类型total_assets: 资产总计cash_equivalents: 货币资金trading_assets: 交易性金融资产note_receivable: 应收票据accounts_receivable: 应收账款oth_receivable: 其他应收款prepayment: 预付款项oth_receivable: 其他应收款oth_current_assets: 其他流动资产total_current_assets: 流动资产合计fa_avail_for_sale: 可供出售金融资产htm_investments: 持有至到期投资lt_eqt_invest: 长期股权投资invest_real_estate: 投资性房地产fixed_assets: 固定资产cip: 在建工程const_materials: 工程物资fixed_assets_disp: 固定资产清理biological_assets: 生产性生物资产oil_and_gas_assets: 油气资产intan_assets: 无形资产goodwill: 商誉long_deferred_expenses: 长期待摊费用deferred_tax_assets: 递延所得税资产other_non_current_assets: 其他非流动资产total_non_current_assets: 非流动资产合计total_liab: 负债合计st_borr: 短期借款trading_fin_liab: 交易性金融负债notes_payable: 应付票据acct_payable: 应付账款adv_receipts: 预收款项sold_for_repur_sec: 卖出回购金融资产款commission_payable: 应付手续费及佣金employee_benefits_payable: 应付职工薪酬taxes_payable: 应交税费int_payable: 应付利息div_payable: 应付股利oth_payable: 其他应付款oth_current_liab: 其他流动负债total_current_liab: 流动负债合计lt_borr: 长期借款bonds_payable: 应付债券lt_payable: 长期应付款specific_payables: 专项应付款estimated_liab: 预计负债deferred_tax_liab: 递延所得税负债defer_income_non_cur: 递延收益-非流动负债other_non_current_liab: 其他非流动负债total_non_current_liab: 非流动负债合计total_owner_equities: 负债和股东权益总计parent_owner_equities: 归属于母公司所有者权益minority_interest: 少数股东权益
示例:
df = pro.balancesheet(ts_code='000001.SZ',
period='2023',
report_type='1')cashflow
获取现金流量表
参数: 同 income
返回字段:
ts_code: 股票代码ann_date: 公告日期f_ann_date: 首次公告日期end_date: 报告期report_type: 报告类型comp_type: 公司类型n_cashflow_act: 经营活动产生的现金流量净额n_cashflow_inv_act: 投资活动产生的现金流量净额n_cash_flows_fnc_act: 筹资活动产生的现金流量净额
示例:
df = pro.cashflow(ts_code='000001.SZ',
period='2023',
report_type='1')fina_indicator
获取财务指标
参数:
ts_code: str,股票代码ann_date: str,公告日期start_date: str,报告期开始日期end_date: str,报告期结束日期period: str,报告期
返回字段:
ts_code: 股票代码ann_date: 公告日期end_date: 报告期roe: 净资产收益率(%)roe_dt: 净资产收益率(扣除非经常损益)(%)roe_wy: 加权净资产收益率(%)roa: 总资产净利润率(%)npta: 总资产净利润率(杜邦分析)(%)roe_yearly: 净资产收益率(年化)(%)roa2: 总资产报酬率(%)roe_avg: 净资产收益率(平均)(%)debt_to_assets: 资产负债率(%)assets_turnover: 总资产周转率(次)ca_turnover: 流动资产周转率(次)fa_turnover: 固定资产周转率(次)op_profit_growth_rate: 营业利润增长率(%)gross_profit_margin: 销售毛利率(%)- `ebit_interest_coverage: 息税前利润与利息费用比率
- `ebitda_to_interest: EBITDA与利息费用比率
ca_to_assets: 流动资产/总资产(%)- `ncfo_to_or: 经营现金净流量/营业收入
- `op_to_gr: 营业利润/营业总收入(%)
示例:
df = pro.fina_indicator(ts_code='000001.SZ',
period='2023')股票信息 API
stock_basic
获取股票基础信息
参数:
ts_code: str,股票代码list_status: str,上市状态L: 上市D: 退市P: 暂停上市exchange: str,交易所SSE: 上交所SZSE: 深交所
返回字段:
ts_code: 股票代码symbol: 股票代码name: 股票名称area: 所在地industry: 所属行业fullname: 股票全称enname: 英文全称cnspell: 拼音缩写market: 市场类型(主板/中小板/创业板/科创板)exchange: 交易所代码curr_type: 交易货币list_status: 上市状态list_date: 上市日期delist_date: 退市日期is_hs: 是否沪深港通标的
示例:
df = pro.stock_basic(exchange='SSE', list_status='L')trade_cal
获取交易日历
参数:
exchange: str,交易所SSE: 上交所SZSE: 深交所start_date: str,开始日期end_date: str,结束日期is_open: str,是否开市0: 休市1: 开市
返回字段:
exchange: 交易所cal_date: 日历日期is_open: 是否开市pretrade_date: 上一交易日
示例:
df = pro.trade_cal(exchange='SSE',
start_date='20240101',
end_date='20240131',
is_open='1')namechange
获取股票名称变更
参数:
ts_code: str,股票代码start_date: str,开始日期end_date: str,结束日期
返回字段:
ts_code: 股票代码name: 股票名称start_date: 开始日期end_date: 结束日期change_reason: 变更原因
示例:
df = pro.namechange(ts_code='000001.SZ',
start_date='20230101',
end_date='20241231')指数与宏观数据 API
index_daily
获取指数日线行情
参数:
ts_code: str,指数代码trade_date: str,交易日期start_date: str,开始日期end_date: str,结束日期
返回字段:
ts_code: 指数代码trade_date: 交易日期close: 收盘点位open: 开盘点位high: 最高点位low: 最低点位pre_close: 昨收点位change: 涨跌点pct_chg: 涨跌幅 (%)vol: 成交量 (手)amount: 成交额 (千元)
示例:
df = pro.index_daily(ts_code='000001.SH',
start_date='20240101',
end_date='20240131')index_basic
获取指数基础信息
参数:
ts_code: str,指数代码market: str,市场level: str,级别L1: 大类L2: 中类L3: 小类
返回字段:
ts_code: 指数代码name: 指数名称market: 市场publisher: 发布方index_type: 指数类型category: 分类base_date: 基期base_point: 基点list_date: 发布日期weight_rule: 加权规则desc: 描述- `exp_date': 终止日期
示例:
df = pro.index_basic(market='SSE')shibor
获取 Shibor 数据
参数:
date: str,日期start_date: str,开始日期end_date: str,结束日期
返回字段:
date: 日期on: 隔夜利率1w: 1周利率2w: 2周利率1m: 1月利率3m: 3月利率6m: 6月利率9m: 9月利率1y: 1年利率
示例:
df = pro.shibor(start_date='20240101',
end_date='20240131')错误处理
常见错误
| 错误类型 | 说明 | 解决方法 |
|---|---|---|
| 认证失败 | Token 无效或过期 | 检查 Token 是否正确 |
| 调用次数超限 | 超过每分钟调用限制 | 减少请求频率或升级账号 |
| 数据不存在 | 请求的数据不存在 | 检查参数是否正确 |
| 权限不足 | 部分数据需要付费 | 升级 Tushare 账号 |
错误处理示例
try:
df = pro.daily(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')
if df is None or df.empty:
print("无数据")
else:
print(df)
except Exception as e:
print(f"错误: {e}")调用频率限制
免费账户:每分钟最多 120 次调用
建议:
- 使用批量接口
- 合理设置日期范围
- 使用本地缓存
Tushare 快速开始
目录
概览
Tushare 是一个免费、开源的财经数据接口包,主要用于获取中国股票市场数据。它提供包括行情、财务、宏观数据等多种类型的金融数据。
核心特点:
- 免费开源,社区活跃
- 数据覆盖全面,支持 A 股、指数、基金、期货等
- 提供 API 接口和 Python SDK
- 数据质量高,更新及时
安装与配置
1. 安装 Python 依赖
pip install tushare>=1.2.60 pandas>=1.3.02. 注册 Tushare 账号
访问 https://tushare.pro/ 注册账号。
3. 获取 API Token
1. 登录 Tushare 官网 2. 进入"个人中心"或"用户中心" 3. 找到"接口 Token"选项 4. 复制你的 Token
注意: Token 相当于账号密码,请妥善保管,不要泄露给他人。
认证配置
使用 Skill 凭证配置
本 Skill 已集成凭证管理功能,首次使用时会提示配置 TUSHARE_TOKEN 凭证。
配置步骤: 1. 当智能体调用脚本时,如果检测到未配置凭证,会弹出凭证配置窗口 2. 将你从 Tushare 官网复制的 Token 粘贴到输入框 3. 凭证配置完成后,脚本会自动读取并使用
手动认证方式
如果在本地测试,可以使用以下方式:
import tushare as ts
# 设置 Token
pro = ts.pro_api('你的Token')
# 测试连接
df = pro.trade_cal(exchange='SSE', start_date='20240101', end_date='20240110')
print(df)基础用法
1. 获取股票列表
import tushare as ts
pro = ts.pro_api('你的Token')
# 获取所有股票列表
df = pro.stock_basic(exchange='', list_status='L')
print(df.head())
# 获取上交所股票
df = pro.stock_basic(exchange='SSE', list_status='L')
print(df)
# 获取特定股票信息
df = pro.stock_basic(ts_code='600000.SH')
print(df)2. 获取日线行情
# 获取单只股票日线数据
df = pro.daily(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')
print(df)
# 获取多只股票日线数据
df = pro.daily(ts_code='000001.SZ,600000.SH',
start_date='20240101',
end_date='20240131')
print(df)
# 获取指定交易日数据
df = pro.daily(trade_date='20240101')
print(df)3. 获取复权因子
# 获取复权因子
df = pro.adj_factor(ts_code='000001.SZ',
start_date='20240101',
end_date='20240131')
print(df)4. 获取财务数据
# 获取利润表
df = pro.income(ts_code='000001.SZ',
period='2023',
report_type='1')
print(df)
# 获取资产负债表
df = pro.balancesheet(ts_code='000001.SZ',
period='2023',
report_type='1')
print(df)
# 获取现金流量表
df = pro.cashflow(ts_code='000001.SZ',
period='2023',
report_type='1')
print(df)
# 获取财务指标
df = pro.fina_indicator(ts_code='000001.SZ',
period='2023')
print(df)5. 获取指数数据
# 获取指数基础信息
df = pro.index_basic(market='SSE')
print(df)
# 获取指数行情
df = pro.index_daily(ts_code='000001.SH',
start_date='20240101',
end_date='20240131')
print(df)
# 获取上证指数
df = pro.index_daily(ts_code='000001.SH',
start_date='20240101',
end_date='20240131')
print(df)6. 获取交易日历
# 获取交易日历
df = pro.trade_cal(exchange='SSE',
start_date='20240101',
end_date='20240131')
print(df)
# 获取开市日期
df = pro.trade_cal(exchange='SSE',
start_date='20240101',
end_date='20240131',
is_open='1')
print(df)7. 获取宏观数据
# 获取 Shibor 数据
df = pro.shibor(start_date='20240101',
end_date='20240131')
print(df)
# 获取 Shibor 利率
df = pro.shibor_rate(start_date='20240101',
end_date='20240131')
print(df)常见问题
Q1: 认证失败怎么办?
可能原因: 1. Token 输入错误 2. Token 已过期 3. 账号未激活
解决方法:
- 检查 Token 是否正确复制
- 登录 Tushare 官网确认账号状态
- 重新生成 Token
Q2: 调用次数限制?
Tushare 对不同类型的账号有不同的调用限制:
- 免费账户:每分钟最多 120 次调用
- 付费账户:更高的调用限制
查看当前调用次数:
# 查看账户信息
# 需要根据 Tushare 官方提供的接口查询Q3: 数据为空或错误?
检查项: 1. 股票代码格式是否正确(XXXXXX.SH 或 XXXXXX.SZ) 2. 日期范围是否合理 3. 数据是否有延迟 4. 是否有权限访问该数据(部分数据需要付费)
Q4: 支持哪些市场?
- ✅ A 股(上海、深圳)
- ✅ 指数
- ✅ 基金
- ✅ 期货
- ✅ 期权(部分)
- ✅ 港股(部分)
- ✅ 宏观数据
Q5: 股票代码格式说明?
- 上海市场:
XXXXXX.SH(如 600000.SH) - 深圳市场:
XXXXXX.SZ(如 000001.SZ) - 北交所:
XXXXXX.BJ(如 832566.BJ)
Q6: 如何获取最新数据?
最新交易日数据:
# 获取最新交易日
import datetime
today = datetime.datetime.now().strftime('%Y%m%d')
df = pro.daily(trade_date=today)
print(df)Q7: 财务数据报告期说明?
财务数据支持多种报告期:
- 年报:
2023或202312 - 中报:
2023或202306 - 季报:
2023Q1、2023Q2、2023Q3、2023Q4
Q8: 如何提高数据获取效率?
- 使用批量接口一次获取多只股票
- 合理设置日期范围,避免一次性获取过多数据
- 使用本地缓存减少重复请求
- 优先获取需要的字段,减少数据传输量
Q9: Tushare Pro 社区版权限?
社区版(免费)权限:
- 每分钟 120 次调用
- 基础行情数据
- 财务数据(延迟)
- 指数数据
- 部分宏观数据
付费版本权限更高,详见 Tushare 官方文档。
Q10: 数据更新频率说明?
- 日线行情:T+1(交易日收盘后更新)
- 分钟线行情:需要付费权限
- 财务数据:根据财报发布时间更新
- 指数数据:实时或 T+1
- 宏观数据:根据发布时间更新
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
财务数据获取脚本
支持获取财务数据、利润表、资产负债表、现金流量表、财务指标
"""
import argparse
import json
import sys
import os
from datetime import datetime
def main():
parser = argparse.ArgumentParser(description='获取 Tushare 财务数据')
parser.add_argument('--type', required=True,
choices=['financial', 'income', 'balancesheet', 'cashflow', 'fina_indicator', 'fina_audit', 'fina_mainbz'],
help='数据类型: financial-财务数据, income-利润表, balancesheet-资产负债表, cashflow-现金流量表, fina_indicator-财务指标, fina_audit-审计意见, fina_mainbz-主营业务')
parser.add_argument('--ts_code', help='股票代码,格式: 000001.SZ 或 600000.SH,多个用逗号分隔')
parser.add_argument('--period', help='报告期,格式YYYY或YYYYMM,如 2023 或 202312')
parser.add_argument('--start_date', help='开始日期,格式YYYYMMDD')
parser.add_argument('--end_date', help='结束日期,格式YYYYMMDD')
parser.add_argument('--report_type', help='报告类型: 1-合并报表, 2-单季合并, 3-调整单季合并表, 4-调整合并报表, 5-调整前合并报表')
parser.add_argument('--fields', help='字段列表,逗号分隔')
args = parser.parse_args()
try:
# 获取凭证
credential = os.getenv(f"TUSHARE_TOKEN")
if not credential:
print(json.dumps({
'status': 'error',
'message': '缺少 Tushare Token 凭证配置,请先配置 TUSHARE_TOKEN 凭证'
}, ensure_ascii=False))
sys.exit(1)
import tushare as ts
# 初始化
pro = ts.pro_api(credential)
result = {
'status': 'success',
'data_type': args.type,
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.period:
params['period'] = args.period
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.report_type:
params['report_type'] = args.report_type
if args.fields:
params['fields'] = args.fields
if args.type == 'financial':
# 财务数据(旧接口)
data = pro.financial(**params)
elif args.type == 'income':
# 利润表
data = pro.income(**params)
elif args.type == 'balancesheet':
# 资产负债表
data = pro.balancesheet(**params)
elif args.type == 'cashflow':
# 现金流量表
data = pro.cashflow(**params)
elif args.type == 'fina_indicator':
# 财务指标
data = pro.fina_indicator(**params)
elif args.type == 'fina_audit':
# 审计意见
data = pro.fina_audit(**params)
elif args.type == 'fina_mainbz':
# 主营业务
data = pro.fina_mainbz(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
print(json.dumps(result, ensure_ascii=False, indent=2))
except ImportError:
print(json.dumps({
'status': 'error',
'message': 'tushare 库未安装,请先安装: pip install tushare'
}, ensure_ascii=False))
sys.exit(1)
except Exception as e:
print(json.dumps({
'status': 'error',
'message': str(e),
'error_type': type(e).__name__
}, ensure_ascii=False))
sys.exit(1)
if __name__ == '__main__':
main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
宏观数据与指数数据获取脚本
支持获取指数行情、指数基础信息、Shibor 利率等
"""
import argparse
import json
import sys
import os
from datetime import datetime
def main():
parser = argparse.ArgumentParser(description='获取 Tushare 指数与宏观数据')
parser.add_argument('--type', required=True,
choices=['index_daily', 'index_basic', 'index_classify', 'index_daily_basic', 'shibor', 'shibor_rate', 'shibor_quote'],
help='类型: index_daily-指数行情, index_basic-指数基础信息, index_classify-指数分类, index_daily_basic-指数每日指标, shibor-Shibor, shibor_rate-Shibor利率, shibor_quote-Shibor报价')
parser.add_argument('--ts_code', help='指数代码,格式: 000001.SH 或 399001.SZ')
parser.add_argument('--start_date', help='开始日期,格式YYYYMMDD')
parser.add_argument('--end_date', help='结束日期,格式YYYYMMDD')
parser.add_argument('--trade_date', help='交易日,格式YYYYMMDD')
parser.add_argument('--market', help='市场:主板/中小板/创业板/科创板等')
def main():
parser.add_argument('--level', help='级别: L1-大, L2-中, L3-小')
args = parser.parse_args()
try:
# 获取凭证
credential = os.getenv(f"TUSHARE_TOKEN")
if not credential:
print(json.dumps({
'status': 'error',
'message': '缺少 Tushare Token 凭证配置,请先配置 TUSHARE_TOKEN 凭证'
}, ensure_ascii=False))
sys.exit(1)
import tushare as ts
# 初始化
pro = ts.pro_api(credential)
result = {
'status': 'success',
'data_type': args.type,
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
params = {}
if args.type == 'index_daily':
# 指数行情
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
data = pro.index_daily(**params)
elif args.type == 'index_basic':
# 指数基础信息
if args.ts_code:
params['ts_code'] = args.ts_code
if args.market:
params['market'] = args.market
if args.level:
params['level'] = args.level
data = pro.index_basic(**params)
elif args.type == 'index_classify':
# 指数分类
if args.market:
params['market'] = args.market
if args.level:
params['level'] = args.level
data = pro.index_classify(**params)
elif args.type == 'index_daily_basic':
# 指数每日指标
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
data = pro.index_daily_basic(**params)
elif args.type == 'shibor':
# Shibor 数据
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
data = pro.shibor(**params)
elif args.type == 'shibor_rate':
# Shibor 利率
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
data = pro.shibor_rate(**params)
elif args.type == 'shibor_quote':
# Shibor 报价
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
data = pro.shibor_quote(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
print(json.dumps(result, ensure_ascii=False, indent=2))
except ImportError:
print(json.dumps({
'status': 'error',
'message': 'tushare 库未安装,请先安装: pip install tushare'
}, ensure_ascii=False))
sys.exit(1)
except Exception as e:
print(json.dumps({
'status': 'error',
'message': str(e),
'error_type': type(e).__name__
}, ensure_ascii=False))
sys.exit(1)
if __name__ == '__main__':
main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
行情数据获取脚本
支持获取日线行情、复权因子、分钟线数据
"""
import argparse
import json
import sys
import os
from datetime import datetime
def main():
parser = argparse.ArgumentParser(description='获取 Tushare 行情数据')
parser.add_argument('--type', required=True, choices=['daily', 'adj_factor', 'daily_basic', 'weekly', 'monthly'],
help='数据类型: daily-日线, adj_factor-复权因子, daily_basic-每日指标, weekly-周线, monthly-月线')
parser.add_argument('--ts_code', help='股票代码,格式: 000001.SZ 或 600000.SH,多个用逗号分隔')
parser.add_argument('--start_date', help='开始日期,格式YYYYMMDD,如 20240101')
parser.add_argument('--end_date', help='结束日期,格式YYYYMMDD,如 20240131')
parser.add_argument('--trade_date', help='交易日,格式YYYYMMDD,单日数据查询')
parser.add_argument('--fields', help='字段列表,逗号分隔,如 ts_code,trade_date,open,high,low,close,vol')
args = parser.parse_args()
try:
# 获取凭证
credential = os.getenv(f"TUSHARE_TOKEN")
if not credential:
print(json.dumps({
'status': 'error',
'message': '缺少 Tushare Token 凭证配置,请先配置 TUSHARE_TOKEN 凭证'
}, ensure_ascii=False))
sys.exit(1)
import tushare as ts
# 初始化
pro = ts.pro_api(credential)
result = {
'status': 'success',
'data_type': args.type,
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
if args.type == 'daily':
# 日线行情
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
if args.fields:
params['fields'] = args.fields
data = pro.daily(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
elif args.type == 'adj_factor':
# 复权因子
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
data = pro.adj_factor(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
elif args.type == 'daily_basic':
# 每日指标
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
if args.fields:
params['fields'] = args.fields
data = pro.daily_basic(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
elif args.type == 'weekly':
# 周线行情
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
if args.fields:
params['fields'] = args.fields
data = pro.weekly(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
elif args.type == 'monthly':
# 月线行情
params = {}
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.trade_date:
params['trade_date'] = args.trade_date
if args.fields:
params['fields'] = args.fields
data = pro.monthly(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
print(json.dumps(result, ensure_ascii=False, indent=2))
except ImportError:
print(json.dumps({
'status': 'error',
'message': 'tushare 库未安装,请先安装: pip install tushare'
}, ensure_ascii=False))
sys.exit(1)
except Exception as e:
print(json.dumps({
'status': 'error',
'message': str(e),
'error_type': type(e).__name__
}, ensure_ascii=False))
sys.exit(1)
if __name__ == '__main__':
main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
股票信息获取脚本
支持获取股票列表、交易日历、名称变更等
"""
import argparse
import json
import sys
import os
from datetime import datetime
def main():
parser = argparse.ArgumentParser(description='获取 Tushare 股票信息')
parser.add_argument('--type', required=True, choices=['stock_basic', 'trade_cal', 'namechange', 'trade_cal_ext', 'suspend'],
help='类型: stock_basic-股票列表, trade_cal-交易日历, namechange-名称变更, trade_cal_ext-交易日历扩展, suspend-停牌信息')
parser.add_argument('--ts_code', help='股票代码,格式: 000001.SZ 或 600000.SH')
parser.add_argument('--list_status', help='股票状态: L-上市, D-退市, P-暂停上市')
parser.add_argument('--exchange', help='交易所: SSE-上交所, SZSE-深交所')
parser.add_argument('--start_date', help='开始日期,格式YYYYMMDD')
parser.add_argument('--end_date', help='结束日期,格式YYYYMMDD')
parser.add_argument('--exchange_id', help='交易所ID: SSE-上交所, SZSE-深交所')
parser.add_argument('--is_open', help='是否开市: 0-休市, 1-开市')
args = parser.parse_args()
try:
# 获取凭证
credential = os.getenv(f"TUSHARE_TOKEN")
if not credential:
print(json.dumps({
'status': 'error',
'message': '缺少 Tushare Token 凭证配置,请先配置 TUSHARE_TOKEN 凭证'
}, ensure_ascii=False))
sys.exit(1)
import tushare as ts
# 初始化
pro = ts.pro_api(credential)
result = {
'status': 'success',
'data_type': args.type,
'timestamp': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
}
params = {}
if args.type == 'stock_basic':
# 股票列表
if args.ts_code:
params['ts_code'] = args.ts_code
if args.list_status:
params['list_status'] = args.list_status
if args.exchange:
params['exchange'] = args.exchange
data = pro.stock_basic(**params)
elif args.type == 'trade_cal':
# 交易日历
if args.exchange_id:
params['exchange'] = args.exchange_id
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.is_open:
params['is_open'] = args.is_open
data = pro.trade_cal(**params)
elif args.type == 'namechange':
# 名称变更
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
data = pro.namechange(**params)
elif args.type == 'trade_cal_ext':
# 交易日历扩展
if args.exchange_id:
params['exchange'] = args.exchange_id
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
if args.is_open:
params['is_open'] = args.is_open
data = pro.trade_cal_ext(**params)
elif args.type == 'suspend':
# 停牌信息
if args.ts_code:
params['ts_code'] = args.ts_code
if args.start_date:
params['start_date'] = args.start_date
if args.end_date:
params['end_date'] = args.end_date
data = pro.suspend(**params)
if data is not None and not data.empty:
result['data'] = data.to_dict('records')
result['count'] = len(data)
else:
result['data'] = []
result['count'] = 0
print(json.dumps(result, ensure_ascii=False, indent=2))
except ImportError:
print(json.dumps({
'status': 'error',
'message': 'tushare 库未安装,请先安装: pip install tushare'
}, ensure_ascii=False))
sys.exit(1)
except Exception as e:
print(json.dumps({
'status': 'error',
'message': str(e),
'error_type': type(e).__name__
}, ensure_ascii=False))
sys.exit(1)
if __name__ == '__main__':
main()