rustdx-complete 1.0.0

功能完整的 A 股数据获取库,支持数据验证、技术指标、智能缓存、交易日历
# 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://img.shields.io/crates/d/rustdx.svg?label=downloads+rustdx&style=social)](https://crates.io/crates/rustdx)
[![](https://img.shields.io/crates/dv/rustdx.svg?label=downloads@latest+rustdx&style=social)](https://crates.io/crates/rustdx)
[![](https://img.shields.io/crates/d/rustdx-cmd.svg?label=downloads+rustdx-cmd&style=social)](https://crates.io/crates/rustdx-cmd)
[![](https://img.shields.io/crates/dv/rustdx-cmd.svg?label=downloads@latest+rustdx-cmd&style=social)](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 股数据获取库** 🚀