MACD-Schlusskurs Median Turtle Hybrid-Strategie


Erstellungsdatum: 2023-10-30 12:16:20 zuletzt geändert: 2023-10-30 12:16:20
Kopie: 1 Klicks: 630
1
konzentrieren Sie sich auf
1617
Anhänger

MACD-Schlusskurs Median Turtle Hybrid-Strategie

Überblick

Die Strategie nutzt die MACD Gold-Dead-Fork-Signale, die Beziehung zwischen dem K-Line-Knapp-Preis und der Mittellinie und die Preisschwankungen, um den Zeitpunkt des Eintritts und Ausstiegs zu bestimmen. Die Strategie setzt ein Wiedereintritts- und Korrekturmechanismus ein, um gleichzeitig Risiken zu kontrollieren und stabile Erträge zu erzielen, um mehr Handelsmöglichkeiten zu erhalten.

Strategieprinzip

Die Strategie basiert auf folgenden Prinzipien:

  1. Verwenden Sie die MACD-Analyse der Schnell- und Langzeitanalysen, um den Markt für Mehr- und Leerköpfe sowie die spezifischen Einstiegspunkte zu beurteilen.

  2. Verwenden Sie die K-Linie, um zu beurteilen, ob der Abschlusspreis mit der Mittellinie verbunden ist, um zu beurteilen, ob ein hoher Trend beendet ist, und wo der Ausgangspunkt liegt.

  3. Es wurde ein Wiedereintrittsmechanismus eingerichtet, um die Gewinnchancen zu erhöhen, wenn die MACD-Runde nach dem Ende der aktuellen Runde im Einklang mit den Trends fortgesetzt wird.

  4. Es wurde ein Korrektur-Eintrittsmechanismus eingerichtet, der Positionen hinzufügt, wenn der Preis sich teilweise korrigiert, aber noch nicht umgekehrt ist. Dies ist eine Intra-Trend-Anpassung.

  5. Zusammenfassend können Sie Ihre Positionen dynamisch anpassen, um so viel wie möglich in einem Trend zu gewinnen und schnell zu gehen, wenn der Trend zu Ende geht.

Konkret beurteilt die Strategie zunächst, ob die MACD-Schnell- und Langzeilen Gold- oder Dead-Fork-Phänomene aufweisen, wenn Gold- oder Dead-Fork-Phänomene auftreten, dann wird die K-Linie als Ende des Trends bewertet und als Ende des Trends bewertet.

Darüber hinaus hat die Strategie auch einen Wiedereintrittsmechanismus eingerichtet, d. h. nach dem Ende des Trends in der ursprünglichen Richtung, wenn der MACD weiterhin ein Signal in der gleichen Richtung zeigt, wird die Strategie den Trend erneut aufnehmen. Gleichzeitig wurde ein Korrektur-Eintrittsmechanismus eingerichtet, der die Strategie angemessen erhöht, wenn der Preis geringfügig angepasst wird, aber noch nicht vollständig umgekehrt ist.

Mit diesen Einstellungen kann die Strategie ihre Position dynamisch im Trend anpassen, mehr Ein- und Ausgänge machen und höhere Gewinne erzielen, wenn das Risiko kontrolliert wird.

Strategische Vorteile

Diese Strategie kombiniert mehrere Indikatoren und bietet folgende Vorteile:

  1. Der MACD kann Trends und Wendepunkte identifizieren und spezifische Einstiegspunkte bestimmen.

  2. Die Schlusspreis-Mittellinie-Beziehung ist eine sehr präzise Beurteilung des Ende-Trendes.

  3. Die Rücktrittsmechanismen erhöhen die Anzahl der Positionen und die Effizienz der Kapitalnutzung.

  4. Die Eintrittsmechanismen wurden geändert, um die Trends rechtzeitig zu erfassen.

  5. Strategie hat eine hohe Häufigkeit, aber ein kontrollierbares Risiko, was zu höheren Gewinnfaktoren führt.

  6. Die Parameter sind anpassbar und können für verschiedene Sorten und Verhältnisse optimiert werden.

  7. Die Strategie ist klar und verständlich, der Code ist präzise geschrieben und die Festplatte ist einfach zu bedienen.

  8. Die Daten sind ausreichend und zuverlässig, die Ergebnisse sind leicht zu überprüfen.

Strategisches Risiko

Die wichtigsten Risiken der Strategie sind:

  1. Die Wahrscheinlichkeit, dass der MACD falsche Signale sendet, muss in Kombination mit anderen Indikatoren überprüft werden.

  2. Eine übermäßige Stop-Loss-Einstellung auf der Großstufe kann durch eine Überschreitung der Extrema-Situation ausgeschlossen werden.

  3. Der Wiedereintritt und die Korrektur des Eintritts erhöhen die Häufigkeit der Operationen und erfordern eine Kontrolle der Kapitalnutzung.

  4. Die Korrektur des Eintritts in eine rückläufige Entwicklung könnte zu größeren Verlusten führen.

  5. Die Handelsvarianten und Parameter-Einstellungen müssen optimiert werden und gelten nicht für alle Sorten.

  6. Es ist notwendig, kontinuierlich zu überprüfen und zu optimieren, um die Parameter an den Markt anzupassen.

  7. Die Einwirkung von Gleitpunktkosten auf die Festplatte muss berücksichtigt werden.

Die Risikomanagement-Maßnahmen dazu umfassen: Setzen Sie eine Stop-Loss-Schranke, um einzelne Verluste zu begrenzen. Bewerten Sie die Kapitalnutzung und halten Sie eine angemessene Cash-Reserve.

Richtung der Strategieoptimierung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. In Kombination mit anderen Indikatoren wird die Signalprüfung durchgeführt, um die Signalgenauigkeit zu verbessern.

  2. Setzen Sie eine dynamische, adaptive Stop-Loss-Standard.

  3. Optimierung der Logik der Bedingungen für Wiedereintritt und Korrektur des Zulassungsvorgangs.

  4. Optimierung der Parameter der Unterart und Einstellung der optimalen Parameterkombination.

  5. Optimierung der Kapitalnutzungsquote, Festlegung von Kapitalbeschränkungen für Wiedereingänge und Korrekturen.

  6. Die Kombination von Quantitätsindikatoren verhindert die Verluste bei einer rückläufigen Entwicklung.

  7. Ein zusätzlicher Ausgang, wie z.B. die Einrichtung eines mobilen Stopps.

  8. Erwägen Sie, die Strategie als Trading-Roboter zu verpacken, um den Handel zu automatisieren.

  9. Erhöhung der Festplatten-Betrachtungsfaktoren, wie z. B. der Kosten für die Gleitpunkte.

Durch diese Optimierungen können die Stabilität, Anpassungsfähigkeit, Automatisierung und die Wirksamkeit der Strategien weiter verbessert werden.

Zusammenfassen

Diese Strategie integriert die Verwendung von MACD-Indikatoren, K-Line-Endpreisanalyse und mehrere Einstiegsmechanismen, um die Risiken zu kontrollieren und die Trends zu erfassen. Die Strategie ist eine effiziente quantitative Handelsstrategie. Die Strategie hat die Vorteile einer hohen Betriebsfrequenz, einer guten Kapitalnutzung und geringer Schwierigkeit, aber sie muss auch auf Risikokontrolle und Strategieoptimierung achten.

Strategiequellcode
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 2h
basePeriod: 15m
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/
// © Puckapao

//@version=4
// strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00)
// Getting inputs
reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2)
sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)
ema_period = input(title="EMA Period", type=input.integer, defval=21)

// Get date
startDate = input(title="Start Date", type=input.integer,
     defval=19, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=09, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2017, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=3, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true

reenter_cnt = 0
reenter_cnt := nz(reenter_cnt[1])

sculp_cnt = 0
sculp_cnt := nz(sculp_cnt[1])

close_cnt = 0
close_cnt := nz(close_cnt[1])

on_long = false
on_long := nz(on_long[1])

on_short = false
on_short := nz(on_short[1])

sculp = false
reenter = false
slowdown = false

ema = ema(close, ema_period)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

cross_up = crossover(macd, signal)
cross_down = crossunder(macd, signal)

if (inDateRange)

    over_macd = macd > 0 and signal > 0 ? true : false
    under_macd = macd < 0 and signal < 0 ? true : false
    over_water = close > ema ? true : false
    under_water = close < ema ? true : false
    slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true)
    reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false)
    sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false))
    
    if(reenter == true)
        if(reenter_cnt < reenter_delay)
            reenter_cnt := reenter_cnt + 1
    else
        if(reenter_cnt > 0)
            reenter_cnt := reenter_cnt - 1
                    
    if(sculp == true)
        if(sculp_cnt < sculp_delay)
            sculp_cnt := sculp_cnt + 1
    else
        if(sculp_cnt > 0)
            sculp_cnt := sculp_cnt - 1
        
    if(slowdown == false)
        if(close_cnt < 2)
            close_cnt := close_cnt + 1
        else
            close_cnt := 0
    
    // plotchar(fork_cnt, "fork count", "")
    // plotchar(spoon_cnt, "spoon count", "")

    // Entry
    if (cross_up == true)
        strategy.entry("long", strategy.long, comment = "long", alert_message = "long")
        on_long := true
        on_short := false
    if (cross_down == true)
        strategy.entry("short", strategy.short, comment = "short", alert_message = "short")
        on_short := true
        on_long := false
        
    // Sculp bottom / top
    if (sculp == true and sculp_cnt >= sculp_delay)
        if (hist >= 0)
            strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short")
        else
            strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long")
        
        sculp_cnt := 0
        sculp := false
            
    // Re-Entry
    if (reenter == true and reenter_cnt >= reenter_delay)
        if (hist >= 0)
            strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long")
        else
            strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short")
            
        reenter_cnt := 0
        reenter := false
            
    // Close
    strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long")
    strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short")
    strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long")
    strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short")
    strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long")
    strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short")
    
    if (slowdown)
        if (hist >= 0)
            on_long := false
        else
            on_short := false


plotchar(slowdown, "close", "")
plotchar(reenter, "reenter", "")
plotchar(reenter_cnt, "reenter count", "")
plotchar(sculp, "sculp", "")
plotchar(sculp_cnt, "sculp count", "")