Tick KK Park
- Experten
- Version: 2.10
- Aktivierungen: 5
NakedK_Trend EA 完整说明(中英双语) 1. 策略概述 / Strategieübersicht 中文:
NakedK_Trend.mq5 是一个基于 裸K形态突破 的全自动交易机器人(Expert Advisor),运行于 MetaTrader 5 平台。其核心思想是:通过监测价格的连续波动方向(连续上涨或下跌次数达到阈值),识别可能的突破信号,并以前一根K线的高低点为参考放置突破挂单(Buy Stop / Sell Stop)。同时集成了 倍投(马丁格尔)恢复机制、尾随止盈、固定止损止盈、日盈亏限制、交易时段控制、日尾盘全平 等风控模块。挂单默认在 10秒后未成交自动取消,避免挂单堆积。该策略属于中高频趋势突破类,适合波动性较高的品种和周期。 Englisch:
NakedK_Trend.mq5 ist ein vollautomatischer Handelsroboter (Expert Advisor), der auf nackten K-Bar-Ausbruchsmustern basiert und auf der MetaTrader 5-Plattform läuft. Seine Kernidee: Überwachung der aufeinanderfolgenden Richtungsbewegungen des Preises (aufeinanderfolgende Auf-/Abwärtszählungen, die einen Schwellenwert erreichen), Identifizierung potenzieller Ausbruchssignale und Platzierung von Pending Orders (Buy Stop / Sell Stop) unter Verwendung des Hochs/Tiefs des vorherigen Balkens als Referenz. Darüber hinaus sind Martingale-Erholung (Verdopplung nach Verlust), Trailing-Stop-Profit, fester Stop-Loss / Take-Profit, tägliche Gewinn-/Verlust-Limits, Handelssitzungskontrolle, Zwangsschluss am Tagesende und andere Risikomanagement-Module integriert. Schwebende Aufträge werden automatisch nach 10 Sekunden storniert, wenn sie nicht ausgeführt werden, um einen Auftragsstau zu vermeiden. Diese Strategie ist ein mittel- bis hochfrequenter Trendausbruchtyp, der für volatile Instrumente und Zeitrahmen geeignet ist. 2. 核心策略逻辑 / Kernstrategie Logik 2.1 信号生成 / Signalgenerierung - 中文:
实时监控当前价格的连续上涨或下跌次数。当连续上涨次数 ≥ ConsecutiveThreshold(默认 3),并且当前卖价(Bid)高于前一根K线的最高价(prevHigh)时,产生买入突破信号,放置 Buy Stop 挂单;当连续下跌次数 ≥ ConsecutiveThreshold,并且当前卖价低于前一根K线的最低价(prevLow)时,产生卖出突破信号,放置 Sell Stop 挂单。 - English:
Echtzeit-Überwachung von aufeinanderfolgenden Kursbewegungen. Wenn die aufeinanderfolgenden Aufwärtsbewegungen ≥ ConsecutiveThreshold (Standardwert 3) und das aktuelle Bid > das High des vorherigen Balkens (prevHigh) sind, wird ein Buy Breakout Signal generiert und eine Buy Stop Order platziert. Wenn die aufeinanderfolgenden Abwärtsbewegungen ≥ ConsecutiveThreshold und das aktuelle Bid < das Low des vorherigen Balkens (prevLow) sind, wird ein Sell Breakout Signal generiert und eine Sell Stop Order platziert. 2.2 挂单管理 / Pending Order Management - 中文:
挂单放置前会检查以下条件:当前K线是否已交易过(MaxTradesPerBar,默认每K线最多1次)、持仓数量是否已达上限(MaxPositions,默认1)、K线波动范围是否达到最小要求(MinBarPoints,默认30点)。挂单带有止损和止盈(固定点数),并在放置后开始计时(PendingCancelSec,默认10秒),超时则自动删除。 - Englisch:
Bevor eine schwebende Order platziert wird, prüft der EA, ob in diesem Balken bereits ein Handel stattgefunden hat (MaxTradesPerBar, Standardwert 1 pro Balken), ob die Anzahl der Positionen MaxPositions (Standardwert 1) erreicht hat und ob der Balkenbereich das Minimum erfüllt (MinBarPoints, Standardwert 30 Punkte). Aufträge werden mit festem Stop Loss und Take Profit platziert, dann beginnt ein Countdown (PendingCancelSec, Standardwert 10 Sekunden). Wenn die Order nicht innerhalb der Zeitspanne ausgeführt wird, wird sie automatisch storniert. 2.3 倍投(马丁格尔)恢复 / Martingale Recovery - 中文:
当一笔交易亏损平仓后,该方向的倍投层级(buyMartingaleLevel 或 sellMartingaleLevel)增加1(上限 MaxMartingaleLevel,默认10)。随后,同一个方向的下一次交易将以更大手数开仓(市价单,非挂单),手数 = FixedLot × (MartingaleMultiplier ^ level)。盈利平仓后重置层级为0。 - Englisch:
Wenn ein Handel mit Verlust geschlossen wird, erhöht sich das Martingale-Niveau für diese Richtung (buyMartingaleLevel / sellMartingaleLevel) um 1 (begrenzt auf MaxMartingaleLevel, Standardwert 10). Der nächste Handel in derselben Richtung wird mit einer größeren Lot-Größe eröffnet, die als FixedLot × (MartingaleMultiplier ^ Level) berechnet wird. Das Level wird nach einem profitablen Abschluss auf 0 zurückgesetzt. 2.4 时间控制 / Zeitsteuerung - 中文:
可设定每日允许交易的时间段(StartTime~EndTime,默认 02:30~23:30)。非交易时段只管理现有持仓,不产生新信号。还可设定日尾盘全平时间(EndOfDayCloseTime,默认 23:50),到达该时间后自动平掉所有持仓并删除挂单。 - Englisch:
Benutzer können eine tägliche Handelssitzung definieren (StartTime ~ EndTime, Standard 02:30 ~ 23:30). Außerhalb der Session werden nur bestehende Positionen verwaltet; es werden keine neuen Signale generiert. Es gibt auch eine Zwangsschlusszeit am Tagesende (EndOfDayCloseTime, Standardwert 23:50). Bei Erreichen dieser Zeit werden alle Positionen geschlossen und schwebende Aufträge gelöscht. 2.5 日盈亏限制 / Tägliche Gewinn-/Verlustlimits - 中文:
每日初始余额记录在 dailyStartBalance 中。当日盈利百分比 ≥ DailyProfitLimit(默认300%)时,全平并停止当日交易。注意该参数实际为百分比值,300%意味着盈利300%才会触发,实际使用中需调整。亏损限制未单独实现,但可以通过净值变化间接控制(实际上代码仅实现了获利限制,亏损限制未主动检查,但建议用户自行调整)。 - Englisch:
Der EA zeichnet den anfänglichen Tagessaldo auf. Wenn der tägliche Gewinnprozentsatz ≥ DailyProfitLimit (Standardwert 300%) ist, werden alle Positionen geschlossen und der Handel für den Tag beendet. (Hinweis: Dieser Parameter ist ein Prozentsatz; 300% bedeutet einen Gewinn von 300% vor dem Auslösen. Die Verlustgrenze ist nicht explizit codiert.) 2.6 尾随止盈 / Trailing Stop Profit - 中文:
当持仓的浮动盈利 ≥ TrailingActivate(默认300点)时,启动尾随:将止损移动到当前价格减去(多头)或加上(空头)TrailingStep(默认100点)的位置,且只在移动方向有利时执行。 - Englisch:
Wenn der gleitende Gewinn ≥ TrailingActivate (Standardwert 300 Punkte) ist, beginnt das Trailing: Der Stop-Loss wird auf den aktuellen Kurs minus (für Long) oder plus (für Short) TrailingStep (Standardwert 100 Punkte) verschoben, und zwar nur, wenn die Bewegung das Stop-Niveau verbessert.3. 参数说明 / Parameter Beschreibung 参数名称 默认值 说明(中文) Beschreibung (Englisch) MagicNumber 12345 EA魔术码,用于识别订单 EA magic number to identify orders LotMode 0 手数模式:0=固定手数,1=余额比例 Lot mode: 0=fest, 1=ausgeglichenes Verhältnis FixedLot 0.01 固定手数(LotMode=0时有效) Feste Losgröße (wenn LotMode=0) BaseBalancePerLot 1000.0 每1000资金交易0.01手(LotMode=1时) Trade 0.01 lot per 1000 balance UseMartingale true 启用倍投 Enable martingale MartingaleMultiplier 1.5 倍投乘数 Martingale-Multiplikator MaxMartingaleLevel 10 最大倍投层级 Maximaler Martingale-Level ConsecutiveThreshold 3 连续波动次数达到此值触发信号 Schwankungszahl zum Auslösen des Signals MaxTradesPerBar 1 每K线最大交易次数 Maximale Trades pro Bar MinBarPoints 30 最小K线范围(点),小于此值不开仓 Minimaler Barbereich (Punkte) SlippagePoints 30 允许滑点(点) Erlaubter Slippage TrailingActivate 300 尾随激活所需盈利点数 Gewinnpunkte zur Aktivierung des Trailing TrailingStep 100 尾随步长(点) Trailing-Schritt (Punkte) StopLossPoints 1000 固定止损点数 Feste Stop-Loss-Punkte UseFixedTP true 使用固定止盈 Use fixed take profit FixedTakeProfitPoints 1200 固定止盈点数 Feste Take-Profit-Punkte MaxPositions 1 最大同时持仓数 Maximale gleichzeitige Positionen StartTime "02:30" 交易开始时间 Handelsstartzeit EndTime "23:30" 交易结束时间 Handelsendzeit EnableTimeControl true 启用时间段控制 Zeitsteuerung aktivieren EndOfDayCloseTime "23:50" 日尾盘全平时间 Tagesendzeit EnableEndOfDayClose true 启用日尾盘全平 Enable end-of-day close DailyProfitLimit 300.0 日获利限制(百分比) Tägliches Gewinnlimit (%) PendingCancelSec 10 挂单超时秒数 Pending Order Timeout (Sekunden) 4. 代码结构 / Code Struktur 中文:
EA 由以下主要函数组成: - OnInit() - 初始化变量、指标、打印信息。 - OnTick() - 主循环,按顺序执行:超时检查 → 新日重置 → 日盈亏检查 → 尾盘全平 → 时间段检查 → 新K线处理 → 管理持仓 → 倍投恢复 → 信号生成 → 日盈亏再次检查。 - CheckPendingOrdersTimeout() - 遍历挂单队列,删除超时或已失效的挂单。 - ManageExistingPositions() - 对每个持仓执行尾随止盈并检查是否需要设置初始止损。 - ApplyTrailingStop() - 尾随逻辑。 - CheckMartingaleRecovery() - 当倍投恢复标志为真时,立即用市价单开仓(不经过挂单流程)。 - GenerateSignals() - 更新价格波动历史,检查连续波动次数和价格突破条件,调用 ExecuteOrder。 - ExecuteOrder(orderType, useMarket) - 统一执行函数:若 useMarket=true 则开市价单,否则开挂单。为修复 Invalid stops 错误,采用了两步法:先开单/挂单时不设止损止盈,开单成功后再用 PositionModify 或 OrderModify 设置止损止盈。 - UpdatePriceHistory() / CountConsecutiveDirections() - 维护20个周期的价格和方向历史。 - CloseAllPositions() / DeleteAllPendingOrders() - 全平全删。 - OnTradeTransaction() - 监听成交事件,更新倍投层级。 - 其他辅助函数如 NormalizeVolume, IsNewDay, ResetDailyBalance, CheckDailyProfit, IsInTimeRange, IsTimeEqualOrAfter 等。 Englisch:
Der EA besteht aus den folgenden Hauptfunktionen: - OnInit() - Initialisierung. - OnTick() - Hauptschleife, die nacheinander folgende Prüfungen durchführt: Timeout für ausstehende Aufträge → Zurücksetzen auf einen neuen Tag → Tägliche P/L-Prüfung → Tagesabschluss → Zeitsitzung → Neuer Balken → Positionen verwalten → Martingal-Erholung → Signalerzeugung → Tägliche P/L-Neuprüfung. - CheckPendingOrdersTimeout() - Iteriert die Warteschlange für ausstehende Aufträge, entfernt abgelaufene oder ungültige Aufträge. - ManageExistingPositions() - Wendet den Trailing-Stop an und setzt den anfänglichen SL, falls er fehlt. - ApplyTrailingStop() - Trailing-Logik. - CheckMartingaleRecovery() - Eröffnet eine Markt-Order sofort, wenn das Recovery-Flag gesetzt ist. - GenerateSignals() - Aktualisiert die Kurshistorie, prüft die aufeinanderfolgenden Bewegungen und den Preis im Vergleich zu den Extremen des vorherigen Balkens und ruft dann ExecuteOrder auf. - ExecuteOrder(orderType, useMarket) - Einheitliche Ausführung. Verwendet einen zweistufigen Ansatz (erst ohne SL/TP öffnen, dann ändern), um Fehler bei ungültigen Stops zu vermeiden. - UpdatePriceHistory() / CountConsecutiveDirections() - Führt eine 20-Perioden-Preis- und Richtungshistorie. - CloseAllPositions() / DeleteAllPendingOrders() - Schließt alle Positionen und löscht alle schwebenden Aufträge. - OnTradeTransaction() - Hört auf abgeschlossene Transaktionen, um die Martingalebenen zu aktualisieren. - Hilfsfunktionen: NormalizeVolume, IsNewDay, ResetDailyBalance, CheckDailyProfit, IsInTimeRange, IsTimeEqualOrAfter, etc. 5. 风险与注意事项 / Risk & Considerations 中文: - 倍投风险:马丁格尔策略在连续亏损时手数会呈指数增长(1.5^层级),可能导致巨大亏损。虽然 MaxMartingaleLevel 默认为10,但实际建议设置在3~5层以内,且初始手数要足够小。 - 挂单超时:10秒自动删除挂单可以防止堆积,但也可能导致信号被快速跳过(滑点或流动性不足时)。可适当增大 PendingCancelSec。 - 最小K线范围:MinBarPoints=30 会在盘整期间过滤掉大部分信号,避免反复虚假突破。 - 日获利限制:默认300%极高,实际可能永远达不到。建议根据自己的风控需求调整为2%~5%或使用账户货币金额限制(但代码未实现)。 - 经纪商限制:不同经纪商对止损止盈的最小距离有不同要求(SYMBOL_TRADE_STOPS,LEVEL)。代码已自动适配,但若仍出现 Invalid stops,需检查日志中的 StopsLevel 值并手动调整 minStopDist 计算。 - 不建议用于实盘:未经充分回测和优化的策略不建议直接用于真实账户。马丁格尔策略风险极高,尤其在小账户中可能快速爆仓。 Englisch: - Martingale-Risiko: Die Losgröße wächst nach aufeinanderfolgenden Verlusten exponentiell (1,5^Level), was zu einem großen Drawdown führen kann. Obwohl MaxMartingaleLevel standardmäßig auf 10 eingestellt ist, wird dringend empfohlen, den Wert innerhalb von 3-5 Levels zu halten und ein sehr kleines Startlot zu verwenden. - Pending Order Timeout: Der 10-Sekunden-Timeout verhindert, dass sich Orders stapeln, kann aber bei schnellen Märkten zu verpassten Signalen führen. Erhöhen Sie bei Bedarf PendingCancelSec. - Minimum Bar Range: MinBarPoints=30 filtert viele Signale in ruhigen Märkten heraus und vermeidet falsche Ausbrüche. Passen Sie die Werte entsprechend der Volatilität des Instruments an. - Tägliches Gewinnlimit: Der Standardwert von 300% ist extrem hoch und wird möglicherweise nie erreicht. Legen Sie für ein angemessenes Risikomanagement einen realistischen Prozentsatz fest (z. B. 2%-5%) oder ändern Sie den Code so, dass er absolute Währungswerte verwendet. - Broker-Einschränkungen: Verschiedene Broker erzwingen unterschiedliche SL/TP-Mindestabstände (SYMBOL_TRADE_STOPS_LEVEL). Der EA passt sich automatisch an; falls dennoch ungültige Stops auftreten, überprüfen Sie die Log-Ausgabe für StopsLevel und passen Sie die minStopDist-Berechnung an. - Nicht für den Live-Handel ohne Test: Die Strategie wurde nicht vollständig optimiert. Martingale-Strategien bergen ein hohes Risiko und können ein kleines Konto schnell aufblähen. Führen Sie immer zuerst einen Backtest und einen Forwardtest auf einem Demokonto durch. 6. 总结 / Zusammenfassung 中文:
NakedK_Trend.mq5 是一款功能较为全面的裸K突破EA,融合了挂单交易、倍投恢复、尾随止盈、时间控制、日盈亏限制和自动超时删除等特性。代码结构清晰,参数灵活。但马丁格尔的本质决定了其高风险特性,使用者必须深刻理解并做好风控。建议先在策略测试器中详细回测,并针对不同品种优化参数。 Englisch:
NakedK_Trend.mq5 ist ein umfassender Naked-K-Breakout-EA, der schwebende Aufträge, Martingale-Erholung, Trailing-Stops, Zeitkontrolle, Tageslimits und automatische Auftragsstornierung kombiniert. Der Code ist gut strukturiert und verfügt über flexible Parameter. Der Martingale-Charakter birgt jedoch ein hohes Risiko; die Benutzer müssen ein angemessenes Risikomanagement verstehen und umsetzen. Gründliches Backtesting und die Optimierung der Parameter für verschiedene Instrumente werden vor einem Live-Einsatz dringend empfohlen.
