Oszillierende Durchbruch-Marktstruktur-Änderungsstrategie


Erstellungsdatum: 2023-12-05 15:17:01 zuletzt geändert: 2023-12-05 15:17:01
Kopie: 0 Klicks: 699
1
konzentrieren Sie sich auf
1619
Anhänger

Oszillierende Durchbruch-Marktstruktur-Änderungsstrategie

Überblick

Die Oscillation Breakthrough - Market Structure Shift Strategy ist eine Trend-Tracking-Strategie, die die Beziehungen zwischen verschiedenen Zeitperioden nutzt, um die Veränderungen der Marktstruktur zu identifizieren. Die Strategie verwendet die Beziehungen zwischen verschiedenen Zeitperioden als Signal für die Veränderungen der Marktstruktur, um neue Trendrichtungen zu erfassen.

Strategieprinzip

Die Kernlogik der Strategie besteht darin, die Abwärts- und Aufwärtsverschluckform der kurzen Periodenzeit als Signal für die Veränderung der Struktur des mittleren und langen Marktes zu nutzen. Insbesondere überwacht die Strategie gleichzeitig die K-Linien der mittleren Langzeitzeiten (z. B. die 60-Minuten-Linie) und der kurzen Periodenzeit (z. B. die 15-Minuten-Linie).

Nach dem Eintritt in die Richtung nutzt die Strategie den höchsten oder niedrigsten Preis der kurzen Periode als Stop-Loss, um das Risiko zu kontrollieren. Wenn der Schlusskurs der K-Linie der mittleren und langen Periode den Stop-Loss auslöst, wird die Strategie den Stop-Loss ausgleichen.

Strategische Stärkenanalyse

Diese Strategie hat folgende Vorteile:

  1. Zuverlässige Signale für die Veränderung der Marktstruktur. Nutzen Sie die Beziehungen zwischen den verschiedenen Zyklen, um die Marktstruktur zu beurteilen und vermeiden Sie, dass Sie durch den Lärm eines einzelnen Zyklus irregeführt werden.

  2. Automatische Beurteilung der neuen Trendrichtung. Bei Signalen für eine Veränderung der Marktstruktur wird automatisch ein zusätzlicher Leerlauf vorgenommen, ohne dass manuelle Beurteilungen erforderlich sind.

  3. Risikokontrolle ist vorhanden. Risikokontrolle mit kurzfristigen Höchst- und Tiefstpreisen hilft, einzelne Verluste zu kontrollieren.

  4. Rückzugskontrollen sind relativ gut. Kurzperiodische Maximalwerte werden zur Eröffnung und Beendigung von Positionen genutzt, so dass Rückzugskontrollen zu einem gewissen Grad möglich sind.

Strategische Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Risiko für Fehlentscheidungen bei der Marktstruktur. Wenn der Kurzzeit-Lärm zu groß ist, können die Signale für eine Umstellung der Marktstruktur fehlschlagen und die Periodenparameter müssen angepasst werden.

  2. Risiko einer Trendwende. Wenn ein Markt eine V-Rückkehr erlebt, ist es schwierig, den Rückzug zu kontrollieren. Der Stop-Loss-Algorithmus kann entsprechend angepasst werden.

  3. Risiko von Parameter-Ungleichheit. Die Parameter für die mittlere und kurze Periode sind nicht zeitgerecht eingestellt, die Signalwirkung kann schlechter sein und erfordert wiederholte Optimierungstests.

Richtung der Strategieoptimierung

Die Strategie kann in folgenden Richtungen weiter optimiert werden:

  1. Um die Akkumulation von Indikatoren oder Trendbeurteilungen zu erhöhen, vermeiden Sie falsche Signale bei einer Trendwende.

  2. Optimierung der Parameterübereinstimmung zwischen langen und kurzen Zyklen zur Verbesserung der Signalqualität.

  3. Optimierung von Stop-Loss-Algorithmen durch Einsatz von Technologien wie Machine Learning.

  4. Hinzufügen von zusätzlichen Bedingungen, um falsche Signale zu filtern, wie z. B. die Beurteilung von großen Trends.

  5. Strategiearten zu erweitern, Derivate zu entwickeln und Strategien zu kombinieren.

Zusammenfassen

Die Schokebrecher-Strategie für die Veränderung der Marktstruktur ist insgesamt eine zuverlässigere Tracking-Strategie. Sie kann die Veränderung der Marktstruktur nutzen, um automatisch neue Trendrichtungen zu bestimmen, und die Risikokontrolle ist gut. Als nächstes kann die Strategie in den Bereichen Signalqualität, Optimierung von Stop-Loss-Stopps und Verhinderung von Umkehrungen optimiert werden, um sie zu einem Strategieprodukt auf Geschäftsniveau zu machen.

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