feat(main): load trades form json, imporve LIMIT LIMIT_MAKER order handling

- Read trading instructions from JSON configuration file
- Support executing multiple trades by date (* means executing daily)
- Automatically fetch real-time price as the limit price when no price is provided
- For LIMIT, LIMIT_MAKER orders, support providing only quoteOrderQty to automatically calculate the quantity
This commit is contained in:
2025-07-15 20:38:52 +08:00
parent d918cc2d9f
commit 1c3ca56823
3 changed files with 451 additions and 26 deletions

197
README.md Normal file
View File

@@ -0,0 +1,197 @@
# MEXC 交易机器人
## 项目简介
MEXC 交易机器人是一个自动化交易工具,用于在 MEXC 交易所执行现货交易。它通过 JSON 配置文件管理交易指令,支持多种订单类型,并自动记录交易日志。
## 主要功能
1. **配置文件管理**:从 JSON 文件读取交易指令
2. **灵活调度**:支持按日期执行交易(`*`表示每天执行)
3. **多种订单类型**:支持 LIMIT、MARKET、LIMIT_MAKER、IMMEDIATE_OR_CANCEL、FILL_OR_KILL 等订单类型
4. **智能价格获取**:当无 price 参数时自动获取实时价格作为限价
5. **自动计算数量**LIMIT 订单支持只提供 quoteOrderQty 自动计算 quantity
6. **证券代码映射**:支持不同代码格式间的转换
7. **完整交易记录**:记录交易到 CSV 文件和日志
## 安装与使用
1. 创建配置文件`trading_config.json`
2. 运行程序:
```bash
python main.py
```
## 配置文件
### 配置文件结构
配置文件采用 JSON 格式,命名为`trading_config.json`,基本结构如下:
```json
{
"trades": [
{
"symbol": "BTCUSDT",
"order_type": "LIMIT",
"side": "BUY",
"execute_dates": ["*"],
"params": {
"quoteOrderQty": "100",
"price": "50000"
}
}
]
}
```
### 配置字段详解
#### 1. 交易列表 (`trades`)
- 类型:数组
- 描述:包含所有交易指令的列表
- 每个交易指令是一个包含以下字段的对象:
#### 2. 交易对 (`symbol`)
- 类型:字符串
- 必填:是
- 示例:`"BTCUSDT"`
- 描述:要交易的货币对,如 BTC/USDT
#### 3. 订单类型 (`order_type`)
- 类型:字符串
- 必填:是
- 可选值:
- `"LIMIT"`:限价单
- `"MARKET"`:市价单
- `"LIMIT_MAKER"`:限价做市单
- `"IMMEDIATE_OR_CANCEL"`:立即成交或取消
- `"FILL_OR_KILL"`:全部成交或取消
#### 4. 交易方向 (`side`)
- 类型:字符串
- 必填:是
- 可选值:
- `"BUY"`:买入
- `"SELL"`:卖出
#### 5. 执行日期 (`execute_dates`)
- 类型:数组
- 必填:是
- 特殊值:
- `"*"`:表示每天执行
- 示例:
- `["2023-01-01", "2023-01-15"]`:仅在指定日期执行
- `["*"]`:每天执行
- 格式YYYY-MM-DD
#### 6. 订单参数 (`params`)
- 类型:对象
- 必填:是
- 内容根据订单类型不同而变化:
##### 参数
**必须包含 `quantity` 或 `quoteOrderQty` 之一**
- `quantity`:交易数量(字符串格式的数字)
- `quoteOrderQty`:交易金额(字符串格式的数字)
- `price`:限价价格(字符串格式的数字),如果为空则自动获取最新价
### 配置示例
#### 示例 1每日限价买入
```json
{
"trades": [
{
"symbol": "BTCUSDT",
"order_type": "LIMIT",
"side": "BUY",
"execute_dates": ["*"],
"params": {
"quoteOrderQty": "100",
"price": "50000"
}
}
]
}
```
#### 示例 2特定日期市价卖出
```json
{
"trades": [
{
"symbol": "ETHUSDT",
"order_type": "MARKET",
"side": "SELL",
"execute_dates": ["2023-12-25", "2023-12-31"],
"params": {
"quantity": "1.5"
}
}
]
}
```
#### 示例 3多种订单组合
```json
{
"trades": [
{
"symbol": "BTCUSDT",
"order_type": "LIMIT",
"side": "BUY",
"execute_dates": ["2023-12-01"],
"params": {
"quantity": "0.01",
"price": "42000"
}
},
{
"symbol": "ETHUSDT",
"order_type": "MARKET",
"side": "SELL",
"execute_dates": ["*"],
"params": {
"quoteOrderQty": "200"
}
}
]
}
```
### 注意事项
1. 价格和数量都使用字符串格式而非数字,以避免浮点数精度问题
2. 对于 LIMIT 订单,可以只提供`quoteOrderQty`,系统会自动计算`quantity`
3. 当`execute_dates`包含`"*"`时,会忽略其他日期设置
4. 系统会自动创建`output`目录存放日志和交易记录
5. 所有时间均以系统时区为准
### 错误处理
如果配置文件格式错误,程序会记录错误并退出。常见错误包括:
- JSON 格式错误
- 缺少必填字段
- 日期格式不正确
- 订单参数不符合订单类型要求
## 输出文件
- `output/mexc_trading_bot.log`: 交易日志
- `output/mexc_spot_trade.csv`: 交易记录 CSV 文件
---