Schwingungsdurchbruch - Strategie zur Veränderung der Marktstruktur

Schriftsteller:ChaoZhang, Datum: 2023-12-05 15:17:01
Tags:

img

Die Oscillation Breakthrough - Market Structure Shift Strategy (ICT_MSS) ist eine Trend-folgende Strategie, die Marktstrukturverschiebungen anhand der Beziehungen zwischen verschiedenen Zeitrahmen identifiziert.

Strategie Logik

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.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Zuverlässige Marktstrukturverschiebungssignale: Die Verwendung von Zeitrahmenbeziehungen verhindert, dass man durch Lärm aus einem einzigen Zeitrahmen irregeführt wird.

  2. Automatisch bestimmt neue Trendrichtung. Veränderungen der Marktstruktur lösen automatisch lange/kurze Einträge aus, ohne manuelles Urteilen zu benötigen.

  3. Wirksame Risikokontrolle: Kurze Zeitrahmen für die Risikokontrolle helfen, Einzelhandelsverluste zu begrenzen.

  4. 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.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Risiko einer falschen Beurteilung der Marktstruktur. Die Signale können bei hohem Lärm in kurzen Zeitrahmen versagen. Die Zeitrahmenparameter müssen angepasst werden.

  2. Risiko einer Trendumkehr. Strategie kämpft, um den Rückzug während V-förmiger Umkehrungen zu kontrollieren. Stop-Loss-Algorithmus muss angepasst werden.

  3. Parameter-Missmatch-Risiko: Eine falsche Kombination aus langem/kurzem Zeitrahmen führt zu schlechter Signalqualität und erfordert Optimierungstests.

Optimierungsrichtlinien

Weitere Optimierungsrichtungen für die Strategie sind:

  1. Hinzufügen von Trendfiltern, um falsche Signale während der Trendumkehr zu vermeiden.

  2. Optimieren Sie die Abgleichbarkeit der Zeitframe-Parameter, um die Signalqualität zu verbessern.

  3. Nutzen Sie maschinelles Lernen für optimale Gewinn-/Stop-Loss-Verhältnisse.

  4. Fügen Sie zusätzliche Filter hinzu, wie z.B. einen größeren Zeitrahmen.

  5. Strategievarianten erweitern, um ein Strategieensemble zu bilden.

Schlussfolgerung

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)
//

Mehr