From e8226edd96347edbd612412fafb50f3e328b7e22 Mon Sep 17 00:00:00 2001 From: songkunling Date: Thu, 14 Aug 2025 10:47:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ARCHITECTURE.md | 112 -------------- README.md | 339 ++++++++++++++++++++++++++++++++++--------- backtest_trades.csv | 16 -- backtest_trades.json | 212 --------------------------- demo.txt | 97 ------------- params.txt | 58 -------- 6 files changed, 270 insertions(+), 564 deletions(-) delete mode 100644 ARCHITECTURE.md delete mode 100644 backtest_trades.csv delete mode 100644 backtest_trades.json delete mode 100644 demo.txt delete mode 100644 params.txt diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index 9c7872c..0000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,112 +0,0 @@ -# 架构重构说明 - -## 重构概述 - -本次重构将原有的单一策略架构分离为**策略层**和**风险管理层**,实现了更清晰的功能分离和动态权重配置。 - -## 新架构结构 - -### 1. 策略层 (strategies/) -包含纯粹的交易策略,每个策略只负责生成买入/卖出信号: -- `ma_cross.py` - 均线交叉策略 -- `rsi.py` - RSI超买超卖策略 -- `bollinger.py` - 布林带策略 -- `macd.py` - MACD策略 -- `kdj.py` - KDJ策略 -- `turtle.py` - 海龟交易法则 -- `daily_breakout.py` - 日内突破策略 -- `mean_reversion.py` - 均值回归策略 -- `momentum_breakout.py` - 动量突破策略 - -### 2. 风险管理层 (risk_management/) -- `market_state.py` - 市场状态分析器(基于原resilient_trend) -- `position_manager.py` - 仓位管理器(基于原profit_protect) -- `__init__.py` - 风险管理控制器 - -### 3. 动态权重系统 -- `dynamic_weights.py` - 动态权重管理器 - -## 核心改进 - -### 1. 市场状态判断 -- 将`resilient_trend`重构为市场状态分析器 -- 判断市场状态:`uptrend`、`downtrend`、`ranging`、`none` -- 提供置信度评估(0.0-1.0) - -### 2. 动态权重配置 -根据市场状态自动调整策略权重: -- **上升趋势**:侧重趋势跟踪策略(均线交叉、动量突破) -- **下降趋势**:侧重趋势跟踪和反转策略 -- **震荡市场**:侧重均值回归和超买超卖策略 -- **无明确趋势**:使用平衡的权重配置 - -### 3. 综合风险管理 -- **止损机制**:固定止损10% -- **止盈机制**:固定止盈20% + 追踪止损 -- **仓位控制**:最大单笔仓位10% -- **日内限制**:最大日亏损5% - -## 使用方法 - -### 1. 运行回测 -```bash -python main.py -``` -回测会使用当前市场状态对应的权重配置进行测试。 - -### 2. 运行实盘交易 -```bash -# 在main.py中取消注释 -run_realtime() -``` -实盘交易会实时分析市场状态并动态调整权重。 - -### 3. 运行优化 -```bash -# 在main.py中取消注释 -run_optimizer() -``` -优化器会寻找最佳的基础权重配置。 - -## 配置说明 - -### config.py 新配置项 -```python -# 风险管理参数 -RISK_CONFIG = { - "stop_loss_pct": -0.10, # 固定止损:亏损10% - "profit_retracement_pct": 0.30, # 利润回撤30%止盈 - "min_profit_for_trailing": 0.05, # 追踪止损激活阈值:利润5% - "take_profit_pct": 0.20, # 固定止盈:盈利20% - "max_position_size": 0.1, # 最大仓位10% - "max_daily_loss": -0.05, # 最大日亏损5% -} - -# 市场状态分析参数 -MARKET_STATE_CONFIG = { - "trend_period": 50, - "retracement_tolerance": 0.30, -} - -# 默认权重(低置信度时使用) -DEFAULT_WEIGHTS = { - "ma_cross": 1.5, - "rsi": 1.5, - "bollinger": 1.5, - # ... 其他策略 -} -``` - -## 优势 - -1. **更清晰的功能分离**:策略专注于信号生成,风险管理专注于风险控制 -2. **动态适应性**:根据市场状态自动调整策略权重 -3. **更强的风险控制**:多层次的风险管理机制 -4. **更好的可扩展性**:易于添加新策略和风险管理规则 -5. **更稳定的性能**:通过权重分散降低单一策略风险 - -## 兼容性 - -- 保持与现有回测和优化系统的兼容性 -- 策略接口保持不变,现有策略无需修改 -- 配置文件结构更新,但提供了向后兼容 \ No newline at end of file diff --git a/README.md b/README.md index 7714d1a..e6264c4 100644 --- a/README.md +++ b/README.md @@ -1,99 +1,300 @@ -# MT5 Python EA Suite (MetaTrader 5 量化交易策略套件) +# MetaTrader 5 智能交易系统 (EA套件) -这是一个基于Python与MetaTrader 5 (MT5)平台交互的、经过重构的现代化量化交易策略套件。它提供了一个清晰、可扩展的框架,用于开发、回测和运行由多个交易策略组成的投资组合。 +基于Python的MetaTrader 5智能交易系统,通过多策略组合和动态权重管理实现自动化量化交易。 ---- +## 🚀 核心特性 -## 核心概念 +- **多策略组合**: 集成10种量化策略,通过加权投票生成稳健交易信号 +- **动态权重管理**: 根据市场状态动态调整策略权重,提升适应性 +- **完整风控体系**: 追踪止损、时间退出、资金管理等多层次风险控制 +- **遗传算法优化**: 自动寻找最佳策略参数和权重组合 +- **多模式运行**: 支持回测、实盘交易、模拟运行三种模式 +- **架构重构**: 采用依赖注入设计,提高代码可维护性和扩展性 -- **多策略组合**: 系统的核心思想不是依赖于单一策略,而是将多个不同类型的策略(如趋势跟踪、均值回归等)组合起来,通过动态加权生成一个更稳健的交易决策。 - -- **动态权重**: 系统能根据对市场状态(如趋势、震荡)的分析,动态地调整不同策略的权重,在趋势行情中倚重趋势策略,在震荡行情中侧重于摆动策略。 - -- **依赖注入架构**: 项目采用依赖注入的设计模式,将核心交易逻辑与数据来源彻底分离。无论是处理实时行情、模拟数据还是历史数据,核心逻辑都保持不变,极大地保证了回测与实盘的一致性,并方便了未来的扩展。 - -- **配置即代码**: 所有的系统行为,从交易参数到策略组合,都通过 `config.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 # 项目说明 +mt5_python_ea_suite/ +├── core/ # 核心组件 +│ ├── data_providers.py # 数据提供者(实盘/回测/模拟) +│ ├── utils.py # 工具函数 +│ └── risk/ # 风险管理模块 +│ ├── position_manager.py # 持仓管理器 +│ ├── market_state.py # 市场状态分析 +│ └── __init__.py +├── execution/ # 执行模块 +│ ├── realtime_trader.py # 实时交易器 +│ ├── backtest_engine.py # 回测引擎 +│ ├── dynamic_weights.py # 动态权重管理 +│ └── __init__.py +├── strategies/ # 交易策略 +│ ├── ma_cross.py # 均线交叉策略 +│ ├── rsi.py # RSI策略 +│ ├── bollinger.py # 布林带策略 +│ ├── macd.py # MACD策略 +│ ├── kdj.py # KDJ策略 +│ ├── turtle.py # 海龟交易法则 +│ ├── mean_reversion.py # 均值回归策略 +│ ├── momentum_breakout.py # 动量突破策略 +│ ├── daily_breakout.py # 日内突破策略 +│ ├── wave_theory.py # 波浪理论策略 +│ └── base_strategy.py # 策略基类 +├── config.py # 配置文件 +├── main.py # 主入口(优化器) +├── start_backtest.py # 回测启动脚本 +├── start_realtime.py # 实时交易启动脚本 +├── optimizer.py # 遗传算法优化器 +├── logger.py # 日志系统 +└── requirements.txt # 依赖包 ``` ---- +## 🛠️ 安装与配置 -## 如何运行 +### 环境要求 -#### 1. 环境准备 +- Python 3.7+ +- MetaTrader 5 终端 +- 网络连接 -- 确保您的电脑上已经安装了MetaTrader 5交易终端。 -- 在MT5中,进入 `工具 > 选项 > EA交易`,确保勾选了“允许算法交易”和“允许DLL导入”。 -- 安装Python 3.x并创建虚拟环境。 -- **安装依赖**: - ```bash - pip install -r requirements.txt - ``` +### 安装步骤 -#### 2. 核心配置 (`config.py`) +1. **克隆项目** + ```bash + git clone + cd mt5_python_ea_suite + ``` -这是您与系统交互的唯一配置中心。在这里您可以调整几乎所有的参数,例如: -- `INITIAL_CAPITAL`: 初始资金。 -- `USE_DATE_RANGE` / `BACKTEST_COUNT`: 选择回测模式(按日期或按K线数)。 -- `REALTIME_CONFIG`: **实盘/模拟交易的配置**,包括`dry_run`模式的开关。 -- `RISK_CONFIG`: 止盈、止损等风险参数。 -- `CAPITAL_ALLOCATION`: 多、空方向的资金分配比例。 -- `DEFAULT_WEIGHTS`: 策略的基础权重。 +2. **创建虚拟环境** + ```bash + python -m venv myenv + # Windows + myenv\Scripts\activate + # macOS/Linux + source myenv/bin/activate + ``` -#### 3. 运行回测 +3. **安装依赖** + ```bash + pip install -r requirements.txt + ``` -直接运行回测启动脚本。所有配置将从 `config.py` 读取。 +4. **配置MT5终端** + - 确保MT5终端已登录 + - 启用自动交易(点击"自动交易"按钮或按Ctrl+E) + - 确保账户允许自动交易 + +## 🎯 策略说明 + +### 技术指标策略 +- **均线交叉 (MACrossStrategy)**: 基于快慢均线交叉的买卖信号 +- **相对强弱指数 (RSIStrategy)**: 使用RSI指标判断超买超卖 +- **布林带 (BollingerStrategy)**: 基于价格与布林带的相对位置 +- **MACD策略**: MACD指标的金叉死叉信号 +- **KDJ策略**: KDJ指标的超买超卖信号 + +### 价格行为策略 +- **海龟交易法则 (TurtleStrategy)**: 基于价格突破的顺势交易 +- **均值回归 (MeanReversionStrategy)**: 价格偏离均值时的回归交易 +- **动量突破 (MomentumBreakoutStrategy)**: 基于动量指标的突破信号 +- **日内突破 (DailyBreakoutStrategy)**: 基于日内价格区间的突破 + +### 复杂策略 +- **波浪理论 (WaveTheoryStrategy)**: 结合EMA、ADX、动量等多指标的趋势分析 + +## 🚦 运行模式 + +### 1. 回测模式 ```bash +# 运行历史回测 python start_backtest.py ``` -回测结束后,会打印详细的性能报告,并将完整的交易记录保存到 `backtest_trades.csv` 和 `backtest_trades.json` 文件中。 -#### 4. 运行实盘或模拟交易 +回测结果将生成: +- `backtest_trades.csv`: 交易记录CSV格式 +- `backtest_trades.json`: 交易记录JSON格式 +- 详细的性能报告(胜率、盈亏比、最大回撤等) -在 `config.py` 中,将 `REALTIME_CONFIG` 里的 `dry_run` 设置为 `False`(实盘)或 `True`(模拟),然后运行: +### 2. 实时交易模式 ```bash +# 启动实时交易(模拟运行) python start_realtime.py + +# 启动实盘交易(需要确认) +python start_realtime.py +# 输入 'YES' 确认实盘交易 ``` -程序会根据您的配置,以实盘或模拟模式启动。 ---- +### 3. 参数优化模式 -## 如何添加一个新策略 +```bash +# 运行遗传算法优化 +python optimizer.py +``` -新架构下添加策略非常简单: +优化结果将生成: +- `optimization_results_YYYYMMDD_HHMMSS.json`: 详细优化结果 +- `optimization_best_params_YYYYMMDD_HHMMSS.csv`: 最佳参数 +- `optimization_history_YYYYMMDD_HHMMSS.csv`: 优化历史 +- `optimization_report_YYYYMMDD_HHMMSS.txt`: 优化报告 -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` 中,为您的新策略添加一个基础权重。 +## ⚙️ 关键配置 -完成!您的新策略已经无缝集成到整个系统中。 \ No newline at end of file +### 交易参数 +```python +# 基础配置 +SYMBOL = "XAUUSD" # 交易品种 +TIMEFRAME = 1 # 时间周期(1分钟) +INITIAL_CAPITAL = 20000 # 初始资金 +SPREAD = 16 # 点差 + +# 回测配置 +BACKTEST_COUNT = 30000 # 回测数据量 +BACKTEST_START_DATE = "2025-05-01" +BACKTEST_END_DATE = "2025-08-01" +``` + +### 风险管理 +```python +RISK_CONFIG = { + "stop_loss_pct": -0.01, # 止损阈值(-1%) + "take_profit_pct": 0.20, # 止盈阈值(20%) + "profit_retracement_pct": 0.10, # 追踪止损回撤阈值(10%) + "min_profit_for_trailing": 0.01, # 启动追踪止损的最小盈利(1%) + "max_holding_minutes": 60, # 最大持仓时间(分钟) + "min_profit_for_time_exit": 0.001 # 时间退出最小盈利(0.1%) +} +``` + +### 信号阈值 +```python +SIGNAL_THRESHOLDS = { + "buy_threshold": 1.5, # 买入信号阈值 + "sell_threshold": -1.5 # 卖出信号阈值 +} +``` + +## 🛡️ 风险控制 + +### 多层次风控体系 + +1. **止损保护** + - 固定百分比止损 + - 追踪止损(基于盈利回撤) + - 动态止损位调整 + +2. **时间管理** + - 最大持仓时间限制 + - 盈利未达标强制平仓 + - 市场状态适应性调整 + +3. **资金管理** + - 初始资金分配 + - 多空仓位资金分配 + - 动态权益更新 + +4. **持仓限制** + - 最大持仓数量控制 + - 交易方向限制(多/空/双向) + - 信号强度过滤 + +### 动态权重管理 + +系统根据市场状态动态调整策略权重: +- **趋势识别**: 价格突破、成交量确认、动量指标 +- **市场状态**: 强趋势、弱趋势、震荡市 +- **置信度评估**: 高置信度、中等置信度 +- **权重调整**: 根据市场状态调整各策略权重 + +## 📊 性能监控 + +### 实时监控 +- 当前持仓状态 +- 浮动盈亏计算 +- 策略信号强度 +- 账户权益更新 + +### 历史记录 +- 交易记录CSV/JSON格式导出 +- 性能指标统计 +- 参数优化历史 +- 峰值盈利数据持久化 + +## 🔧 故障排除 + +### 常见问题 + +1. **MT5连接失败** + - 确保MT5终端已启动并登录 + - 检查网络连接 + - 验证MT5终端版本 + +2. **自动交易被禁用** + - 点击MT5终端"自动交易"按钮 + - 按Ctrl+E快捷键 + - 检查账户权限 + +3. **订单执行失败** + - 检查账户资金 + - 验证品种信息 + - 确认交易时间 + +4. **数据获取失败** + - 检查日期范围设置 + - 验证MT5服务器连接 + - 调整数据量设置 + +### 日志文件 + +- `logs/error.log`: 错误日志 +- `logs/strategy.log`: 策略执行日志 +- `position_peaks.json`: 持仓峰值数据 + +## 📈 优化建议 + +1. **参数优化** + - 使用遗传算法优化策略参数 + - 定期重新优化以适应市场变化 + - 保存最佳参数组合 + +2. **策略调整** + - 根据市场情况调整策略权重 + - 添加新的策略模块 + - 优化信号阈值 + +3. **风险控制** + - 定期检查止损设置 + - 监控最大回撤 + - 调整资金分配比例 + +## ⚠️ 风险提示 + +- **实盘交易前务必充分测试** +- **建议先使用模拟运行模式** +- **不要投入超过风险承受能力的资金** +- **定期监控系统运行状态** +- **保持策略的持续优化** + +## 📝 更新日志 + +### v2.0 (重构版) +- 架构重构,采用依赖注入设计 +- 新增动态权重管理模块 +- 完善风险控制体系 +- 优化持仓管理和数据持久化 +- 改进信号组合逻辑 + +### v1.0 +- 基础多策略组合框架 +- 遗传算法参数优化 +- 回测和实时交易功能 +- 基本风险控制 + +## 🤝 贡献指南 + +欢迎提交Issue和Pull Request来改进系统! + +## 📄 许可证 + +本项目仅供学习和研究使用,实盘交易风险自负。 \ No newline at end of file diff --git a/backtest_trades.csv b/backtest_trades.csv deleted file mode 100644 index 6720e32..0000000 --- a/backtest_trades.csv +++ /dev/null @@ -1,16 +0,0 @@ -trade_id,symbol,direction,open_price,open_time,strategy_signal,status,close_price,close_time,close_reason,profit_loss,profit_loss_pct -1,XAUUSD,buy,3325.65,3,signal_1.0,closed,3321.32,45,risk_management_close_long,-4.329999999999927,-0.13020011125644393 -2,XAUUSD,sell,3320.07,46,signal_-1.0,closed,3316.63,48,risk_management_close_long,3.4400000000000546,0.10361227323520451 -3,XAUUSD,sell,3318.83,49,signal_-1.0,closed,3315.46,57,risk_management_close_long,3.369999999999891,0.1015418084083816 -4,XAUUSD,sell,3314.19,58,signal_-1.0,closed,3310.61,62,risk_management_close_long,3.5799999999999272,0.10802036093283508 -5,XAUUSD,sell,3312.83,63,signal_-1.0,closed,3306.49,16527,risk_management_close_long,6.3400000000001455,0.19137716091680362 -6,XAUUSD,sell,3309.13,16528,signal_-1.0,closed,3303.25,16531,risk_management_close_long,5.880000000000109,0.17769020860468188 -7,XAUUSD,sell,3302.25,16532,signal_-1.0,closed,3298.6,19352,risk_management_close_long,3.650000000000091,0.11053069876599564 -8,XAUUSD,sell,3294.11,19353,signal_-1.0,closed,3289.99,19363,risk_management_close_long,4.120000000000346,0.12507171891650082 -9,XAUUSD,sell,3291.61,19364,signal_-1.0,closed,3287.05,19561,risk_management_close_long,4.559999999999945,0.13853403045925688 -10,XAUUSD,sell,3285.18,19562,signal_-1.0,closed,3281.16,19566,risk_management_close_long,4.019999999999982,0.12236772414296879 -11,XAUUSD,sell,3283.41,19567,signal_-1.0,closed,3277.08,19574,risk_management_close_long,6.329999999999927,0.19278737653841363 -12,XAUUSD,sell,3280.13,19575,signal_-1.0,closed,3275.76,19580,risk_management_close_long,4.369999999999891,0.13322642700136553 -13,XAUUSD,sell,3280.44,19581,signal_-1.0,closed,3275.42,19587,risk_management_close_long,5.019999999999982,0.1530282523076167 -14,XAUUSD,sell,3275.99,19588,signal_-1.0,closed,3272.71,19593,risk_management_close_long,3.2799999999997453,0.1001224057460415 -15,XAUUSD,sell,3274.53,19594,signal_-1.0,closed,3271.01,19603,risk_management_close_long,3.519999999999982,0.10749634298662651 diff --git a/backtest_trades.json b/backtest_trades.json deleted file mode 100644 index 68af87f..0000000 --- a/backtest_trades.json +++ /dev/null @@ -1,212 +0,0 @@ -[ - { - "trade_id": 1, - "symbol": "XAUUSD", - "direction": "buy", - "open_price": 3325.65, - "open_time": 3, - "strategy_signal": "signal_1.0", - "status": "closed", - "close_price": 3321.32, - "close_time": 45, - "close_reason": "risk_management_close_long", - "profit_loss": -4.329999999999927, - "profit_loss_pct": -0.13020011125644393 - }, - { - "trade_id": 2, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3320.07, - "open_time": 46, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3316.63, - "close_time": 48, - "close_reason": "risk_management_close_long", - "profit_loss": 3.4400000000000546, - "profit_loss_pct": 0.10361227323520451 - }, - { - "trade_id": 3, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3318.83, - "open_time": 49, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3315.46, - "close_time": 57, - "close_reason": "risk_management_close_long", - "profit_loss": 3.369999999999891, - "profit_loss_pct": 0.1015418084083816 - }, - { - "trade_id": 4, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3314.19, - "open_time": 58, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3310.61, - "close_time": 62, - "close_reason": "risk_management_close_long", - "profit_loss": 3.5799999999999272, - "profit_loss_pct": 0.10802036093283508 - }, - { - "trade_id": 5, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3312.83, - "open_time": 63, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3306.49, - "close_time": 16527, - "close_reason": "risk_management_close_long", - "profit_loss": 6.3400000000001455, - "profit_loss_pct": 0.19137716091680362 - }, - { - "trade_id": 6, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3309.13, - "open_time": 16528, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3303.25, - "close_time": 16531, - "close_reason": "risk_management_close_long", - "profit_loss": 5.880000000000109, - "profit_loss_pct": 0.17769020860468188 - }, - { - "trade_id": 7, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3302.25, - "open_time": 16532, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3298.6, - "close_time": 19352, - "close_reason": "risk_management_close_long", - "profit_loss": 3.650000000000091, - "profit_loss_pct": 0.11053069876599564 - }, - { - "trade_id": 8, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3294.11, - "open_time": 19353, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3289.99, - "close_time": 19363, - "close_reason": "risk_management_close_long", - "profit_loss": 4.120000000000346, - "profit_loss_pct": 0.12507171891650082 - }, - { - "trade_id": 9, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3291.61, - "open_time": 19364, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3287.05, - "close_time": 19561, - "close_reason": "risk_management_close_long", - "profit_loss": 4.559999999999945, - "profit_loss_pct": 0.13853403045925688 - }, - { - "trade_id": 10, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3285.18, - "open_time": 19562, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3281.16, - "close_time": 19566, - "close_reason": "risk_management_close_long", - "profit_loss": 4.019999999999982, - "profit_loss_pct": 0.12236772414296879 - }, - { - "trade_id": 11, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3283.41, - "open_time": 19567, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3277.08, - "close_time": 19574, - "close_reason": "risk_management_close_long", - "profit_loss": 6.329999999999927, - "profit_loss_pct": 0.19278737653841363 - }, - { - "trade_id": 12, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3280.13, - "open_time": 19575, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3275.76, - "close_time": 19580, - "close_reason": "risk_management_close_long", - "profit_loss": 4.369999999999891, - "profit_loss_pct": 0.13322642700136553 - }, - { - "trade_id": 13, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3280.44, - "open_time": 19581, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3275.42, - "close_time": 19587, - "close_reason": "risk_management_close_long", - "profit_loss": 5.019999999999982, - "profit_loss_pct": 0.1530282523076167 - }, - { - "trade_id": 14, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3275.99, - "open_time": 19588, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3272.71, - "close_time": 19593, - "close_reason": "risk_management_close_long", - "profit_loss": 3.2799999999997453, - "profit_loss_pct": 0.1001224057460415 - }, - { - "trade_id": 15, - "symbol": "XAUUSD", - "direction": "sell", - "open_price": 3274.53, - "open_time": 19594, - "strategy_signal": "signal_-1.0", - "status": "closed", - "close_price": 3271.01, - "close_time": 19603, - "close_reason": "risk_management_close_long", - "profit_loss": 3.519999999999982, - "profit_loss_pct": 0.10749634298662651 - } -] \ No newline at end of file diff --git a/demo.txt b/demo.txt deleted file mode 100644 index 14ab868..0000000 --- a/demo.txt +++ /dev/null @@ -1,97 +0,0 @@ -import MetaTrader5 as mt5 - -# 登录账号 -ACCOUNT = 12345678 -PASSWORD = "your_password" -SERVER = "Exness-MT5Trial" # 服务器名称 -SYMBOL = "EURUSD" - -# 初始化 -if not mt5.initialize(): - print("initialize() failed:", mt5.last_error()) - quit() - -if not mt5.login(ACCOUNT, PASSWORD, SERVER): - print("login() failed:", mt5.last_error()) - mt5.shutdown() - quit() - -# 获取当前持仓 -positions = mt5.positions_get(symbol=SYMBOL) -if positions is None or len(positions) == 0: - print(f"没有 {SYMBOL} 的持仓") - mt5.shutdown() - quit() - -# 遍历并平仓 -for pos in positions: - ticket = pos.ticket - lot = pos.volume - position_type = pos.type # 0=BUY, 1=SELL - - if position_type == mt5.POSITION_TYPE_BUY: - # 平多 -> 发送SELL订单 - close_request = { - "action": mt5.TRADE_ACTION_DEAL, - "symbol": SYMBOL, - "volume": lot, - "type": mt5.ORDER_TYPE_SELL, - "position": ticket, - "price": mt5.symbol_info_tick(SYMBOL).bid, - "deviation": 10, - "magic": 234000, - "comment": "Python Close Buy", - "type_filling": mt5.ORDER_FILLING_IOC, - } - else: - # 平空 -> 发送BUY订单 - close_request = { - "action": mt5.TRADE_ACTION_DEAL, - "symbol": SYMBOL, - "volume": lot, - "type": mt5.ORDER_TYPE_BUY, - "position": ticket, - "price": mt5.symbol_info_tick(SYMBOL).ask, - "deviation": 10, - "magic": 234000, - "comment": "Python Close Sell", - "type_filling": mt5.ORDER_FILLING_IOC, - } - - result = mt5.order_send(close_request) - print(result) - if result.retcode != mt5.TRADE_RETCODE_DONE: - print(f"平仓失败: {result.comment}, 错误码: {result.retcode}") - -mt5.shutdown() - -''' -2️⃣ 常见平仓失败原因 -未传 position 参数 - -在 MT5 里,如果是平仓,你必须指定 原单的 ticket ID(即 position 字段)。 - -不然系统会认为你是开新仓,而不是平仓。 - -价格方向不对 - -平多必须用 SELL,平空必须用 BUY,价格要对应 bid 或 ask。 - -多单平仓价用 Bid(卖给市场),空单平仓价用 Ask(买回)。 - -lot 不匹配 - -发送的 volume 必须和剩余仓位量一致(或等于合约最小手数的整数倍)。 - -有些券商要求精确到 2~3 位小数,否则 Invalid volume。 - -订单类型与服务器支持不符 - -type_filling 要用服务器支持的方式(常见 ORDER_FILLING_IOC)。 - -有些外汇服务器不支持 FOK。 - -symbol 没有准备好 - -必须 mt5.symbol_select(SYMBOL, True),并且 symbol_info_tick() 不为 None。 -''' \ No newline at end of file diff --git a/params.txt b/params.txt deleted file mode 100644 index 5d2dac5..0000000 --- a/params.txt +++ /dev/null @@ -1,58 +0,0 @@ - ma_cross_short_window: 5 - ma_cross_long_window: 39 - rsi_period: 22 - rsi_overbought: 80 - rsi_oversold: 24 - bollinger_period: 10 - bollinger_std_dev: 2.8916513144581044 - macd_fast_ema: 17 - macd_slow_ema: 22 - macd_signal_period: 13 - mean_reversion_period: 40 - mean_reversion_std_dev: 2.917216289407233 - momentum_breakout_period: 27 - kdj_period: 6 - turtle_period: 16 - wave_ema_short: 3 - wave_ema_medium: 15 - wave_ema_long: 36 - wave_period: 28 - wave_range_period: 30 - wave_adx_period: 21 - wave_momentum_period: 13 - wave_range_threshold: -0.02028040971155598 - wave_adx_threshold: 22 - daily_breakout_bars_count: 807 - buy_threshold: 2.52197653160939 - sell_threshold: -2.8041541426704852 - stop_loss_pct: -0.16609967085382554 - profit_retracement_pct: 0.1 - min_profit_for_trailing: 0.05431287857723996 - take_profit_pct: 0.049359092938974364 - max_holding_minutes: 79 - min_profit_for_time_exit: -0.051349429573099285 - weight_MACrossStrategy: 0.44428771408324463 - weight_RSIStrategy: 1.6518277343219148 - weight_BollingerStrategy: 0.6014474871460991 - weight_MeanReversionStrategy: 0.04509729271515517 - weight_MomentumBreakoutStrategy: 1.0768245883204248 - weight_MACDStrategy: 0.8909161638775971 - weight_KDJStrategy: 1.095784002572773 - weight_TurtleStrategy: 1.7942934575029192 - weight_DailyBreakoutStrategy: 2.4237777692491713 - weight_WaveTheoryStrategy: 0.7354173414675755 - market_trend_period: 44 - market_retracement_tolerance: 0.1382775008306345 - market_volume_period: 13 - market_volume_ma_period: 12 - trend_price_breakout_weight: 0.03552729699860058 - trend_volume_confirmation_weight: 0.2564191814903339 - trend_momentum_oscillator_weight: 0.48690789892001296 - trend_moving_average_weight: 0.3549274308680269 - trend_strong_threshold: 0.24063407379490956 - trend_weak_threshold: 0.3708545035763192 - trend_volume_spike: 1.7781348694952452 - trend_oversold: 29 - trend_overbought: 69 - confidence_high: 0.941049792261965 - confidence_medium: 0.8881796011658835 \ No newline at end of file