
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.
Die Strategie basiert auf folgenden Prinzipien:
Verwenden Sie die MACD-Analyse der Schnell- und Langzeitanalysen, um den Markt für Mehr- und Leerköpfe sowie die spezifischen Einstiegspunkte zu beurteilen.
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.
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.
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.
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.
Diese Strategie kombiniert mehrere Indikatoren und bietet folgende Vorteile:
Der MACD kann Trends und Wendepunkte identifizieren und spezifische Einstiegspunkte bestimmen.
Die Schlusspreis-Mittellinie-Beziehung ist eine sehr präzise Beurteilung des Ende-Trendes.
Die Rücktrittsmechanismen erhöhen die Anzahl der Positionen und die Effizienz der Kapitalnutzung.
Die Eintrittsmechanismen wurden geändert, um die Trends rechtzeitig zu erfassen.
Strategie hat eine hohe Häufigkeit, aber ein kontrollierbares Risiko, was zu höheren Gewinnfaktoren führt.
Die Parameter sind anpassbar und können für verschiedene Sorten und Verhältnisse optimiert werden.
Die Strategie ist klar und verständlich, der Code ist präzise geschrieben und die Festplatte ist einfach zu bedienen.
Die Daten sind ausreichend und zuverlässig, die Ergebnisse sind leicht zu überprüfen.
Die wichtigsten Risiken der Strategie sind:
Die Wahrscheinlichkeit, dass der MACD falsche Signale sendet, muss in Kombination mit anderen Indikatoren überprüft werden.
Eine übermäßige Stop-Loss-Einstellung auf der Großstufe kann durch eine Überschreitung der Extrema-Situation ausgeschlossen werden.
Der Wiedereintritt und die Korrektur des Eintritts erhöhen die Häufigkeit der Operationen und erfordern eine Kontrolle der Kapitalnutzung.
Die Korrektur des Eintritts in eine rückläufige Entwicklung könnte zu größeren Verlusten führen.
Die Handelsvarianten und Parameter-Einstellungen müssen optimiert werden und gelten nicht für alle Sorten.
Es ist notwendig, kontinuierlich zu überprüfen und zu optimieren, um die Parameter an den Markt anzupassen.
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.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
In Kombination mit anderen Indikatoren wird die Signalprüfung durchgeführt, um die Signalgenauigkeit zu verbessern.
Setzen Sie eine dynamische, adaptive Stop-Loss-Standard.
Optimierung der Logik der Bedingungen für Wiedereintritt und Korrektur des Zulassungsvorgangs.
Optimierung der Parameter der Unterart und Einstellung der optimalen Parameterkombination.
Optimierung der Kapitalnutzungsquote, Festlegung von Kapitalbeschränkungen für Wiedereingänge und Korrekturen.
Die Kombination von Quantitätsindikatoren verhindert die Verluste bei einer rückläufigen Entwicklung.
Ein zusätzlicher Ausgang, wie z.B. die Einrichtung eines mobilen Stopps.
Erwägen Sie, die Strategie als Trading-Roboter zu verpacken, um den Handel zu automatisieren.
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.
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.
/*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", "")