MT4开盘线马丁文字整理

发布时间:2025年04月28日 阅读:36 次

EA逻辑过程(最终版)

1. 基本设置

  • 交易品种:挂载在哪个图表品种(如EUR/USD、XAUUSD),就交易该品种。

  • 时间框架:不限制,入场基于日线(D1)开盘价。

  • Magic Number

    • 做多:Magic = 111。

    • 做空:Magic = 222。

    • 仅管理本图表品种的订单(Symbol和Magic过滤)。

  • 初始手数:固定0.01手。

  • 跨日支持:支持跨日交易,日线开盘价每日更新。

2. 交易时间

  • 默认设置

    • 开仓开始时间:08:00。

    • 开仓结束时间:16:00。

  • 跨日逻辑

    • 如果开始时间 > 结束时间(如17:00-08:00),允许从当天开始时间到次日结束时间开仓。

  • 实现

    • 使用TimeCurrent()检查服务器时间是否在开仓范围内。

    • 现有订单不受时间限制(可继续加仓或平仓)。

3. 波幅计算(更新)

  • 前N天平均波幅

    • 计算图表上可用的前N天日线(D1)数据(N=1到7)的平均波幅(高点 - 低点,单位:点)。

    • 如果只有1天数据,则波幅 = 当天高点 - 低点;2天则取2天平均,依次类推,最多7天。

    • 公式:AvgVolatility = Σ(High[i] - Low[i]) / N,其中i为前1到N天。

  • 图表显示

    • 在图表左上角显示:N-Day Avg Volatility: XXXX points(N为实际天数)。

    • 每Tick更新。

  • 实现

    • 使用iBars(Symbol(), PERIOD_D1)检查可用K线数量。

    • 遍历前1到min(7, 可用天数)的日线数据,计算平均波幅。

    • 挂载7天后自然累积7天数据,无需特殊处理。

4. 入场条件

  • 买入(做多)

    • 当前价格(Bid) >= 日线开盘价 + EntryPoints(默认300点,用户可设置)。

    • 当前时间在开仓时间范围内。

    • 无现有做多订单(Magic = 111)。

    • 开仓:0.01手买单(Magic = 111)。

  • 卖出(做空)

    • 当前价格(Bid) <= 日线开盘价 - EntryPoints(默认300点,用户可设置)。

    • 当前时间在开仓时间范围内。

    • 无现有做空订单(Magic = 222)。

    • 开仓:0.01手卖单(Magic = 222)。

  • 实现

    • 使用iOpen(Symbol(), PERIOD_D1, 0)获取日线开盘价。

    • 使用OrderSend开仓。

5. 马丁加仓策略

  • 策略选择

    • 策略一:波幅 ≤ 3000点(用户可设置,0为禁用)。

    • 策略二:波幅 ≤ 6000点(用户可设置,0为禁用)。

    • 策略三:波幅 ≤ 10000点(用户可设置,0为禁用)。

    • 优先级:选择最低满足条件的阈值(例如波幅2000点,仅触发策略一)。

    • 根据N天平均波幅选择策略:

  • 加仓参数

    • 加仓倍数:1.05。

    • 加仓间隔:300点(报价点数)。

    • 最大加仓次数:30次。

    • 整体止盈:100点(报价点数)。

    • 锁仓:用户设置(true/false)。

    • 加仓倍数:1.08。

    • 加仓间隔:200点(报价点数)。

    • 最大加仓次数:40次。

    • 整体止盈:100点(报价点数)。

    • 锁仓:用户设置(true/false)。

    • 加仓倍数:1.1。

    • 加仓间隔:100点(报价点数,如EUR/USD的0.0100,XAUUSD的1.00)。

    • 最大加仓次数:50次。

    • 整体止盈:100点(报价点数)。

    • 锁仓:用户设置(true/false)。

    • 策略一

    • 策略二

    • 策略三

  • 加仓逻辑(以做多为例):

    • 遍历订单,获取最新订单的开仓价和手数。

    • 使用OrderSend开新订单。

    • 新手数 = 最后订单手数 × 加仓倍数(1.1/1.08/1.05)。

    • 示例:初始0.01手,策略一加仓后为0.011手,再加仓为0.0121手。

    • 已有做多订单(Magic = 111)。

    • 当前价格(Bid) <= 最后订单开仓价 - 加仓间隔(100/200/300点)。

    • 未达到最大加仓次数(50/40/30)。

    • 触发条件

    • 加仓手数

    • 实现

  • 达到最大加仓次数

    • 遍历订单,计算总手数。

    • 使用OrderSend开多笔反向订单,按0.1手拆分。

    • 设置标志位,停止监控锁仓后的订单。

    • 如果锁仓 = false:不执行锁仓,订单继续等待止盈或移动止损。

    • 如果锁仓 = true

    • EA停止监控所有订单(Magic = 111和222),等待人工处理。

    • 计算同方向订单总手数(例如做多50次后总手数为X)。

    • 开反向订单(Magic = 222),使用固定0.1手单位:

    • 示例:总手数2.01手 → 开20笔0.1手 + 1笔0.01手(共21笔卖单,Magic = 222)。

    • 整数部分:每0.1手开一笔订单(例如总手数2.01手,开20笔0.1手)。

    • 剩余部分:不足0.1手直接开对应手数(例如0.01手开1笔0.01手)。

    • 清除止盈价:将所有同方向订单(Magic = 111)的止盈(TP)设为0(使用OrderModify)。

    • 锁仓手数

    • 锁仓后处理

    • 停止加仓。

    • 锁仓逻辑

    • 实现

6. 出场条件(更新)

  • 整体止盈

    • 如果总盈利(包括点差、佣金、利息) >= 100点(转换为账户货币),关闭所有同方向订单。

    • 订单的TP优先触发,整体止盈作为备用。

    • 做多(Magic = 111):

    • 做空(Magic = 222):

    • 每次加仓后重新计算平均止盈价,更新所有同方向订单的TP(使用OrderModify)。

    • 平均开仓价 = Σ(订单开仓价 × 手数) / 总手数。

    • 止盈价(TP) = 平均开仓价 + 0.0100(EUR/USD)或1.00(XAUUSD)。

    • 止盈价(TP) = 平均开仓价 - 0.0100(EUR/USD)或1.00(XAUUSD)。

    • 100点止盈指报价点数(例如EUR/USD的0.0100,XAUUSD的1.00)。

    • 计算平均止盈价格

    • 整体平仓

  • 移动止损(更新):

    • 如果EnableTrailingStop = false,不执行移动止损。

    • 遍历所有订单(Magic = 111或222),计算浮盈(OrderProfit()或当前价格 - 开仓价)。

    • 如果浮盈 >= TrailingStopPoints,设置或更新SL(使用OrderModify)。

    • 初始止损(SL):

    • 动态调整:

    • 做多:SL = 当前价格 - TrailingStopPoints(例如Bid=1.2100,SL=1.2050)。

    • 做空:SL = 当前价格 + TrailingStopPoints(例如Ask=1.2000,SL=1.2050)。

    • 做多:新SL = 当前价格 - TrailingStopPoints.

    • 做空:新SL = 当前价格 + TrailingStopPoints.

    • 每当价格朝有利方向移动10点(报价点数,例如EUR/USD的0.0010,XAUUSD的0.10),更新SL:

    • 10点调整间隔确保频繁更新但不过于敏感。

    • 对所有订单(Magic = 111或222)应用移动止损。

    • 当订单浮盈 >= TrailingStopPoints(默认50点)。

    • 开关:用户可设置是否启用移动止损(EnableTrailingStop,默认true)。

    • 点数:用户可设置移动止损点数(TrailingStopPoints,默认50点,报价点数,如EUR/USD的0.0050,XAUUSD的0.50)。

    • 触发条件

    • 移动止损规则

    • 实现

  • 锁仓

    • 如果锁仓 = true

    • 如果锁仓 = false

    • 清除所有同方向订单的止盈价(TP = 0)。

    • 开反向订单(0.1手单位,剩余不足0.1手单独开)。

    • EA停止监控所有订单,等待人工处理。

    • 不锁仓,订单继续运行,等待止盈或移动止损触发.

    • 达到最大加仓次数后:

7. 错误处理

  • 订单管理

    • 确保只管理本图表品种和指定Magic的订单。

    • 检查OrderSendOrderModify是否成功(处理滑点、点差过大、订单限制)。

  • 时间同步

    • 使用TimeCurrent()判断交易时间。

  • 波幅计算

    • 检查可用日线数据(iBars),若无数据则暂停波幅相关逻辑。


逻辑流程图(文字描述)

  1. 初始化

    • 获取日线开盘价(iOpen(PERIOD_D1, 0))。

    • 计算前N天平均波幅(N=1到7),显示在图表:N-Day Avg Volatility: XXXX points

    • 设置参数:初始手数0.01,Magic 111/222,交易时间08:00-16:00,策略参数(3000/6000/10000点,1.1/1.08/1.05倍,100/200/300点间隔,50/40/30次,100点止盈),移动止损(启用,默认50点)。

  2. 每Tick运行

    • 如果EnableTrailingStop = true

    • 如果EnableTrailingStop = false:不执行移动止损。

    • 做多:设置SL = 当前价格 - TrailingStopPoints.

    • 做空:设置SL = 当前价格 + TrailingStopPoints.

    • 遍历所有订单(Magic = 111或222)。

    • 如果订单浮盈 >= TrailingStopPoints(默认0.0050):

    • 每当价格有利移动0.0010(10点),更新SL。

    • 计算平均开仓价 = Σ(订单开仓价 × 手数) / 总手数。

    • 设置止盈价:做多TP = 平均开仓价 + 0.0100,做空TP = 平均开仓价 - 0.0100。

    • 更新所有同方向订单的TP(OrderModify)。

    • 如果总盈利 >= 100点(账户货币),关闭所有同方向订单。

    • 根据波幅选择策略(3000/6000/10000点)。

    • 如果已有做多订单 且 Bid <= 最后订单价 - 加仓间隔(100/200/300点) 且 未达最大加仓次数(50/40/30):

    • 达到最大加仓次数:

    • 开新买单,手数 = 最后手数 × 加仓倍数(1.1/1.08/1.05)。

    • 清除所有做多订单的止盈价(TP = 0)。

    • 计算总手数(例如2.01手)。

    • 开反向订单(Magic = 222):20笔0.1手 + 1笔0.01手。

    • 停止监控所有订单,等待人工处理。

    • 如果锁仓 = true

    • 如果锁仓 = false:停止加仓,等待止盈/止损。

    • 如果Bid >= 日线开盘价 + 300点 且 无做多订单,开0.01手买单(Magic=111)。

    • 如果Bid <= 日线开盘价 - 300点 且 无做空订单,开0.01手卖单(Magic=222)。

    • 更新日线开盘价和N天波幅,刷新图表显示。

    • 检查当前时间是否在开仓范围内(08:00-16:00或跨日17:00-08:00)。

    • 入场检查

    • 加仓检查(以做多为例):

    • 止盈处理

    • 移动止损

    • 做空逻辑类似。

  3. 结束

    • 持续监控,直到锁仓触发(停止监控)或手动移除EA。


推荐理由

  1. 移动止损(所有订单,50点默认,10点调整)

    • 所有订单:确保每笔订单都能锁定利润,降低整体风险,适合马丁加仓策略的高订单量。

    • 50点触发:100点止盈的一半,平衡利润锁定和趋势跟随。

    • 10点调整:频繁但不过于敏感,适配EUR/USD和XAUUSD。

    • 用户开关:提供灵活性,允许禁用移动止损以测试不同场景。

    • 可调点数:用户可根据品种或策略调整(例如XAUUSD设100点,EUR/USD设30点)。

  2. N天波幅

    • 使用可用数据(1到7天)计算波幅,适应EA刚挂载时的场景。

    • 7天后自然累积完整数据,无需复杂逻辑。

  3. 锁仓

    • 固定0.1手单位简化手数拆分,停止监控符合“人工处理”需求。


注意事项

  1. 点数适配

    • 100点止盈和50点移动止损按报价点数(EUR/USD的0.0100/0.0050,XAUUSD的1.00/0.50)处理。

    • 代码使用MarketInfo(Symbol(), MODE_POINT)自动适配5位/3位报价。

  2. 锁仓后处理

    • 锁仓后EA停止监控所有订单(Magic = 111和222)。建议人工处理前检查订单状态(可通过MT4终端查看)。

    • 如果需要锁仓日志(例如记录锁仓时间、手数),请明确。

  3. 移动止损性能

    • 对所有订单应用移动止损可能增加OrderModify调用,代码将优化(如限制Tick频率)。

    • 如果订单数量过多(例如50笔),建议测试性能。

  4. 波幅初始数据

    • EA刚挂载时若只有1天数据,波幅可能偏低,可能触发策略一。请确认是否需要最低天数限制(例如至少3天)。

  5. 测试建议

    • 移动止损(所有订单,50点触发)。

    • 锁仓(0.1手拆分,停止监控)。

    • N天波幅(1到7天)。

    • 跨日时间(17:00-08:00)。

    • 在MT4 demo账户测试EUR/USD和XAUUSD,验证:

    • 建议测试高波幅场景(如新闻事件)和少数据场景(刚挂载1天)。


下一步

  1. 确认逻辑

    • 移动止损:所有订单,50点触发,10点调整,用户可设置开关和点数。

    • N天波幅:1到7天数据,动态计算。

    • 锁仓:0.1手单位,锁仓后停止监控。

    • 止盈:100点报价点数,平均止盈价写入订单。

    • 请审阅上述逻辑,特别是:

    • 如果需要调整(例如移动止损点数改为30点、添加锁仓日志、最低波幅天数),请告诉我。

  2. 是否编写EA

    • 入场、加仓、止盈、移动止损、锁仓逻辑。

    • N天波幅图表显示。

    • 跨日时间处理。

    • 错误处理(滑点、点差、订单限制)。

    • 如果逻辑正确,我可以提供完整的MQL4代码(.mq4文件),包括:

    • 同时提供MT4安装和回测指南。

    • 如果你只想要伪代码或进一步优化逻辑,请明确。



Tag:
相关文章

发表评论: