Die Oscillation Breakthrough - Market Structure Shift Strategy (ICT_MSS) ist eine Trend-folgende Strategie, die Marktstrukturverschiebungen anhand der Beziehungen zwischen verschiedenen Zeitrahmen identifiziert.
Die Kernlogik dieser Strategie besteht darin, kurzfristige Abwärts- und Aufwärtsschwungmuster als Signale für längere Zeitrahmenmarktstrukturverschiebungen zu verwenden. Insbesondere überwacht die Strategie gleichzeitig einen längeren Zeitrahmen (z. B. 60m-Bars) und einen kürzeren Zeitrahmen (z. B. 15m-Bars). Wenn auf dem kürzeren Zeitrahmen ein abwärtsschwimmender roter Balken erscheint, während der längere Zeitrahmenbalken grün ist, wird festgestellt, dass eine Marktstruktur aufgetreten ist und eine lange Position eingenommen wird. Wenn auf dem kürzeren Zeitrahmen ein aufwärtsschwimmender grüner Balken erscheint, während der längere Zeitrahmenbalke rot ist, wird festgestellt, dass eine Marktstrukturverschiebung aufgetreten ist und eine kurze Position eingenommen wird.
Nach dem Eintritt in eine Richtungsposition nutzt die Strategie den kurzen Zeitrahmen High/Low, um einen Stop-Loss zu setzen, um das Risiko zu kontrollieren.
Die Vorteile dieser Strategie sind:
Zuverlässige Marktstrukturverschiebungssignale: Die Verwendung von Zeitrahmenbeziehungen verhindert, dass man durch Lärm aus einem einzigen Zeitrahmen irregeführt wird.
Automatisch bestimmt neue Trendrichtung. Veränderungen der Marktstruktur lösen automatisch lange/kurze Einträge aus, ohne manuelles Urteilen zu benötigen.
Wirksame Risikokontrolle: Kurze Zeitrahmen für die Risikokontrolle helfen, Einzelhandelsverluste zu begrenzen.
Relativ bessere Zugriffskontrolle: Die Verwendung von kurzen Zeitrahmen für den Einstieg und den Stop-Loss kann dazu beitragen, die Zugriffskontrolle in gewissem Maße zu kontrollieren.
Die wichtigsten Risiken dieser Strategie sind:
Risiko einer falschen Beurteilung der Marktstruktur. Die Signale können bei hohem Lärm in kurzen Zeitrahmen versagen. Die Zeitrahmenparameter müssen angepasst werden.
Risiko einer Trendumkehr. Strategie kämpft, um den Rückzug während V-förmiger Umkehrungen zu kontrollieren. Stop-Loss-Algorithmus muss angepasst werden.
Parameter-Missmatch-Risiko: Eine falsche Kombination aus langem/kurzem Zeitrahmen führt zu schlechter Signalqualität und erfordert Optimierungstests.
Weitere Optimierungsrichtungen für die Strategie sind:
Hinzufügen von Trendfiltern, um falsche Signale während der Trendumkehr zu vermeiden.
Optimieren Sie die Abgleichbarkeit der Zeitframe-Parameter, um die Signalqualität zu verbessern.
Nutzen Sie maschinelles Lernen für optimale Gewinn-/Stop-Loss-Verhältnisse.
Fügen Sie zusätzliche Filter hinzu, wie z.B. einen größeren Zeitrahmen.
Strategievarianten erweitern, um ein Strategieensemble zu bilden.
Die ICT_MSS-Strategie ist eine allgemein zuverlässige Trendfolgestrategie. Sie bestimmt automatisch eine neue Trendrichtung auf der Grundlage von Veränderungen der Marktstruktur und verfügt auch über eine gute Risikokontrolle.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jl01794 //@version=5 strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500) // INPUTS Time_Frame = input.timeframe("60", title="Focused Time Frame") FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)") // // SECURITY DATA [FOR ONE TIMEFRAME REFERENCE] FTF_Close = request.security(syminfo.tickerid, Time_Frame, close) FTF_Open = request.security(syminfo.tickerid, Time_Frame, open) FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2)) FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2)) FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close) FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open) // TIME BASED CLOSE AND OPEN _close = FTF_Close _open = FTF_Open _LTFclose = FTFLTF_Close _LTFopen = FTFLTF_Open // CANDLE STATE greenCandle = close > open redCandle = close < open LTFgreenCandle = FTFLTF_Close > FTFLTF_Open LTFredCandle = FTFLTF_Close < FTFLTF_Open // ENGULFING TIMEFRAME REFERENCE FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle) FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle) FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle) FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle) //-------------------------------------------------------------------------------------------------------------- //ENGULFING_FTF_LTF B_EnP_mss = FTFLTF_redCandle[1] and // 1E PIVOT BUY FTFLTF_greenCandle // B_EnPs_mss = FTFLTF_greenCandle[1] and // 1E PIVOT SELL FTFLTF_redCandle // //-------------------------------------------------------------------------------------------------------------- display_LTF = timeframe.isintraday and timeframe.multiplier <= 15 //-------------------------------------------------------------------------------------------------------------- // STORED DATAS var float EH_MSS1 = na var float EL_MSS1 = na var bool can_draw = false var line l1_mss = na var line l1s_mss = na //-------------------------------------------------------------------------------------------------------------- // MSS BUY if (B_EnPs_mss) and (display_LTF) EH_MSS1 := FTFLTF_High can_draw := true l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_High > EH_MSS1) can_draw := false else line.set_x2(l1_mss, bar_index) // // MSS SELL if (B_EnP_mss) and (display_LTF) EL_MSS1 := FTFLTF_Low can_draw := true l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_Low < EL_MSS1) can_draw := false else line.set_x2(l1s_mss, bar_index) //-------------------------------------------------------------------------------------------------------------- // ORDER // BUY longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1] openOr = FTFLTF_High //SELL shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1] openOrs = FTFLTF_Low if (longCondition_mssB) strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB) // if (shortCondition_mssS) strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS) // // EXIT long_tp = open < FTFLTF_Close[1] short_tp = open > FTFLTF_Close[1] //if (long_tp) //strategy.close("Buy", qty_percent = 100, when = long_tp) // //if (short_tp) //strategy.close("Sell", qty_percent = 100, when = short_tp) //