- 显示:
- 19
- 等级:
- 已发布:
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
突破平仓实验室:唐奇安突破策略与三种平仓方式并列展示
该策略标记“海龟”风格的唐奇安通道突破,并在每次突破后同时执行三种平仓方式:ATR追踪止损、海龟平仓通道以及固定目标价。一个面板会显示在您的交易品种中哪种平仓方式收益最高(以R为单位,包含点差)。该策略不重绘,并为专家顾问(EA)预留了缓冲区。
为何采用三种平仓策略
突破系统的成败关键在于平仓策略。入场条件很简单,且大家对此都认同:价格收盘高于最近20根K线中的最高点,就买入。但之后的争议才刚刚开始。是使用ATR追踪止损?还是采用“海龟”策略的10根K线平仓通道?还是设定固定的2R目标后立即平仓?
我找到的每款突破指标都只选择一种止盈方式并将其绘制出来。在做出选择之前,我想在自己的交易品种上,针对相同的入场点位,同时观察这三种止盈方式的效果。因此,该指标会将每次突破信号并行应用于这三种止盈策略,并将结果并列展示。
突破的定义
- 入场通道由前 InpEntryBars 根K线(默认20根,龟派系统1)中的最高高点和最低低点构成。
- 买入信号是指某根已收盘的K线收盘价高于通道高点,而前一根K线未达到该高点。卖出信号则与此相反。仅计入首次突破通道的收盘价,因此即使趋势强劲,也不会每根K线都产生箭头信号。
- 交易从下一根K线的开盘价开始。初始止损位为InpStopATR乘以ATR的距离(2.0 × ATR(20),即“海龟”策略中的“2N”)。
- 可选的趋势过滤器仅保留200日EMA同向的突破信号。默认情况下该功能处于关闭状态。
三种平仓方式
- A. ATR 追踪止损。止损位跟随自入场以来的最佳价格,距离为 InpTrailATR 乘以 ATR(默认值为 3.0),且永不回撤。
- B. 乌龟平仓通道。止损位跟随多头头寸中最近 InpExitBars 根K线中的最低低点(默认10根,系统1),或空头头寸中的最高高点。
- C. 固定目标。在 InpTargetR 乘以初始风险(默认值为 2R)处设置止盈,并保留初始止损位。
每个结果均以R为单位进行衡量,其中1R等于从入场点到初始止损点的距离。信号K线的点差将作为成本扣除。 若价格跳空突破止损位,则按该K线的开盘价成交,而非止损价。当止损位和目标位均位于同一根K线内部时,仍计入止损,因为单根K线无法判断两者孰先孰后。
每次突破均单独计分,因此交易可能重叠。该面板是对同一组入场点不同平仓结果的对比,并非包含仓位规模计算的账户模拟。
面板显示的内容
- 突破次数(按多头和空头分类)以及仍有多少笔交易处于未平仓状态。
- 针对每次平仓:已平仓交易、胜率、盈利因子、平均R值以及R值的总和。
- 对于您选择绘制的平仓点(InpDrawExit):多头和空头的总和分别显示,以便您查看结果是否由某一方主导。
所选的平仓点也会在图表上标出。每笔交易都会显示入场线及其R值结果,而最新交易的止损位则以虚线标出。
黄金测试结果
XAUUSD,MetaQuotes模拟数据,默认参数。2025年模拟结果涵盖截至2025年12月31日的360天。2026年模拟结果涵盖截至2026年9月18日的260天。
| XAUUSD | 交易 | 胜率 | PF | 总和 |
|---|---|---|---|---|
| H4 2025,A点平仓(ATR追踪止损) | 129 | 43.4% | 1.45 | +23.08R |
| H4 2025,B点(10根K线通道) | 129 | 41.1% | 2.34 | +66.20R |
| H4 2025,C点平仓(2R目标) | 129 | 45.7% | 1.68 | +47.83R |
| 2026年H4,A点平仓 | 76 | 35.5% | 1.10 | +3.46R |
| H4 2026,B口 | 76 | 35.5% | 1.70 | +22.35R |
| H4 2026,C口 | 75 | 38.7% | 1.26 | +11.99R |
| 2025年上半年,A口 | 465 | 37.6% | 1.32 | +70.32卢布 |
| 2025年上半年,出口B | 465 | 37.8% | 1.23 | +51.18R |
| 2025年上半年,出口C | 465 | 37.8% | 1.21 | +60.32R |
| 2026年上半年,A口 | 270 | 39.6% | 1.21 | +25.14R |
| 2026年上半年,出口B | 270 | 40.4% | 1.29 | +35.15R |
| 2026年上半年,出口C | 269 | 38.3% | 1.23 | +39.06R |
全部十二种策略均呈正收益。在H4时间框架下,两年间“龟式”止盈通道均表现最佳,而ATR追踪止盈表现最弱。在H1时间框架下则没有明显的赢家:2025年追踪止盈领先,2026年固定目标止盈领先。这正是该面板存在的意义。 即使是同一只标的,"最佳平仓策略"也会因时间周期和年份的不同而变化。
在大家兴奋之前,先看关键部分。2025年黄金涨幅巨大,这一点在拆分数据中有所体现。 在H4时间框架下采用退出策略B时,99笔多头交易获利+79.4R,30笔空头交易亏损-13.2R。2026年黄金价格双向波动,两类交易均实现盈利:42笔多头交易获利+14.9R,34笔空头交易获利+7.5R。
为了考察其中有多少是黄金趋势的影响,我使用相同的默认参数,对2026年同一时间窗口内的三个外汇货币对在H4图表上进行了测试:
| H4 2026 | 平仓A总和(PF) | 平仓B总和(PF) | 平仓C总和(PF) |
|---|---|---|---|
| 欧元/美元 | -11.74R (0.68) | -3.86R (0.89) | -5.97R (0.88) |
| 英镑兑美元 | -9.21R (0.77) | -3.15R (0.91) | +6.90R (1.13) |
| 美元兑日元 | +1.30R (1.03) | +0.73R (1.02) | +3.03R (1.06) |
持平至负值。突破需要市场存在趋势,而在此期间黄金确实呈现趋势,但这些货币对大多没有。因此,我将黄金的数据解读为“在黄金趋势期间,突破策略奏效”,而非证明它们总是有效。
图1. XAUUSD 4小时图,2026年7月下旬至9月中旬:突破箭头、入场通道以及在止盈点B下的每笔交易结果
图2. 2025年和2026年XAUUSD H4图表面板,标注了 止盈点B
输入数据
| 输入 | 默认 | 功能说明 |
|---|---|---|
| InpEntryBars | 20 | 入场通道的长度(以K线为单位) |
| InpExitBars | 10 | 退出通道B的长度(以K线为单位) |
| InpATRPeriod | 20 | ATR周期 |
| InpStopATR | 2.0 | 初始止损,ATR倍数 |
| InpTrailATR | 3.0 | 平仓追踪距离,ATR倍数 |
| InpTargetR | 2.0 | C 止盈点,R 的倍数 |
| InpUseTrend | false | 仅保留趋势EMA同向的突破信号 |
| 趋势EMA输入 | 200 | 趋势EMA周期,图表时间周期 |
| InpDrawExit | A. ATR追踪止损 | 在图表上绘制平仓点并发送至缓冲区6至9 |
| 回溯天数 | 365 | 记分卡中的历史数据天数 |
| InpDrawDays | 60 | 绘制交易线的天数 |
| InpShowPanel | true | 显示面板 |
| InpPanelCorner | 左上角 | 面板角 |
| InpAlertPopup | true | 在出现新突破时弹出提示 |
| InpAlertPush | false | 出现新的突破时发送推送通知 |
对于经典的“乌龟系统 2”,请将 InpEntryBars 设置为 55,将 InpExitBars 设置为 20。
在专家顾问中使用
突破信号记录在收盘价超出通道的K线上,因此一旦该K线收盘,专家顾问(EA)便会在第1个时间步长处读取该信号。箭头标记会保留在整个加载的历史数据中,而不仅限于评分窗口内。 我在策略测试器中验证过,EA在实盘中接收到的信号与运行结束时缓冲区中的信号完全一致:2025年黄金H1周期为473/473,H4周期为131/131。
| 缓冲区 | 内容 |
|---|---|
| 0 | 买入突破,值为计划入场价(下一根K线的开盘价),否则为EMPTY_VALUE |
| 1 | 卖出突破,格式相同 |
| 2, 3 | 通道高点和低点入场 |
| 4 | 止损位设在最新交易平仓点下方 |
| 5 | 突破K线上的初始止损位 |
| 6 至 9 | 基于最后一根已收盘K线绘制止损点的统计表:已平仓交易、盈利次数、盈利总R值、亏损总R值 |
int handle; datetime lastBar = 0; int OnInit() { handle = iCustom(_Symbol, PERIOD_H4, "BreakoutExitLab"); return(handle == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED); } void OnTick() { //--- 突破在收盘K线时确认,因此每出现一根新K线检查一次 datetime bar = iTime(_Symbol, PERIOD_H4, 0); if(bar == lastBar) return; lastBar = bar; double buy[1], sell[1], stop[1]; if(CopyBuffer(handle, 0, 1, 1, buy) < 1 || CopyBuffer(handle, 1, 1, 1, sell) < 1 || CopyBuffer(handle, 5, 1, 1, stop) < 1) return; if(buy[0] != EMPTY_VALUE) Print("Breakout buy, initial stop ", stop[0]); if(sell[0] != EMPTY_VALUE) Print("Breakout sell, initial stop ", stop[0]); }
该指标特意未设置输入组。MQL5会将每个“输入组”视为iCustom()的参数,其后的每个值都会向后偏移一位。
在构建面板时我学到了一点小知识:图表标签最多只能包含63个字符。我最初设计的面板行长度超标,导致MetaTrader在数字中间截断了内容,因此现在将行长度控制得较短。
限制
结果源自K线数据,因此单根K线内部事件的顺序无法确定。仅收取点差费用,不收取佣金,且除止损位因跳空导致的滑点外,无其他滑点。交易按单笔计分且可能重叠,因此这些总和并不构成权益曲线。 上述所有数据均来自某家经纪商在两个黄金走势强劲的周期内的数据。
阿里·拉杰普特
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/77687
ATS Confirmed Swings - non-repainting swing highs and lows
只有在N根已收盘K线确认后,才会标记波段高点和低点,因此绘制的波段线不会移动或消失。
ATR Trailing Stop (Pine Script Port)
Pine Script ATR 追踪止损指标的 MQL5 移植版:nLoss = ATR × 倍数,在上涨趋势中止损位随价格下移,在下跌趋势中随价格上移,当价格收盘突破该位置时,止损位会反转(并显示买入/卖出箭头)。 包含一个 Python 参考移植版本,以及一个等效性测试,用于验证两者是否均与 Pine 语义(na/nz/系列历史数据)的逐根 K 线逐字转录结果一致。
