Skip to content

magicliang/futu_tax_calculator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

富途税务计算器

一个用于计算富途证券交易税务的 Python 工具,支持股票和期权交易的税务计算,使用移动加权平均算法计算成本基础。

⚠️ 重要说明:RSU解禁股票税务处理

RSU股票税务原则

公司解禁RSU股票的税务处理有特殊规定:

  1. 成本计算原则: RSU股票交易与普通股票交易合并计算,使用移动加权平均算法统一核算成本价
  2. 分红分离原则: 股票交易盈亏与股息分红分开计算,盈亏不能互相抵消
  3. 双重税务责任:
    • 授予时: 按行权日收市价计算个人所得税(公司代扣代缴)
    • 卖出时: 如卖出价格高于行权日收市价,差价部分需自行申报缴纳20%个人所得税

计算示例

场景:2024年1月15日授予100股,行权日收市价$150
     2024年2月10日普通买入100股@$160
     2024年3月20日卖出150股@$180

计算:
- RSU授予成本: $150/股 × 100股 = $15000
- 普通买入成本: $160/股 × 100股 = $16000  
- 移动加权平均成本: ($15000 + $16000) ÷ 200股 = $155/股
- 卖出150股盈利: ($180 - $155) × 150股 = $3750

脚本处理:
- 在futu_rsu_history.csv中记录授予($150)
- 系统将RSU与普通交易合并,按移动加权平均算法计算统一成本价
- 生成包含所有股票交易的综合税务报告

🚀 快速开始

环境准备

# 1. 创建虚拟环境
python3 -m venv venv

# 2. 激活虚拟环境
source venv/bin/activate

# 3. 安装依赖
pip install -r requirements.txt

基本使用流程

  1. 配置富途API → 2. 下载交易数据 → 3. 计算税务 → 4. 查看报告

FutuApi准备

下载地址在这个文档里 https://openapi.futunn.com/futu-api-doc/opend/opend-cmd.html

如果访问不了,记得翻墙切全局 非大陆 IP

可直接下载 MacOs 的 版本

这里以 MacOsGUI 版本为例,下载后解压缩,打开Futu_OpenD-GUI_9.4.5418_Mac,里面安装 DMG,然后默认登录,首次设备需短信验证

滞纳金汇率说明

涉及美股滞纳金,汇率以当年最后一个工作日查询汇率 可以在官方汇率网站查询 如果 12.31 号不是工作日,则往前找最后一个工作日

http://m.safe.gov.cn/safe/rmbhlzjj/index.html#

下载股息和股息税数据

# 下载股息和股息税数据(耗时可能需要约2小时)
python futu/download_cash_flow.py 
默认股息流水路径是 data/futu_cash_flow.csv

特别说明

  • 这个 csv 包含了默认 3 年前所有股息&股息税流水,打开 csv 文件自行过滤年份&货币统计每年股息
  • 港股只有股息,没有股息税,
  • 美股有点特殊,流水里包含有-10% 扣掉的股息税

下载&统计股票、期权盈利

# 步骤1: 下载交易数据
python futu/download_history_flow.py

# 步骤2: 计算税务并生成报告
python tax/stock_option_tax_calculator.py

# 步骤3: 查看生成的报告
ls 税务报告/

RSU数据配置(必需,如有RSU交易)

如有公司解禁股票交易,必须data/ 目录下创建 futu_rsu_history.csv记录特殊说明

  • 授予记录,也就是 buy 这条记录,所有券商,例如Futu 及中银国际都需要填写,没法通过 Api 获取
  • 卖出记录,也就是 sell 这条记录,
    • 如果是 Futu,无需填写,可通过脚本自动获取
    • 其他券商卖出,例如中银国际则需要手动填写,没法通过 Api 获取

填写要求:

  • 股票代码(非我司 查询 Futu 股票代号): 固定 HK.00700,
  • 数量及成交价格: 查询 公司解禁页面
  • 买卖方向: 授予填 buy, 卖出则是 sell
  • 结算币种:固定 HKD
  • 合计手续费:富途卖出无需填写,可自动获取,中银国际需要自己填卖出
  • 交易时间(参考, 你改日期就行):2025/7/23 17:00

示例:

股票代码,数量,成交价格,买卖方向,结算币种,合计手续费,交易时间
HK.00700,100,150.00,buy,HKD,0.00,2024-01-15 09:30:00
HK.00700,50,180.00,sell,HKD,0.50,2024-03-20 14:30:00
HK.00700,50,175.00,sell,HKD,0.50,2024-04-10 11:15:00

注意 :

  • 在你所属公司授予记录里有所有包括中银及富途的授予记录,里面有授予日的成本价,我们计算增值盈利需要基于这个成本价 合并计算,否则就会出现
  • 富途无法获取授予记录,但可以自动获取卖出记录及手续费
  • 其他券商请手动登记买入及卖出记录 配置好后重新计算税务报告即可,无需重新下载数据
# 计算税务并生成报告
python tax/stock_option_tax_calculator.py

环境配置特殊说明

如果你是在本机运行,而且没有更改 FutuOpenD 端口,则忽略此环境配置

如果你不是本地运行 FutuOpenD,
记得添加 .env 文件,里面编辑,

FUTU_ADDRESS=127.0.0.1
FUTU_PORT=11111
FUTU_ENV=REAL
# 如果非本地连接,需配置RSA密钥路径
# FUTU_RSA=path/to/your/rsa/key

📊 支持的交易场景

✅ 股票交易

  • 同年完整买卖交易
  • 跨年部分卖出
  • 当年买次年卖
  • 复杂交易场景
  • ⚠️ 仅卖出无买入(标记需人工核查)
  • ⚠️ 卖空股票(标记需人工核查)

✅ 期权交易

  • 期权做多/做空(同年/跨年)
  • 期权到期处理(作废/获利)
  • 复杂混合交易场景
  • 100倍合约乘数自动处理

✅ 特殊场景

  • 股票期权混合交易
  • RSU解禁股票处理
  • 多币种交易(USD/HKD)
  • 无效数据容错处理

❌ 暂不支持

  • 长桥平台(需额外配置)
  • 轮证、涡轮、期货
  • 公司解禁的期权(不了解)

📋 详细使用指南

1. 富途API配置

环境配置

  1. 安装富途OpenD网关并启动,确保本地11111端口可用
  2. 如需跨网非本地访问配置:参考富途OpenAPI文档设置私钥(需翻墙访问)
  3. 创建配置文件:在项目根目录新建 .env 文件:
# 富途API配置
FUTU_ADDRESS=127.0.0.1
FUTU_PORT=11111
FUTU_ENV=REAL
# 如果非本地连接,需配置RSA密钥路径
# FUTU_RSA=path/to/your/rsa/key

2. 数据下载

交易数据下载

# 下载历史成交订单(耗时约10-30分钟)
python futu/download_history_flow.py
# 生成文件: data/futu_history.csv

股息数据下载(可选)

# 下载股息和股息税数据(耗时约2小时)
python futu/download_cash_flow.py  
# 生成文件: data/futu_cash_flow.csv

RSU数据配置(必需,如有RSU交易)

如有公司解禁股票交易,必须data/ 目录下创建 futu_rsu_history.csv

股票代码,数量,成交价格,买卖方向,结算币种,合计手续费,交易时间
US.AAPL,100,150.00,buy,USD,0.00,2024-01-15 09:30:00
US.AAPL,50,180.00,sell,USD,0.50,2024-03-20 14:30:00
US.AAPL,50,175.00,sell,USD,0.50,2024-04-10 11:15:00

配置说明

  • buy记录: 使用行权日收市价,手续费填0
  • sell记录: 使用实际卖出价格和手续费
  • 数据来源: 授予价格查公司解禁页面,卖出记录需手动添加
  • 计算逻辑: 系统将RSU交易与普通股票交易合并,使用移动加权平均算法统一计算成本价

3. 税务计算

基本计算

# 使用默认配置计算税务
python tax/stock_option_tax_calculator.py

# 自定义输入输出路径
python tax/stock_option_tax_calculator.py --input data/my_trades.csv --output my_reports/

验证计算结果

# 运行测试用例验证算法正确性
python tax/test_calculator.py

4. 查看报告

生成的报告位于 税务报告/ 目录:

  • 2024_report.csv - 2024年度税务报告
  • 2023_report.csv - 2023年度税务报告
  • 按币种分别汇总年度盈亏

🔧 高级配置

数据格式说明

股票代码,数量,成交价格,买卖方向,结算币种,合计手续费,交易时间
US.AAPL,100,150.00,buy,USD,1.00,2024-01-15 09:30:00
US.AAPL240315C160000,1,5.50,sell,USD,0.65,2024-03-01 15:30:00

期权代码格式

  • 格式:US.{股票代码}{到期日YYMMDD}{C/P}{行权价}
  • 示例:US.AAPL240315C160000 = 苹果2024年3月15日到期160美元看涨期权

📚 技术原理

移动加权平均算法

  • 买入时: 买入成本 = 价格 × 数量 + 手续费
  • 平均成本: (原持仓成本 + 新买入成本) ÷ 总持仓数量
  • 卖出时: 盈亏 = (卖出价格 × 数量 - 手续费) - (平均成本 × 数量)

算法示例

买入100股@$10,手续费$1 → 总成本$1001,平均成本$10.01
买入200股@$15,手续费$2 → 总成本$3002,平均成本$13.34
卖出150股@$20,手续费$1.5 → 盈利$998.5,剩余150股@$13.34

🧪 测试验证

测试用例覆盖

项目包含15个完整测试场景,确保计算准确性:

场景类型 测试用例 验证重点
股票交易 01-05 同年交易、跨年交易、复杂场景
期权交易 06-13 做多做空、到期处理、复杂场景
综合场景 14-15 混合交易、异常数据处理

运行测试

# 运行所有测试用例
python tax/test_calculator.py

# 查看测试结果
✅ 验证通过: 2024_report.csv 与 test_data_2024.csv 一致
🎉 所有测试用例均已通过!

📁 项目结构

futu_tax_calculator/
├── 📂 data/                    # 数据文件
│   ├── futu_history.csv       # 标准化交易数据  
│   ├── futu_cash_flow.csv     # 股息现金流数据
│   └── futu_rsu_history.csv   # RSU解禁数据(可选)
├── 📂 futu/                    # 数据获取模块
│   ├── download_history_flow.py
│   └── download_cash_flow.py
├── 📂 tax/                     # 税务计算模块
│   ├── stock_option_tax_calculator.py
│   └── test_calculator.py
├── 📂 test_data/               # 测试用例(15个场景)
├── 📂 税务报告/                # 生成的年度报告
├── requirements.txt            # Python依赖
└── ReadMe.md                  # 项目文档

❓ 常见问题

Q: 富途API连接失败?

A: 确保FutuOpenD已启动,端口11111可用,检查.env配置文件

Q: 期权价格计算不对?

A: 期权自动乘以100倍合约乘数,无需手动调整

Q: 跨年交易如何处理?

A: 盈利计入卖出年度,成本基础自动结转到下一年

Q: 如何处理RSU解禁股票?

A: 创建futu_rsu_history.csv文件,手动添加授予和卖出记录

Q: 如何支持长桥平台?

A: 如需支持长桥平台,可参考 stock_tax_calculator 项目的实现方式

📄 许可证

MIT License - 详见 LICENSE 文件

🙏 致谢

感谢 stock_tax_calculator 项目,为 Futu 拉取流水订单提供了启发。

🏗️ 核心模块详解

数据获取模块 (futu/)

  • download_history_flow.py: 批量下载交易订单,支持多账户和限流保护

    • 连接管理:支持本地和远程富途OpenD网关
    • 批量下载:按3个月为批次分段下载,避免API限制
    • 费用查询:自动批量查询订单手续费信息
    • 限流保护:内置请求频率限制器(30秒内最多9次请求)
  • download_cash_flow.py: 下载股息数据,自动识别USD/HKD股息和税费

    • 股息识别:自动识别美股股息和股息税
    • 港股支持:识别港股现金种子分红
    • 去重处理:基于cashflow_id自动去除重复记录

税务计算模块 (tax/)

  • stock_option_tax_calculator.py: 核心计算引擎,支持股票期权混合计算

    • 移动加权平均:买入时更新平均成本,卖出时按平均成本计算盈亏
    • 期权处理:支持做多/做空双向交易,100倍合约乘数计算
    • 跨年处理:盈利计入卖出年度,成本基础正确结转
  • test_calculator.py: 自动化测试框架,15个场景验证计算准确性

    • 用例发现:自动遍历test_data/下所有测试用例
    • 结果对比:基于股票代码和时间创建唯一键进行匹配
    • 测试验证:输出详细的通过/失败信息

特殊处理逻辑

  • 期权处理: 100倍合约乘数,支持做多做空,自动处理到期
  • 异常处理: 智能标记无买入记录、卖超持仓等异常情况
  • 跨年处理: 盈利计入卖出年度,成本基础正确结转

富途API详细配置说明

  • 重要提醒: 富途已退出大陆运营,文档地址需翻墙访问,IP不可为中国大陆
  • 端口配置: 默认11111端口,可根据实际情况在.env中调整
  • 跨网设置: 非本地连接需配置RSA密钥路径

股息数据特殊说明

  • 查询限制: 只支持逐日查询,30秒内最多20次请求
  • 识别规则:
    • USD: cashflow_remark包含"SHARES DIVIDENDS"或"SHARES WITHHOLDING TAX"
    • HKD: cashflow_type为"现金种子"
  • 耗时预估: 查询2022-2024年数据约需2小时

RSU解禁股票处理

  • 手动配置: 需在data目录下创建futu_rsu_history.csv
  • 数据来源: 公司解禁页面查看授予价格和记录
  • 平台限制: 中银国际无API,需手动添加卖出记录

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%