# rustdx
> **⚠️ 网络连接问题?** 请查看 [网络连接说明指南](#-网络连接说明) 或运行 `./scripts/diagnose_network.sh` 诊断
[<img alt="github" src="https://img.shields.io/github/license/zjp-CN/rustdx?color=blue" height="20">](https://github.com/zjp-CN/rustdx)
[<img alt="github" src="https://img.shields.io/github/issues/zjp-CN/rustdx?color=db2043" height="20">](https://github.com/zjp-CN/rustdx/issues)
[<img alt="crates.io" src="https://img.shields.io/crates/v/rustdx-complete?style=flat&color=fc8d62&logo=rust&label=rustdx-complete" height="20">](https://crates.io/crates/rustdx-complete)
[<img alt="crates.io" src="https://img.shields.io/crates/v/rustdx-complete/1.0.0?style=flat&color=green&logo=rust&logoColor=white&label=v1.0.0" height="20">](https://crates.io/crates/rustdx-complete)
[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-rustdx-66c2a5?style=flat&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS05LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" height="20">](https://docs.rs/rustdx)
[<img alt="crates.io" src="https://img.shields.io/crates/v/rustdx-cmd?style=flat&color=fc8d62&logo=rust&label=rustdx-cmd" height="20">](https://crates.io/crates/rustdx-cmd)
[<img alt="build status" src="https://github.com/zjp-CN/rustdx/workflows/Release%20CI/badge.svg" height="20">](https://github.com/zjp-CN/rustdx/actions)
[](https://crates.io/crates/rustdx)
[](https://crates.io/crates/rustdx)
[](https://crates.io/crates/rustdx-cmd)
[](https://crates.io/crates/rustdx-cmd)
受 [pytdx](https://pypi.org/project/pytdx/1.28) 启发的 A 股数据获取工具,包含:
1. 一个 Rust 通用库 [rustdx-complete](https://crates.io/crates/rustdx-complete);
2. 一个命令行工具 [rustdx-cmd](https://crates.io/crates/rustdx-cmd)。
---
## 🎉 v1.0.0 重大更新 (2025-01-06)
### ✨ 企业级功能完整版
rustdx 现已升级为**功能完整的企业级A股数据获取库**,在保持原有核心功能的基础上,新增了大量企业级特性:
#### 📊 P0 核心功能
| 功能 | 模块 | 说明 | 测试 |
|------|------|------|------|
| **数据完整性验证** | `validator` | K线连续性、财务一致性、异常检测 | ✅ 12个测试 |
| **技术指标计算** | `indicators` | SMA/EMA/MACD/RSI/布林带/KDJ | ✅ 9个测试 |
| **智能缓存层** | `cache` | 内存缓存、文件缓存、TTL自动过期 | ✅ 8个测试 |
| **增强错误处理** | `error` | 分层错误类型、详细错误信息 | ✅ 6个测试 |
#### 🚀 P1 增强功能
| 功能 | 模块 | 说明 | 测试 |
|------|------|------|------|
| **中国A股交易日历** | `calendar` | 零网络依赖、自动节假日和调休 | ✅ 8个测试 |
| **Builder 模式 API** | `builder` | 流畅链式调用、参数验证 | ✅ 7个测试 |
| **TCP 连接池** | `pool` | 连接复用、性能优化、线程安全 | ✅ 7个测试 |
#### 📈 测试覆盖
- **总测试数**: 94个 (✅ 100% 通过)
- **代码覆盖率**: 核心模块 100%
- **示例程序**: 6个完整示例
---
## 🌟 核心特性
### 1️⃣ 数据完整性验证
```rust
use rustdx_complete::tcp::stock::validator;
// 验证K线数据连续性
let result = validate_kline_continuity(&data, "600000");
// 检测异常数据
let anomalies = detect_anomalies(&data, 0.10); // 10%阈值
```
### 2️⃣ 技术指标计算
```rust
use rustdx_complete::indicators::{sma, ema, macd, rsi, bollinger_bands};
// 计算移动平均线
let sma20 = sma(&closes, 20);
// 计算MACD
let macd_result = macd(&closes, 12, 26, 9);
// 计算布林带
let bb = bollinger_bands(&closes, 20, 2.0);
```
### 3️⃣ 智能缓存层
```rust
use rustdx_complete::cache::Cache;
use std::time::Duration;
// 创建内存缓存(5分钟TTL)
let cache = Cache::memory(Duration::from_secs(300));
// 自动缓存-回源模式
let data = cache.get_or_fetch("kline:600000", || {
// 只在缓存未命中时执行
fetch_from_server()
});
```
### 4️⃣ 增强错误处理
```rust
use rustdx_complete::error::{TcpError, ValidationError};
// 分层错误类型
match tcp_connection() {
Ok(data) => Ok(data),
Err(e) => Err(TcpError::ConnectionFailed {
host: "server".to_string(),
port: 7709,
reason: e.to_string(),
}),
}
```
### 5️⃣ 中国A股交易日历
```rust
use rustdx_complete::calendar::TradingCalendar;
// 判断是否交易日
let is_trading = TradingCalendar::is_trading_day(&date);
// 获取前一个交易日
let prev = TradingCalendar::previous_trading_day(&date);
// 获取最近N个交易日
let days = TradingCalendar::get_trading_days(&date, 10);
```
### 6️⃣ Builder 模式 API
```rust
use rustdx_complete::builder::KlineBuilder;
// 流畅的链式调用
let kline = KlineBuilder::new()
.code("600000")
.category(9) // 日线
.count(100)
.build()?;
// 或使用便捷方法
let kline = KlineBuilder::daily("600000", 100)?;
```
### 7️⃣ TCP 连接池
```rust
use rustdx_complete::pool::ConnectionPool;
// 创建连接池(最大3个连接)
let pool = ConnectionPool::new(3)?;
// 获取连接(自动复用)
let mut conn = pool.get_connection()?;
// 连接自动归还到池中
```
---
## 📦 快速开始
### 安装
```bash
# Cargo.toml
[dependencies]
rustdx-complete = "1.0"
```
### 基础使用
```rust
use rustdx_complete::tcp::{Tcp, Tdx};
use rustdx_complete::tcp::stock::Kline;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 连接到通达信服务器
let mut tcp = Tcp::new()?;
// 获取K线数据
let mut kline = Kline::new(1, "600000", 9, 0, 10);
kline.recv_parsed(&mut tcp)?;
// 打印结果
for bar in kline.result() {
println!("{}: 收盘价 {:.2}", bar.dt, bar.close);
}
Ok(())
}
```
### 使用 Builder 模式
```rust
use rustdx_complete::builder::KlineBuilder;
let kline = KlineBuilder::daily("600000", 100)?;
kline.recv_parsed(&mut tcp)?;
```
### 使用连接池
```rust
use rustdx_complete::pool::ConnectionPool;
let pool = ConnectionPool::new(3)?;
let mut conn = pool.get_connection()?;
// 使用conn执行查询...
```
---
## 📚 完整功能列表
### 原有核心功能
| 功能 | 模块 | pytdx 对应 |
|------|------|-----------|
| 日K线 | `Kline` | `get_security_bars` |
| 除权数据 | `Xdxr` | `get_xdxr` |
| 实时行情 | `SecurityQuotes` | `get_security_quotes` |
| 股票列表 | `SecurityList` | `get_security_list` |
| 分时数据 | `MinuteTime` | `get_minute_time_data` |
| 逐笔成交 | `Transaction` | `get_transaction_data` |
| 财务信息 | `FinanceInfo` | `get_finance_info` |
### 新增功能 (v1.0)
| 类别 | 功能 | 说明 |
|------|------|------|
| **数据质量** | K线连续性验证 | 检测缺失交易日 |
| | 财务数据一致性 | 验证基本面数据合理性 |
| | 异常数据检测 | 识别价格异常波动 |
| **技术分析** | 移动平均线 (SMA/EMA) | 趋势分析 |
| | MACD 指标 | 动量分析 |
| | RSI 相对强弱 | 超买超卖 |
| | 布林带 | 波动率分析 |
| | KDJ 随机指标 | 短期买卖点 |
| **性能优化** | 内存缓存 | 快速数据访问 |
| | 文件缓存 | 持久化存储 |
| | get_or_fetch 模式 | 自动缓存管理 |
| **连接管理** | TCP连接池 | 复用连接 |
| | 自动归还 | Drop trait管理 |
| | 健康检查 | 自动清理过期连接 |
| **开发体验** | Builder模式 | 流畅API |
| | 增强错误处理 | 详细错误信息 |
| | 交易日历 | 自动节假日识别 |
| **代码质量** | 94个单元测试 | 100%通过 |
| | 完整文档注释 | docs.rs自动生成 |
| | 6个示例程序 | 覆盖所有功能 |
---
## 📝 示例程序
| 示例 | 功能 |
|------|------|
| `test_technical_indicators` | 技术指标计算 |
| `test_data_validation` | 数据完整性验证 |
| `test_cache` | 智能缓存使用 |
| `test_error_handling` | 错误处理演示 |
| `test_trading_calendar` | 交易日历查询 |
| `test_builder` | Builder模式API |
| `test_connection_pool` | TCP连接池 |
运行示例:
```bash
cargo run --example test_technical_indicators
```
---
## 🌐 网络连接说明
> **重要**: rustdx-complete 不需要在本地运行通达信服务!
### 工作原理
```
你的应用
↓
rustdx-complete (TCP 客户端)
↓
通达信公共服务器 (115.238.56.198:7709)
↓
返回股票数据
```
### 快速测试
```bash
# 测试网络连接
cargo run --example test_connection
# 运行诊断脚本
./scripts/diagnose_network.sh
```
📚 **详细文档**: [NETWORK_CONNECTION_GUIDE.md](NETWORK_CONNECTION_GUIDE.md)
---
## 🚀 性能优化
1. **使用连接池**
- 复用TCP连接,减少握手开销
- 默认3个连接,适合大多数场景
2. **启用缓存**
- 实时行情数据:3-5分钟TTL
- 日线数据:1小时TTL
- 财务数据:1天TTL
3. **批量查询**
- 一次查询多只股票,而非逐个查询
- 建议不超过80只股票/次
4. **使用 release 模式**
```bash
cargo run --release
```
---
## 📖 API 文档
- **docs.rs**: https://docs.rs/rustdx-complete
- **crates.io**: https://crates.io/crates/rustdx-complete
---
## 🤝 贡献指南
欢迎贡献代码、报告问题或提出建议!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
---
## 🙏 致谢
- [pytdx](https://pypi.org/project/pytdx/) - Python 版本的通达信接口
- 通达信 - 提供数据服务器
- [trade_date_a](https://crates.io/crates/trade_date_a) - 中国交易日历数据
---
## 📊 版本历史
详细更新记录请查看 [CHANGELOG.md](CHANGELOG.md)
### v1.0.0 (2025-01-06) - 🎉 企业级完整版
- ✅ 新增数据完整性验证模块
- ✅ 新增技术指标计算库
- ✅ 新增智能缓存层
- ✅ 新增增强错误处理系统
- ✅ 新增中国A股交易日历
- ✅ 新增Builder模式API
- ✅ 新增TCP连接池
- ✅ 94个单元测试全部通过
- ✅ 6个完整示例程序
### v0.6.6 (2025-12-31) - 行业和概念板块
- 股票行业分类映射
- 东方财富概念板块支持
### v0.6.4 (2025-12-31) - 完整五档买卖盘
- 补充 SecurityQuotes 完整五档买卖盘字段
---
**rustdx - 功能完整的企业级 A 股数据获取库** 🚀