EA-52148 · 机器学习
Neurotest
这是一个基于简单前馈神经网络(单隐层ReLU激活)的MT5 EA,使用OHLCV数据预测价格方向。在回测期间通过动量梯度下降进行在线训练,当sigmoid输出大于0.6或小于0.4时分别开多仓或空仓。风险管理包括ATR动态止损、日度和总回撤限制以及点差过滤。
打开交互版(权益曲线、切换品种)基本信息
回测结果(H1,约 1 年)
暂未回测:这个 EA 还没能自动转换。
策略分析
该EA的策略概念是利用一个简单的3层前馈神经网络(5输入-隐层-1输出)从历史K线的开盘价、最高价、最低价、收盘价和成交量中学习价格运动模式。入场条件为:神经网络sigmoid输出大于0.6时做多,小于0.4时做空,处于0.4-0.6之间则不交易。出场条件依赖ATR动态止损和2倍风险回报比的止盈,没有跟踪止损或基于信号的反向平仓逻辑。仓位管理基于账户权益和每笔交易最大风险百分比计算手数,并根据经纪商的最小/最大手数和手数步长进行规范化。资金管理设有每日最大亏损5%和总最大亏损10%的硬限制,当每日利润低于1%目标时会惩罚性降低学习率。然而归一化逻辑存在严重缺陷——仅用单个样例的值计算min-max会导致所有输入归一化为0,且没有检查是否已存在同方向持仓,可能重复开仓。
优势
- 实现了基于神经网络的自适应交易信号生成,概念上具有创新性
- 具备完整的资金管理框架,包括每日/总回撤限制和动态止损
- 使用ATR动态止损适应市场波动性,风险回报比设为1:2较为合理
- 模型参数可持久化保存,支持EA重启后继续使用已训练权重
- 包含点差过滤机制,避免在高点差环境下入场
劣势
- 归一化逻辑严重错误——用单一样本计算min-max导致所有输入归一化为0,网络无法有效学习
- 没有检查现有持仓,每个tick都可能重复开仓,导致无限加仓风险
- 没有新K线检查,每个tick都会触发交易逻辑,造成冗余计算和潜在重复下单
- 网络结构过于简单(仅5个原始价格输入+单隐层5神经元),难以捕捉有效的市场模式
- ATR指标句柄在GetDynamicStopLoss中每次调用都创建但不释放,会导致资源泄漏
- 训练数据使用原始价格而非差分或收益率,缺乏平稳性,网络难以泛化
改进建议
- 修复归一化逻辑——应在训练前用整个数据集的统计量(均值/标准差或全局min-max)进行归一化,并使用差分或对数收益率替代原始价格
- 添加持仓检查和新K线检查,防止重复开仓和不必要的每tick计算;将ATR指标句柄移至OnInit中创建并在OnDeinit中释放
- 增加验证集和早停机制以防止过拟合,考虑使用更稳健的优化器(如Adam)和更合理的网络架构设计
风险评估
总体风险: 高风险
- 没有持仓检查,每个tick可能重复开仓,导致仓位无限积累
- 归一化逻辑错误导致神经网络输出无意义,交易决策实质上是随机的
- ATR句柄资源泄漏可能导致长时间运行后指标句柄耗尽
- 使用原始价格而非平稳序列训练,网络可能过拟合到特定价格水平
评估得分
代码质量2.0
策略逻辑1.0
风险管理3.0
稳健性1.0
创新性3.0
文档2.0
综合2.0
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
MaxRiskPerTrade | 1.0 | 每笔交易最大风险百分比 |
DailyLossLimit | 5.0 | 每日最大亏损百分比 |
TotalLossLimit | 10.0 | 总最大亏损百分比 |
MagicNumber | 12345 | 订单唯一标识符 |
EnableLogging | true | 启用详细日志记录 |
InitialLearningRate | 0.01 | 神经网络初始学习率 |
HiddenLayerSize | 5 | 隐层神经元数量 |
MaxEpochs | 1 | 每tick最大训练轮数 |
ModelFileName | neural_network.dat | 模型保存/加载文件名 |
ATRPeriod | 14 | ATR周期用于动态止损 |
MaxSpread | 20.0 | 最大允许点差(点) |
同类 EA:机器学习
回测是历史模拟,不代表未来收益,不构成投资建议。