找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 5|回复: 0

【高级趋势挂单 EA — 重构版 】挂单一单一结

[复制链接]

6233

主题

54

回帖

4871

积分

管理员

积分
4871
发表于 6 天前 | 显示全部楼层 |阅读模式
# EA交易策略文档 ## 1. 总体功能和设计思路 ### 1.1 核心交易逻辑- 利用1小时周期的EMA均线判断趋势方向(上涨或下跌)- 使用ATR(平均真实波幅)计算挂单的合理价格范围(根据当前波动率动态调整挂单距离)- 在符合趋势方向且无同类型订单时,挂买入止损单(Buy Stop)或卖出止损单(Sell Stop) ### 1.2 订单管理功能- **挂单管理**:超时且价格偏移较大时自动修改挂单价格- **仓位管理**:支持跟踪止损,动态调整止损价位锁定利润 ### 1.3 风险管理- 支持自动手数计算,根据账户余额和风险偏好自动调整手数- 挂单和止损点数均可配置- 时间过滤,限定EA交易时间 ## 2. 主要输入参数 ### 2.1 基本参数| 参数名 | 类型 | 说明 ||--------|------|------|| magicNumber | int | 订单标识,确保只操作本EA下的订单 || FixedLot | double | 固定手数(当不开自动手数时) | ### 2.2 自动手数设置| 参数名 | 类型 | 说明 ||--------|------|------|| UseAutoLot | bool | 是否启用自动手数计算 || LotMode | enum | 手数模式:激进、适中、保守三档 | ### 2.3 止损止盈设置| 参数名 | 类型 | 说明 ||--------|------|------|| SL_Points | int | 止损点数 || TP_Points | int | 止盈点数 || Trigger_Step | int | 挂单价格与当前价的间距(点数) | ### 2.4 时间控制| 参数名 | 类型 | 说明 ||--------|------|------|| StartHour | int | 交易开始时间(小时制) || EndHour | int | 交易结束时间(小时制) | ### 2.5 技术指标参数| 参数名 | 类型 | 说明 ||--------|------|------|| MAPeriod | int | EMA均线周期 || ATR_Period | int | ATR计算周期 || ATR_Multiplier | double | ATR乘数因子 | ### 2.6 高级设置| 参数名 | 类型 | 说明 ||--------|------|------|| UseTrailingStop | bool | 是否启用跟踪止损 || TSL_StepPoints | int | 跟踪止损移动步长 || MaxPendingPriceMovePoints | int | 挂单价格最大偏差点数 | ## 3. 关键函数解析 ### 3.1 OnInit()- 初始化最小手数和手数步长- 计算DigitsMultiplier处理3、5位小数的货币对- 读取当前1小时ATR值(供初始使用)- 初始化缓存数组lastModifyTime用于控制挂单价格修改频率 ### 3.2 OnTick()1. 时间判断:检查是否在允许交易时间段内2. 指标计算:   - 计算最新ATR和EMA均线   - 判断趋势方向(上涨或下跌)3. 价格计算:根据ATR和ATR_Multiplier计算买卖挂单触发价格4. 订单管理:   - 调用ManageExistingOrders管理当前所有订单   - 调用TryPlacePending尝试挂新单 ### 3.3 ManageExistingOrders()- **持仓单处理**:应用跟踪止损(如果启用)- **挂单处理**:  - 检查挂单时间是否超过5分钟  - 检查价格偏差是否超过阈值  - 检查距离上次修改是否超过10分钟  - 满足条件则修改挂单价格 ### 3.4 TryPlacePending()1. 趋势判断:确认当前趋势方向2. 订单检查:确保无同类型挂单或持仓单3. 挂单执行:   - 计算触发价格   - 设置止损止盈(基于SL_Points和TP_Points)   - 通过NormalizeLot()计算手数   - 执行挂单操作 ### 3.5 NormalizeLot()- **自动手数模式**:  - 根据账户余额和风险模式计算手数  - 计算公式:账户余额/(基数*1000),基数为10、20或30- **固定手数模式**:使用FixedLot值- 确保手数符合平台最小手数和步长要求 ### 3.6 ApplyTrailingStop()- **买单处理**:  - 新止损价 = 当前Bid价格 - TSL_StepPoints  - 仅当价格上涨且新止损价高于旧止损价时修改- **卖单处理**:  - 新止损价 = 当前Ask价格 + TSL_StepPoints  - 仅当价格下跌且新止损价低于旧止损价时修改 ### 3.7 ModifyPendingOrder()- 重新计算挂单价格、止损和止盈价格- 执行订单修改操作- 输出操作结果日志 ### 3.8 CountActiveOrders()- 统计当前指定类型的订单数量- 仅计算本EA和当前品种的订单 ## 4. 代码特点与优缺点分析 ### 4.1 优势特点- **动态适应性**:  - 使用ATR动态调整挂单距离  - 自动手数管理适应不同账户规模- **完善的管理机制**:  - 挂单超时自动修正  - 跟踪止损保护利润- **风险控制**:  - 多种风险模式可选  - 交易时间段限制 ### 4.2 潜在改进点 #### 数据结构优化- 当前lastModifyTime数组可能浪费内存- 建议改用映射结构或只存储有效挂单时间 #### 功能增强- 增加挂单修改频率参数化- 添加订单失败重试机制- 实现多重趋势确认(增加指标)- 扩展多周期分析能力 #### 风险控制强化- 添加显式风控模块:  - 最大单日亏损限制  - 账户风险控制- 完善滑点处理机制- 验证不同经纪商点值计算方式 ## 5. 总结 本EA实现了一个基于趋势跟随和ATR波动率调整的自动交易策略,具有以下核心价值: 1. **智能挂单系统**:结合趋势判断和波动率分析,实现动态价格调整2. **全自动管理**:从挂单到平仓的完整生命周期管理3. **灵活配置**:支持多种风险偏好和交易时段设置4. **代码质量**:结构清晰,可读性好,易于二次开发





欢迎大家下载测试。如果对源码感兴趣,可以找我
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-8-25 04:03 , Processed in 0.103980 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表