mirror of
https://github.com/silencesdg/mt5_python_ea_suite.git
synced 2026-08-05 06:57:47 +00:00
基本完毕
This commit is contained in:
@@ -1,60 +1,56 @@
|
||||
# MT5 Python EA Suite (MetaTrader 5 Python量化交易策略套件)
|
||||
# MT5 Python EA Suite (MetaTrader 5 量化交易策略套件)
|
||||
|
||||
这是一个基于Python与MetaTrader 5 (MT5)平台交互的量化交易策略套件。它提供了一个完整的框架,用于开发、回测、优化和运行由多个交易策略组成的投资组合。
|
||||
|
||||
系统的核心思想不是依赖于单一策略,而是将多个不同类型的策略(如趋势跟踪、均值回归、风险管理等)组合起来,通过加权投票和阈值过滤的机制,生成一个更稳健、更可靠的最终交易决策。
|
||||
这是一个基于Python与MetaTrader 5 (MT5)平台交互的、经过重构的现代化量化交易策略套件。它提供了一个清晰、可扩展的框架,用于开发、回测和运行由多个交易策略组成的投资组合。
|
||||
|
||||
---
|
||||
|
||||
## 核心功能
|
||||
## 核心概念
|
||||
|
||||
- **多策略框架**: 支持同时运行任意数量的、不同逻辑的交易策略。
|
||||
- **可扩展的策略库**: 可以通过在`strategies`目录下添加新文件来轻松地创建和集成自定义策略。
|
||||
- **组合信号生成**: 将所有已激活策略的信号(买入/卖出/无操作)根据可配置的权重进行加权求和,并与买卖阈值进行比较,最终形成统一的交易指令。
|
||||
- **回测引擎**: 内置一个简单的回测引擎 (`backtest.py`),用于评估策略组合在历史数据上的表现。
|
||||
- **遗传算法优化器**: 集成了强大的遗传算法 (`optimizer.py`),能够自动学习和寻找能使历史收益最大化的最佳策略权重组合。
|
||||
- **实盘交易模式**: 提供了`run_realtime()`函数,用于连接正在运行的MT5客户端,根据组合信号生成实时的交易决策。
|
||||
- **状态管理**: 支持有状态的复杂策略,例如需要“记忆”当前持仓状态或趋势状态的策略(如盈利保护、容错趋势等)。
|
||||
- **多策略组合**: 系统的核心思想不是依赖于单一策略,而是将多个不同类型的策略(如趋势跟踪、均值回归等)组合起来,通过动态加权生成一个更稳健的交易决策。
|
||||
|
||||
- **动态权重**: 系统能根据对市场状态(如趋势、震荡)的分析,动态地调整不同策略的权重,在趋势行情中倚重趋势策略,在震荡行情中侧重于摆动策略。
|
||||
|
||||
- **依赖注入架构**: 项目采用依赖注入的设计模式,将核心交易逻辑与数据来源彻底分离。无论是处理实时行情、模拟数据还是历史数据,核心逻辑都保持不变,极大地保证了回测与实盘的一致性,并方便了未来的扩展。
|
||||
|
||||
- **配置即代码**: 所有的系统行为,从交易参数到策略组合,都通过 `config.py` 文件进行集中配置,清晰直观。
|
||||
|
||||
---
|
||||
|
||||
## 项目结构
|
||||
## 系统架构
|
||||
|
||||
```
|
||||
mt5_python_ea_suite/
|
||||
├── main.py # 项目主入口 (运行回测、优化或实盘)
|
||||
├── config.py # 全局配置文件 (策略、权重、阈值)
|
||||
├── optimizer.py # 遗传算法优化器
|
||||
├── backtest.py # 回测引擎
|
||||
├── utils.py # 工具函数 (MT5连接、订单处理等)
|
||||
├── logger.py # 日志配置
|
||||
├── requirements.txt # Python依赖包
|
||||
├── logs/ # 日志文件目录
|
||||
└── strategies/ # 核心:所有交易策略的存放目录
|
||||
├── ma_cross.py
|
||||
├── rsi.py
|
||||
├── profit_protect.py
|
||||
├── resilient_trend.py
|
||||
└── ... (其他策略)
|
||||
/ (根目录)
|
||||
├── core/ # 核心逻辑模块
|
||||
│ ├── __init__.py
|
||||
│ ├── data_providers.py # 数据提供者 (实盘/模拟/回测)
|
||||
│ ├── risk/ # 风险管理 (包含PositionManager)
|
||||
│ └── utils.py # 通用工具函数
|
||||
├── execution/ # 执行逻辑模块
|
||||
│ ├── __init__.py
|
||||
│ ├── backtest_engine.py # 回测引擎
|
||||
│ ├── dynamic_weights.py # 动态权重管理器
|
||||
│ └── realtime_trader.py # 实时交易处理器
|
||||
├── strategies/ # 策略库
|
||||
│ ├── __init__.py
|
||||
│ ├── base_strategy.py
|
||||
│ └── ... (具体策略)
|
||||
├── logs/ # 日志目录
|
||||
├── start_realtime.py # [入口] 启动实时/模拟交易
|
||||
├── start_backtest.py # [入口] 启动回测
|
||||
├── config.py # [核心] 全局配置文件
|
||||
├── requirements.txt # Python依赖
|
||||
└── README.md # 项目说明
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 如何使用
|
||||
## 如何运行
|
||||
|
||||
#### 1. 环境准备
|
||||
|
||||
- 确保您的电脑上已经安装了MetaTrader 5交易终端。
|
||||
- 在MT5中,进入 `工具 > 选项 > EA交易`,确保勾选了“允许算法交易”和“允许DLL导入”。
|
||||
- 安装Python 3.x。
|
||||
- **创建并激活虚拟环境**:
|
||||
```bash
|
||||
python -m venv myenv
|
||||
# Windows
|
||||
myenv\Scripts\activate
|
||||
# macOS/Linux
|
||||
source myenv/bin/activate
|
||||
```
|
||||
- 安装Python 3.x并创建虚拟环境。
|
||||
- **安装依赖**:
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
@@ -62,38 +58,42 @@ mt5_python_ea_suite/
|
||||
|
||||
#### 2. 核心配置 (`config.py`)
|
||||
|
||||
这是您与系统交互的主要文件。
|
||||
这是您与系统交互的唯一配置中心。在这里您可以调整几乎所有的参数,例如:
|
||||
- `INITIAL_CAPITAL`: 初始资金。
|
||||
- `USE_DATE_RANGE` / `BACKTEST_COUNT`: 选择回测模式(按日期或按K线数)。
|
||||
- `REALTIME_CONFIG`: **实盘/模拟交易的配置**,包括`dry_run`模式的开关。
|
||||
- `RISK_CONFIG`: 止盈、止损等风险参数。
|
||||
- `CAPITAL_ALLOCATION`: 多、空方向的资金分配比例。
|
||||
- `DEFAULT_WEIGHTS`: 策略的基础权重。
|
||||
|
||||
- **`STRATEGIES`**: 这是最重要的配置项。它是一个列表,每一项都是一个 `(策略实例, 权重)` 的元组。您可以在这里添加、删除策略,或者手动修改它们的权重。
|
||||
- **`BUY_THRESHOLD` / `SELL_THRESHOLD`**: 组合信号的触发阈值。所有策略的 `(信号 * 权重)` 之和,如果超过这个阈值,就会触发交易。
|
||||
#### 3. 运行回测
|
||||
|
||||
#### 3. 运行模式 (`main.py`)
|
||||
直接运行回测启动脚本。所有配置将从 `config.py` 读取。
|
||||
|
||||
打开`main.py`文件,在文件底部的 `if __name__ == "__main__"` 部分,您可以选择要执行的任务:
|
||||
```bash
|
||||
python start_backtest.py
|
||||
```
|
||||
回测结束后,会打印详细的性能报告,并将完整的交易记录保存到 `backtest_trades.csv` 和 `backtest_trades.json` 文件中。
|
||||
|
||||
- **运行回测 (`run_backtest()`)**:
|
||||
使用`config.py`中当前的权重和参数,对历史数据进行一次回测,并打印最终资金。
|
||||
#### 4. 运行实盘或模拟交易
|
||||
|
||||
- **运行优化 (`run_optimizer()`)**:
|
||||
**这是最推荐的步骤**。它会启动遗传算法,自动寻找`STRATEGIES`中每个策略的最佳权重。这个过程会非常耗时,因为它需要运行成百上千次回测。优化结束后,它会打印出找到的最佳权重组合。
|
||||
**重要**: 优化完成后,您需要**手动将找到的最佳权重复制回 `config.py` 文件**,以便在回测和实盘中应用。
|
||||
在 `config.py` 中,将 `REALTIME_CONFIG` 里的 `dry_run` 设置为 `False`(实盘)或 `True`(模拟),然后运行:
|
||||
|
||||
- **运行实盘 (`run_realtime()`)**:
|
||||
使用`config.py`中的权重,连接MT5,根据最新的市场数据生成实时的、组合后的交易信号。
|
||||
```bash
|
||||
python start_realtime.py
|
||||
```
|
||||
程序会根据您的配置,以实盘或模拟模式启动。
|
||||
|
||||
---
|
||||
|
||||
## 如何添加一个新策略
|
||||
|
||||
该框架的扩展性非常强。要添加一个您自己的新策略,只需三步:
|
||||
新架构下添加策略非常简单:
|
||||
|
||||
1. 在 `strategies/` 目录下,创建一个新的Python文件,例如 `my_new_strategy.py`。
|
||||
2. 在该文件中,创建一个名为 `Strategy` 的类,并至少实现两个核心方法:
|
||||
- `__init__(self)`: 初始化策略参数。
|
||||
- `run_backtest(self, df)`: 实现回测逻辑,需要返回一个包含 `1`(买), `-1`(卖), `0`(无操作) 的Pandas Series。
|
||||
- `generate_signal(self)`: 实现实盘信号生成逻辑,需要返回 `1`, `-1`, 或 `0`。
|
||||
3. 打开 `config.py` 文件:
|
||||
- 在文件顶部 `import` 您的新策略。
|
||||
- 在 `STRATEGIES` 列表中,添加一项 `(my_new_strategy.Strategy(), 1.0)`。
|
||||
1. 在 `strategies/` 目录下,创建一个新的Python文件,例如 `my_strategy.py`。
|
||||
2. 在该文件中,创建一个继承自 `base_strategy.BaseStrategy` 的策略类。
|
||||
3. 实现您的 `__init__` 和 `generate_signal` (用于实盘) 或 `run_backtest` (用于回测) 方法。
|
||||
4. 在 `execution/dynamic_weights.py` 文件的 `__init__` 方法中,将您的新策略添加到 `self.strategy_instances` 字典中。
|
||||
5. 在 `config.py` 的 `DEFAULT_WEIGHTS` 中,为您的新策略添加一个基础权重。
|
||||
|
||||
完成!您的新策略已经无缝集成到整个系统中,可以立即参与到回测和遗传算法优化中。
|
||||
完成!您的新策略已经无缝集成到整个系统中。
|
||||
Reference in New Issue
Block a user