Absichtliche Umkehrung der Hüllkurvenmittelwertstrategie


Erstellungsdatum: 2023-12-04 16:12:39 zuletzt geändert: 2023-12-04 16:12:39
Kopie: 0 Klicks: 759
1
konzentrieren Sie sich auf
1619
Anhänger

Absichtliche Umkehrung der Hüllkurvenmittelwertstrategie

Überblick

Die Intention-Rückschlag-Gewinnstrategie ist eine Intention-Rückschlag-Handelsstrategie, die auf der Moving Average basiert. Die Strategie verwendet die binäre Index-Moving Average als Basisberechnung und fügt mehrere Wartungsbänder darüber hinzu. Wenn der Preis das Wartungsband berührt, wird entweder über- oder leer gehandelt.

Strategieprinzip

Die Strategie verwendet die DEMA als Basisindikator. Die DEMA ist eine Art von Moving Average, die sehr sensibel auf Preisänderungen reagiert. Auf der Grundlage der Strategie werden jeweils mehrere Preisbänder auf den oberen und unteren Seiten hinzugefügt, um eine einheitliche Linie zu bilden.

Die Strategie macht eine Leerstellung, wenn der Preis steigt und sich dem oberen Band nähert; wenn der Preis sinkt und das unteren Band berührt, wird die Strategie mehr Positionen aufnehmen. Bei jeder Berührung eines neuen Preisbandes wird die Position erhöht. Wenn der Preis in der Nähe der Moving Average zurückkehrt, wird die Strategie alle Positionen platzieren.

Die Strategie nutzt die Umschlagzone, um übermäßige Preisschwankungen zu erfassen und bei einer Umkehrung mit einem Gewinn auszusteigen, um ein niedriges Kauf- und Verkaufsziele zu erreichen. Sie gilt für Marktzyklen mit deutlichen Mittelwertrückläufen, wie beispielsweise für digitale Währungen wie Bitcoin.

Strategische Vorteile

  • Die Verwendung eines binären Index-Moving Average ist empfindlicher auf kurzfristige Preisänderungen und ermöglicht die schnelle Erfassung von Trendwende.
  • Die Einrichtung von Umschlagzonen in der Nähe der Durchschnittslinie ermöglicht eine genauere Erfassung von Preisumkehrungen.
  • Das Unternehmen hat die Möglichkeit, die Lagerbestände in Gruppen zu erweitern, um die Kapital-Effizienz zu maximieren.
  • Schnell wechseln nach Gewinn, flexibel auf Marktveränderungen reagieren.
  • Die Optimierung erfolgt durch Anpassung der Parameter.

Strategisches Risiko

  • Es ist nicht so, dass es sich um einen gewinnbringenden Wechsel handelt.
  • Die falsche Einstellung der Parameter kann zu zu häufigen Transaktionen führen.
  • Es ist notwendig, eine relativ stabile Situation zu schaffen, die nicht für einen stark bewegten Markt geeignet ist.
  • Die Umgebung der Umschlagzone ist zu klein, um eine Position zu eröffnen.

Das Risiko kann durch eine angemessene Lockerung des Paketnetzbereichs verringert werden, indem die Empfindlichkeit für Preisänderungen erhöht wird. Gleichzeitig werden die Parameter für die Länge der beweglichen Durchschnittslinie an unterschiedliche Zyklusbedingungen angepasst.

Richtung der Strategieoptimierung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung von Moving Average Algorithmen. Verschiedene Arten von Moving Average-Indikatoren können getestet werden.

  2. Anpassung der Parameter für die Länge der Durchschnittslinie. Kürzere Perioden können die Erfassung von kurzfristigen Preisänderungen verbessern, aber auch möglicherweise den Noise-Trading erhöhen.

  3. Optimieren Sie die Parameter für die Umgebung. Versuchen Sie, die optimale Parameterkombination zu finden, indem Sie verschiedene Prozentsätze testen.

  4. Erhöhen Sie Ihre Stop-Loss-Strategie. Setzen Sie eine bewegliche Stop-Loss-Strategie oder eine Rücknahme-Stop-Strategie, um einzelne Verluste effektiv zu kontrollieren.

  5. Erhöhung der Filterbedingungen. In Kombination mit anderen Kennzeichen, um zu vermeiden, dass Positionen unter unvernünftigen Umständen ungültig gemacht werden.

Zusammenfassen

Die Strategie des mittelwertigen Umtauschnetzes mit der Absicht, durch den Aufbau eines mittelwertigen Preiskanals die Chancen eines Preisumschlags effektiv zu erfassen. Es kann die Parameter flexibel anpassen und für verschiedene Marktumgebungen geeignet sein. Die Strategie hat niedrige Transaktionskosten und eine hohe Rendite und ist eine empfehlenswerte quantitative Handelsstrategie.

Strategiequellcode
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN

// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") 
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")


// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
    if(ma_type == '1. SMA') 
        ta.sma(src, ma_window)
    if(ma_type == '2. EMA') 
        ta.ema(src, ma_window)
    if(ma_type == '3. RMA') 
        ta.rma(src, ma_window)
    if(ma_type == '4. DEMA') 
        2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)

ma_base = ma_funct()

ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na

ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na


// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))


if use_short
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))

strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)