跳至正文
全部策略

策略

策略回测:2MOMEMA(geraked,MIT)忠实移植:快动量穿越 100,由 9 根慢动量及 EMA10>EMA34 排序确认;波段止损 1:1,多空(SOLUSDT.BYBIT 1H,纯 OHLCV,单仓) | Stratmill

结局: 已放弃

SolTwoMomEmaSwingBracketLS

结局总结

SolTwoMomEmaSwingBracketLS 是应用户要求忠实移植 2MOMEMA 专家顾问的策略,并将其用于 Bybit SOL 永续合约的 1 小时 K 线,以便进行多空交易。假设说明指出,公开脚本的忠实移植在此流水线中屡次失败,只有计入真实手续费的回测才能作出判断。但该测试并未进行:运行经过 2 次迭代后,在编码阶段因「coding_stuck_3_timeouts」而放弃,没有回测、优化或分析师结论。该策略是否具有优势仍未经测试。

假设

忠实陈述 geraked 编写的 MQL5 专家顾问 '2MOMEMA'(https://github.com/geraked/metatrader5/blob/d3eb29c382acf715727d5cd6a0414151e821fc2d/Experts/2MOMEMA.mq5, MIT 许可,并注明作者)。该 EA 在收盘价上使用两个 MT5 动量指标(iMomentum = 100 * close[t] / close[t-N]),快速周期为 FastPeriod=10,慢速周期为 SlowPeriod=34。它还在收盘价上使用两个周期相同的 EMA(EMA10、EMA34)。每个 NEW BAR 仅评估一次信号,且仅在 CLOSED 根 K 线上评估:shift 1 是刚刚收盘的 K 线,shift 2 是前一根 K 线。入场信号为快速动量线交叉 100 线。过去 9 根已收盘 K 线上,每一根都必须同时满足慢速动量和 EMA 排列确认。止损设在最近 SLLookback=10 根 K 线的摆动极值,并偏移 SLDev=60 点。止盈为止损距离的 TPCoef(1.0) 倍,形成 1:1……展开收起

忠实陈述 geraked 编写的 MQL5 专家顾问 '2MOMEMA'(https://github.com/geraked/metatrader5/blob/d3eb29c382acf715727d5cd6a0414151e821fc2d/Experts/2MOMEMA.mq5, MIT 许可,并注明作者)。该 EA 在收盘价上使用两个 MT5 动量指标(iMomentum = 100 * close[t] / close[t-N]),快速周期为 FastPeriod=10,慢速周期为 SlowPeriod=34。它还在收盘价上使用两个周期相同的 EMA(EMA10、EMA34)。每个 NEW BAR 仅评估一次信号,且仅在 CLOSED 根 K 线上评估:shift 1 是刚刚收盘的 K 线,shift 2 是前一根 K 线。入场信号为快速动量线交叉 100 线。过去 9 根已收盘 K 线上,每一根都必须同时满足慢速动量和 EMA 排列确认。止损设在最近 SLLookback=10 根 K 线的摆动极值,并偏移 SLDev=60 点。止盈为止损距离的 TPCoef(1.0) 倍,形成 1:1 组合。仓位规模按止损风险 Risk=1% 的权益(RISK_DEFAULT)计算。任何时候只持有一个仓位(MultipleOpenPos=false)。仓位仅通过 SL/TP 组合在 ONLY 时退出:没有信号退出、反转退出或时间退出。所有可选模块默认均为 OFF,移植版本中也保持关闭:Trail、Grid、News、EquityDrawdownLimit=0、Reverse、IgnoreSL、IgnoreTP、SpreadLimit=-1。声明了 SLCoef=1.0,但此文件从未使用它,因此开发者不得为它臆造用途。平台映射:源代码是没有固定交易品种的 FX/CFD EA,因此我们将其用于 SOLUSDT.BYBIT(Bybit 线性 USDT 永续合约,往返费用约 0.11%),采用 1-HOUR K 线。原因:(1)规则需要做空,因此必须在保证金交易场所运行;(2)这是纯价格规则,无需额外数据源,因此没有补充数据源的场所也适用(L160);(3)Bybit 上的实验数量为 1.2%,而 Binance 上为 67%;(4)Bybit 提供多年期 1 小时历史数据(L168);(5)Bybit 上的 SOL 尚未进入流水线。在 1 小时 K 线上,10 根 K 线的摆动止损距入场大约 1.5-3%,因此 1:1 目标约为往返费用 0.11% 的 14-27x 倍。RISK NOTE(L167):公开脚本的忠实移植在这里屡次失败。提交此策略是因为用户要求忠实移植。源代码中的表现声明未经验证,我们将以实际费用进行回测并据此判断。

移植版本保留了 EA 的指标定义(MT5 iMomentum = 100*C/C[-N];EMA 以首个收盘价为种子)、已收盘 K 线上的 shift-1/shift-2 穿越、9 根 K 线确认(将 i=1..9 作为连续 K 线计数器跟踪,效果等同)、对 1..10 根 K 线计算的 SL_SWING 止损并加上 SLDev 偏移、TP = TPCoef*|in-sl|、RISK_DEFAULT 1%-止损仓位规模,以及 MultipleOpenPos=false。只有 SL/TP 括号单会使仓位退出。由于源文件从未使用 SLCoef,因此不使用该参数。平台适配:(1)SLDev 的「点」映射为 60 x 个交易品种价格跳动单位,因此在 SOL 上(每跳 0.01)相当于 $0.60,约为 0.4%。(2)信号 K 线收盘时以市价成交,作为 MT5 下一根 K 线开盘时 Ask/Bid 的替代。(3)括号单由交易平台管理(STOP_MARKET + LIMIT,OUO),通过重写 _submit_entry 并传入每笔交易的止损距离来构建。(4)MT5 的 MarginLimit 300% 转换为权益 x 杠杆的名义金额上限(3x),杠杆也用于仓位规模计算。源策略中的 Trail/Grid/News/Reverse/EquityDD/SpreadLimit 均关闭且未实现。注意:按 1%-止损计算仓位规模,并使用 1:1 括号单,意味着每笔交易的优势必须超过约 0.11% RT,止损距离约为 1.5-3%;源代码中的表现声明未经验证。

coding_stuck_3_timeouts

实现

忠实移植 geraked 的 MIT 2MOMEMA EA,用于 SOLUSDT.BYBIT 1H。快速 Momentum(10) 上穿 100,且最近 9 根已收盘 K 线上,慢速 Momentum(34) 均高于 100、EMA10 均高于 EMA34 时做多;做空条件相反。止损设在 10 根 K 线的波段低点或高点,并偏移 60 个价格跳动单位;目标为止损距离的 1x,止损风险为权益的 1%。一次仅持有一个仓位,且仅通过交易平台管理的 SL/TP 括号单退出。

迭代历史

sandbox_timeout:验证失败(第 3 层——沙盒回测):烟雾测试在约 20000 根 K 线的窗口(833 天的 SOLUSDT.BYBIT-1-HOUR-LAST-EXTERNAL)上超过 300 秒墙钟时间限制。这几乎总是意味着逐 K 线工作量随历史长度增长,例如反复扫描完整的资金费率或补充数据序列,或在每根 K 线上于 calculate_signal()/on_bar() 内重建列表并调用 min()/sorted()。应在 __init__ 中预先计算排序后的时间戳数组 ONCE 并使用 bisect,或按时间戳缓存查询,使每根 K 线的开销为 O(log n) 而非 O(n)。

结局总结

再次尝试前,应先查明编码为何持续超时,例如简化移植过程或缩小任务范围,因为该策略的优势从未经过测试。

运行在编码阶段因「coding_stuck_3_timeouts」而放弃,共经过 2 次迭代。后续的验证、回测审查、优化、分析师审查和风险审查均未进行。

忠实移植 geraked 的 MIT 许可 2MOMEMA MQL5 EA,用于 SOLUSDT.BYBIT 1H 多空交易:快速 Momentum(10) 穿越 100 线时入场,前提是最近 9 根已收盘 K 线上,Momentum(34) 与 EMA10 相对 EMA34 的排序每根均一致;仅通过 1:1 SL/TP 括号单退出,止损设在 10 根 K 线的波段极值并偏移 60 点,每笔交易承担权益 1% 的风险。

没有任何表现数据:回测报告为空,也没有优化报告,因此未生成收益、夏普比率或交易笔数数据。

分析

2MOMEMA

Stratmill 是研究与模拟交易工具,不提供财务建议,也不是经纪商。回测与模拟结果均为假设性结果。交易存在亏损风险。