Files
mt5-rs/README_CN.md
T

136 lines
3.9 KiB
Markdown
Raw Normal View History

2026-05-17 11:26:45 +08:00
# mt5-rs
纯 Rust 实现的 MetaTrader 5 IPC 通信库,无需 Python 依赖。
与 Python `MetaTrader5` 库 API 完全兼容。
## 特性
- 纯 Rust 实现,无 Python 或 C++ 依赖
- 通过 Windows 命名管道与 MT5 终端进行 IPC 通信
- 与 Python `MetaTrader5` 库完全兼容(32个函数中的30个)
- 支持 MT5 Build 5836+
## 快速开始
```rust
use mt5_rs::{Mt5Client, discover_mt5_pipe};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 自动发现 MT5 管道
let pipe_name = discover_mt5_pipe();
// 初始化客户端
let mut client = Mt5Client::new();
client.initialize(Some(&pipe_name))?;
// 获取账户信息
let account = client.account_info()?;
println!("Balance: {}", account.balance);
println!("Equity: {}", account.equity);
println!("Margin Free: {}", account.margin_free);
Ok(())
}
```
## API 参考
### 初始化
| 函数 | 描述 |
|------|------|
| `Mt5Client::new()` | 创建新客户端 |
| `initialize(pipe_name)` | 初始化与 MT5 的连接 |
| `shutdown()` | 关闭连接 |
| `login(login, password, server)` | 登录 MT5 账户 |
### 账户与终端
| 函数 | 描述 |
|------|------|
| `account_info()` | 获取账户信息 |
| `terminal_info()` | 获取终端信息 |
| `version()` | 获取 MT5 版本 |
| `last_error()` | 获取最后错误代码和消息 |
### 交易品种
| 函数 | 描述 |
|------|------|
| `symbol_info(symbol)` | 获取品种信息 |
| `symbol_info_tick(symbol)` | 获取品种当前报价 |
| `symbols_get()` | 获取所有可用品种 |
| `symbol_select(symbol, enable)` | 在市场报价中选择/取消选择品种 |
### 行情数据
| 函数 | 描述 |
|------|------|
| `copy_rates_from_pos(symbol, timeframe, start_pos, count)` | 从指定位置复制K线 |
| `copy_rates_from(symbol, timeframe, date_from, count)` | 从指定日期复制K线 |
| `copy_rates_range(symbol, timeframe, date_from, date_to)` | 复制指定范围的K线 |
| `copy_ticks_from(symbol, from, count, flags)` | 从指定时间复制Tick |
| `copy_ticks_range(symbol, from, to, flags)` | 复制指定范围的Tick |
### 持仓与订单
| 函数 | 描述 |
|------|------|
| `positions_total()` | 获取未平仓持仓总数 |
| `positions_get(symbol)` | 获取未平仓持仓 |
| `orders_total()` | 获取挂单总数 |
| `orders_get(symbol)` | 获取挂单 |
### 历史数据
| 函数 | 描述 |
|------|------|
| `history_deals_total(from, to)` | 获取指定范围内成交总数 |
| `history_deals_get(from, to)` | 获取指定范围内成交记录 |
| `history_orders_total(from, to)` | 获取指定范围内订单总数 |
| `history_orders_get(from, to)` | 获取指定范围内订单记录 |
### 市场深度
| 函数 | 描述 |
|------|------|
| `market_book_add(symbol)` | 订阅市场深度 |
| `market_book_get(symbol)` | 获取市场深度数据 |
| `market_book_release(symbol)` | 取消订阅市场深度 |
### 交易计算
| 函数 | 描述 |
|------|------|
| `order_calc_margin(action, symbol, volume, price)` | 计算所需保证金(本地计算) |
| `order_calc_profit(action, symbol, volume, price_open, price_close)` | 计算预期利润(本地计算) |
### 未实现
| 函数 | 状态 |
|------|------|
| `order_check(request)` | TODO - 检查交易请求有效性 |
| `order_send(request)` | TODO - 发送交易请求到 MT5 |
## 实现说明
### `order_calc_margin` 和 `order_calc_profit` 的本地计算
与通过命名管道发送命令 202/203 的 `go-mt5` 不同,本库使用**本地计算**(与 Python `MetaTrader5` 库行为一致):
- `order_calc_margin`: `margin = volume × price × margin_initial / 4`
- `order_calc_profit`: `profit = volume × (price_close - price_open) × trade_contract_size`
此方法避免了 MT5 Build 5836+ 使用 IPC 执行这些命令时的"管道已关闭"错误。
## 系统要求
- Rust 2021 edition
- Windows 操作系统(命名管道 IPC 仅限 Windows
- MT5 终端必须正在运行
## 许可证
MIT