EA: Session Range Desk MT5

Session Range Desk MT5:

一款基于交易时段区间突破的EA,具备ATR过滤、止损距离调整、可选的持平平仓/部分平仓功能,以及共享图表工作台。支持对冲账户;作为教育资源,附有记录在案的执行和协调限制。

Session Range Desk MT5

Author: Erdem Mumin Kaynak

总体而言,这种风险量化方法是合理的,尤其是对“OrderCalcProfit()”函数的运用,以及对经纪商成交量步长和最小手数限制的检查。 在将该EA视为适合无人值守运行之前,建议先解决以下问题。高优先级 1. 修正方向性手数计算:“CalcLot()”应使用实际的订单类型、入场价和止损价。 目前,即使最终交易是卖出,计算也是基于买入/买价衍生的价格关系进行的。建议的接口:CalcLot(orderType, entryPrice, stopPrice, targetRisk),然后使用实际的买入/卖出参数调用“OrderCalcProfit()”。 这对差价合约(CFD)、贵金属、指数以及具有非平凡定价/转换特征的金融工具尤为重要。2. 使交易台风险预留操作成为原子操作。当前“MaxDailyRiskPct”执行的读取/检查/更新序列并非原子操作。 两个图表可能同时看到可用风险并同时下单,导致合并后的计划风险敞口超过交易台限额。建议实现:锁定 → 读取 → 验证 → 预留 → 解锁 → 执行 → 对于失败的订单,进行超时/恢复对账。 在此之前,“MaxDailyRiskPct”应明确描述为共享的计划风险阈值,而非硬性风险敞口限额。3. 修复收盘状态处理 当经纪商拒绝平仓时,不要将收盘标记为成功完成。建议的状态区分:已请求收盘 收盘成功 日终平仓失败 → 重试 仅在确认匹配头寸已实际平仓后,才将该操作标记为完成。中等优先级 4. 将计划风险与实际日亏损区分开 面板/文档应区分以下概念: - 未平仓初始止损风险 - 已实现日损益 - 日亏损限额 这些代表不同的风险概念。 5. 添加可选的日亏损/权益保护 若需要账户保护,应添加独立的“MaxDailyLossPct”机制,而非将“MaxDailyRiskPct”用于此目的。该机制应在重启后保持有效,并在达到限额后阻止新增头寸。 6. 改进部分平仓状态 区分以下情况: - 成功平仓 - 经纪商拒绝 - 无法拆分交易量 - 已完成 这将使恢复和诊断更加可靠。 7. 改进重启/日锁定持久化 重启后,应保留每日入账状态并与经纪商的实际持仓进行核对,以避免重复入账的情况。 文档说明 我建议明确说明:“'RiskPercent' 代表在正常执行条件下 预期的初始止损风险敞口。它并不保证账户的最大亏损。'MaxDailyRiskPct' 是一个共享的计划风险敞口阈值,而非全账户净值或每日亏损止损限额。 点差、佣金、滑点、跳空、成交量四舍五入、同时出现的信号以及执行失败都可能导致实际风险敞口/亏损与预期存在差异。」优先级排序 如果下个版本只能进行少量修改:1. 修正买入/卖出手数计算 2. 原子级交易台风险预留 3. 已确认/可重试的收盘平仓 4. 持久化的重启/日开仓状态 5. 可选的硬性每日亏损/净值保护 其底层设计对于教育用途或开源的EA来说已相当不错;这些改动将使风险控制变得更加稳健,且更易于理解。