211 lines
5.1 KiB
Markdown
211 lines
5.1 KiB
Markdown
# 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. 创建配置文件`config/trading_config.json`(可有多个不同名字的`.json`文件,程序会自动遍历所有)
|
||
2. 运行程序:
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
## 配置文件
|
||
|
||
### 配置文件结构
|
||
|
||
配置文件采用 JSON 格式,命名为`trading_config.json`,基本结构如下:
|
||
|
||
```json
|
||
{
|
||
"api": {
|
||
"mexc_host": "https://api.mexc.com",
|
||
"api_key": "mxxxxxxxxxx",
|
||
"secret_key": "xxxxxxxxxxxxxxxxx"
|
||
},
|
||
"symbol_mapping": {
|
||
"BTCUSDC": "BTCUSDT"
|
||
},
|
||
"trades": [
|
||
{
|
||
"symbol": "BTCUSDT",
|
||
"order_type": "LIMIT",
|
||
"side": "BUY",
|
||
"execute_dates": ["*"],
|
||
"params": {
|
||
"quoteOrderQty": "100",
|
||
"price": "50000"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### 配置字段详解
|
||
|
||
#### 1. API 配置 (`api`)
|
||
|
||
#### 2. 证券代码映射 (`symbol_mapping`)
|
||
|
||
- 类型:数组
|
||
- 描述:API 代码: CSV 记录代码,如`"BTCUSDC": "BTCUSDT"`代表向 API 请求`BTCUSDC`,但 CSV 中记录证券代码`BTCUSDT`
|
||
|
||
#### 3. 交易列表 (`trades`)
|
||
|
||
- 类型:数组
|
||
- 描述:包含所有交易指令的列表
|
||
- 每个交易指令是一个包含以下字段的对象:
|
||
|
||
##### 1. 交易对 (`symbol`)
|
||
|
||
- 类型:字符串
|
||
- 必填:是
|
||
- 示例:`"BTCUSDT"`
|
||
- 描述:要交易的货币对,如 BTC/USDT
|
||
|
||
##### 2. 订单类型 (`order_type`)
|
||
|
||
- 类型:字符串
|
||
- 必填:是
|
||
- 可选值:
|
||
- `"LIMIT"`:限价单
|
||
- `"MARKET"`:市价单
|
||
- `"LIMIT_MAKER"`:限价做市单
|
||
- `"IMMEDIATE_OR_CANCEL"`:立即成交或取消
|
||
- `"FILL_OR_KILL"`:全部成交或取消
|
||
|
||
##### 3. 交易方向 (`side`)
|
||
|
||
- 类型:字符串
|
||
- 必填:是
|
||
- 可选值:
|
||
- `"BUY"`:买入
|
||
- `"SELL"`:卖出
|
||
|
||
##### 4. 执行日期 (`execute_dates`)
|
||
|
||
- 类型:数组
|
||
- 必填:是
|
||
- 特殊值:
|
||
- `"*"`:表示每天执行
|
||
- 示例:
|
||
- `["2023-01-01", "2023-01-15"]`:仅在指定日期执行
|
||
- `["*"]`:每天执行
|
||
- 格式:YYYY-MM-DD
|
||
|
||
##### 5. 订单参数 (`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 文件
|
||
|
||
---
|