EA-14733 · 突破

OrderExample

一个半自动EA,用户通过点击图表上的买入/卖出按钮,使用OrderSendAsync()异步函数下单。止损和止盈基于26根K线的最高价和最低价计算,并包含基于账户风险百分比的自动手数计算功能。

打开交互版(权益曲线、切换品种)

基本信息

分类突破
风险中等
评分★★☆☆☆
类型交易型 EA
周期M15, H1, H4, D1
指标Highest/Lowest (N-bar extremes)
作者Copyright 2009-2016, MetaQuotes Software Corp. ~ edited By 3rjfx : 2016/01/29

回测结果(H1,约 1 年)

暂未回测:这个 EA 还没能自动转换。

策略分析

该EA的策略概念是基于N周期最高价和最低价的突破交易,属于通道突破类策略。入场条件是用户手动点击图表上的Buy或Sell按钮,EA不自动入场,属于半自动交易。出场条件依赖止损和止盈,止损设在26周期极值的另一侧加2倍点差偏移,止盈设在极值方向加2倍点差偏移,当止损或止盈距当前价格不足20点时会额外偏移minstop个点。仓位管理通过TradeSize()函数实现,根据账户余额和风险百分比自动计算手数,并受合约规模和杠杆影响。资金管理方面,使用RiskPercentage参数控制每笔交易的风险比例,但计算方式是按余额百分比直接除以合约价值/杠杆,而非基于止损距离的风险计算,这可能导致实际风险与预期不符。整体策略简单直接,但缺少对市场趋势方向的判断,完全依赖用户决策。

优势

  • 使用OrderSendAsync()异步下单,不阻塞主线程,适合高频操作场景
  • 包含自动手数计算功能,根据账户余额和风险百分比动态调整仓位
  • 有止损止盈保护机制,且在距离不足时自动偏移,避免过小的止损止盈
  • 包含自动交易权限检查和账户交易权限检查,防止在禁止交易的环境下运行
  • 使用OnTrade()事件处理函数跟踪交易状态变化,便于调试和监控

劣势

  • 资金管理计算方式有缺陷:使用余额/合约价值而非基于止损距离计算风险,实际每笔交易风险不可控
  • iHighest和iLowest函数存在数组越界风险,循环从depth到startPos但未检查depth是否超出数组大小
  • 缺少持仓检查和重复下单保护,用户可能多次点击按钮导致重复开仓
  • 止损止盈逻辑在BuyAsync中tp基于最高价计算但对买入来说方向可能有误,逻辑不够清晰
  • 使用OrderSendAsync()但不检查返回结果的retcode是否为交易成功,仅检查函数调用是否成功
  • 硬编码的参数(xhilo=26, minstop=28)未暴露为可配置输入变量,缺乏灵活性

改进建议

  • 改进资金管理算法:应基于止损距离和风险百分比计算手数,确保每笔交易的最大亏损金额可控
  • 将硬编码参数(xhilo、minstop、20点最小距离阈值等)暴露为可配置的输入变量
  • 增加持仓检查和订单重复提交保护,防止用户多次点击导致重复开仓
  • 在OrderSendAsync()调用后增加retcode详细检查和交易结果回调处理,确保异步订单状态可追踪

风险评估

总体风险: 中等

  • 资金管理计算不基于止损距离,实际风险可能远超预期
  • 缺少持仓检查和重复下单保护,可能导致意外多重开仓
  • iHighest/iLowest函数存在数组越界风险,可能返回错误索引导致止损止盈计算异常
  • 异步下单后缺少交易结果确认机制,订单可能失败但用户不知情

评估得分

代码质量2.0
策略逻辑2.0
风险管理2.0
稳健性2.0
创新性1.0
文档2.0
综合1.8

参数

参数默认值说明
MagicNumber1234567EA唯一标识号
RiskPercentage1.0每笔交易的风险百分比
TPvsSLRatio1.5止盈与止损的倍率比
CalculatedTradeSizetrue是否自动计算手数
ManualyLotsSize"If Set CalculatedTradeSize = False, Input TradeLotSize Below"手动手数说明文字
TradeLotSize0.1手动输入的手数大小

同类 EA:突破

回测是历史模拟,不代表未来收益,不构成投资建议。

订阅每周 Arena 周报

每周一封邮件:排名变化、新信号和新研究。不发垃圾邮件,随时可以退订。