EA-14733 · 突破
OrderExample
一个半自动EA,用户通过点击图表上的买入/卖出按钮,使用OrderSendAsync()异步函数下单。止损和止盈基于26根K线的最高价和最低价计算,并包含基于账户风险百分比的自动手数计算功能。
打开交互版(权益曲线、切换品种)基本信息
回测结果(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
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
MagicNumber | 1234567 | EA唯一标识号 |
RiskPercentage | 1.0 | 每笔交易的风险百分比 |
TPvsSLRatio | 1.5 | 止盈与止损的倍率比 |
CalculatedTradeSize | true | 是否自动计算手数 |
ManualyLotsSize | "If Set CalculatedTradeSize = False, Input TradeLotSize Below" | 手动手数说明文字 |
TradeLotSize | 0.1 | 手动输入的手数大小 |
同类 EA:突破
回测是历史模拟,不代表未来收益,不构成投资建议。