Robot White Box Eisberg-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-09-26 21:02:21
Tags:

Übersicht

Diese Strategie basiert auf dem gleitenden Durchschnitt. Sie setzt drei Ebenen von langen und kurzen Eintrittslinien ein, um bidirektionale Eröffnungspositionen zu implementieren, die zur Trendfolgestrategie gehören. Wenn der Preis den gleitenden Durchschnitt durchbricht, eröffnet die Strategie lange und kurze Positionen in Chargen, indem sie offene Aufträge platziert.

Strategie Logik

Die Strategie verwendet hauptsächlich den Durchbruch des gleitenden Durchschnitts, um die Trendrichtung zu bestimmen. Insbesondere berechnet sie den arithmetischen Mittelwert des Eröffnungspreises, des Schlusskurses, des höchsten Preises, des niedrigsten Preises und so weiter, um einen gleitenden Durchschnittsindikator zu erhalten. Dann setzt sie lange Eintrittslinien über dem gleitenden Durchschnitt und kurze Eintrittslinien darunter ein. Wenn der Preis den gleitenden Durchschnitt von unten durchbricht, werden lange Aufträge nacheinander ausgelöst. Wenn der Preis von oben durchbricht, werden kurze Aufträge nacheinander ausgelöst.

Die Anzahl der Long- und Short-Orders steigt schrittweise an. Durch die Festlegung von ausstehenden Orders implementiert sie Chargenöffnungspositionen. Zum Beispiel löst die Eingabelinie 1 die Eröffnung eines Long/Short-Kontrakts aus, löst die Eingabelinie 2 den Hinzufügen eines Vertrags aus und die Eingabelinie 3 fügt einen weiteren Vertrag hinzu. Dies hilft, die Eingabekosten zu diversifizieren und das Risiko einer einzigen Bestellung zu reduzieren.

Die Strategie verfügt auch über einen Absicherungsmechanismus. Wenn die Positionsgröße nicht 0 beträgt, setzt sie einen Trailing Stop Loss-Auftrag basierend auf dem gleitenden Durchschnittspreis. Wenn der Preis den gleitenden Durchschnitt erneut durchbricht, schließt sie die Position, um einen teilweisen Gewinn zu erzielen und das Kapital zu schützen.

Zusammenfassend lässt sich sagen, dass diese Strategie den gleitenden Durchschnittsindikator voll ausnutzt, um die Trendrichtung zu bestimmen, die Gewinnspanne durch mehrere Einstiegslinien maximiert und Risiken mit Stop-Loss-Bestellungen kontrolliert.

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Die Verwendung eines gleitenden Durchschnitts zur Bestimmung der Trendrichtung ist klar und machbar.

  2. Mit mehreren Eintrittslinien kann es den gesamten Laufbereich des Trends so weit wie möglich erfassen und den Gewinnraum erweitern.

  3. Die Öffnung von Positionen in Chargen reduziert das Risiko einer einzigen Bestellung, der mehrfache Markteintritt diversifiziert das Risiko der Aufträge und senkt die durchschnittlichen Halte-Kosten.

  4. Der Hedging Stop Loss Mechanismus kontrolliert Risiken effektiv. Der Hedging Stop Loss Order realisiert einen schnellen Stop Loss, wenn der Preis den gleitenden Durchschnitt erneut überschreitet und so große Verluste vermeidet.

  5. Die Strategielogik ist klar und leicht verständlich, mit flexiblen Parametereinstellungen, die für verschiedene Märkte optimiert werden können.

Risikoanalyse

Diese Strategie birgt einige Risiken:

  1. Die Wahrscheinlichkeit falscher Signale aus dem gleitenden Durchschnitt.

  2. Die Strategie setzt einen Trend voraus, so dass Trendumkehrungen zu großen Verlusten führen können.

  3. Zu häufige Einstiegslinien erhöhen die Handelsfrequenz und die Kosten für Schlupf.

  4. Die Eröffnung von Chargenpositionen erhöht das Konzentrationsrisiko, wenn die Positionsgröße zu groß ist.

  5. Eine unsachgemäße Einstellung des Stop-Loss-Punkts kann zu einem vorzeitigen Stop-Loss führen oder der Stop-Loss-Punkt ist zu klein.

Entsprechende Risikomanagementmaßnahmen:

  1. Optimieren Sie gleitende Durchschnittsparameter und wählen Sie geeignete Perioden aus.

  2. Achten Sie auf die wichtigsten technischen Indikatoren, um Trendumkehrsignale zu erkennen und den Verlust rechtzeitig zu stoppen.

  3. Anpassen der Entfernung zwischen den Einstiegslinien, um die Handelsfrequenz zu verringern.

  4. Optimierung der Positionsgröße und des Verhältnisses zur Kontrolle des Konzentrationsrisikos.

  5. Backtest und Optimierung von Stop-Loss-Punkten, um das Stop-Loss-Risiko zu reduzieren.

Optimierungsrichtlinien

Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:

  1. Verschiedene gleitende Durchschnittsparameter und Datenquellen zu testen, um den am besten funktionierenden gleitenden Durchschnittsindikator zur Bestimmung von Trends zu finden.

  2. Optimieren Sie den Abstand zwischen langen und kurzen Eintrittslinien und den Anteil der Positionsgröße, um die optimalen Parameter zu finden.

  3. Hinzufügen anderer Indikatoren als Filterbedingungen, um falsche Signale des gleitenden Durchschnitts zu vermeiden, wie MACD, RSI usw.

  4. Optimieren Sie die Position der Stop-Loss-Linie oder setzen Sie Stopp-Loss-Punkte dynamisch basierend auf ATR.

  5. Hinzufügen des Urteils über die Trendumkehrung, um alle Positionsbedingungen zu schließen.

  6. Optimierung der Parameter für verschiedene Marktperioden.

  7. Hinzufügen einer dynamischen Anpassung der Positionsgröße basierend auf dem Kontoverbrauch.

Zusammenfassung

Diese Strategie beurteilt die Trendrichtung hauptsächlich auf der Grundlage gleitender Durchschnitte und nutzt Trendläufe als Gewinnquelle. Durch die Verwendung mehrerer Eingangslinien und die Eröffnung von Positionen in Chargen kann sie Trends effektiv erfassen und Gewinnzonen erweitern. Gleichzeitig werden Stop-Loss-Mechanismen zur Risikokontrolle verwendet. Die Strategielogik ist einfach und klar, geeignet für Anfänger, um sie zu lernen, und auch für eine tiefe Optimierung.


/*backtest
start: 2022-09-19 00:00:00
end: 2023-09-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Robot WhiteBox Iceberg", shorttitle = "Robot WhiteBox Iceberg", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
s = input(defval = "7. OHLC4", options = ["1. Open", "2. High", "3. Low", "4. Close", "5. HL2", "6. HLC3", "7. OHLC4", "8. OC2", "9. PCMA"], title = "Data")
short3 = input(true, title = "short 3")
short2 = input(true, title = "short 2")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
long2 = input(true, title = "long 2")
long3 = input(true, title = "long 3")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Variables
lots = 0.0
size = strategy.position_size
mult = 1 / syminfo.mintick
needtime = true

//MA
oc2 = (open + close) / 2
pcma = (highest(high, len) + lowest(low, len)) / 2
src = s == "1. Open" ? open : s == "2. High" ? high : s == "3. Low" ? low : s == "4. Close" ? close : s == "5. HL2" ? hl2 : s == "6. HLC3" ? hlc3 : s == "7. OHLC4" ? ohlc4 : s == "8. OC2" ? oc2: close
sma = sma(src, len)
ma = s == "9. PCMA" ? round(pcma * mult) / mult : round(sma * mult) / mult

//Levels
longline1 = 0.0
longline2 = 0.0
longline3 = 0.0
shortline1 = 0.0
shortline2 = 0.0
shortline3 = 0.0
longline1 := long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 := lots[1] == 0 ? long2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close : longline2[1]
longline3 := lots[1] == 0 ? long3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close : longline3[1]
shortline1 := short1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 := lots[1] == 0 ? short2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close : shortline2[1]
shortline3 := lots[1] == 0 ? short3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close : shortline3[1]

//Lines
colorlong1 = long1 ? color.lime : na
colorlong2 = long2 ? color.lime : na
colorlong3 = long3 ? color.lime : na
colorshort1 = short1 ? color.red : na
colorshort2 = short2 ? color.red : na
colorshort3 = short3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort3, title = "Short line 3")
plot(shortline2, offset = offset, color = colorshort2, title = "Short line 2")
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
plot(longline2, offset = offset, color = colorlong2, title = "Long line 2")
plot(longline3, offset = offset, color = colorlong3, title = "Long line 3")

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long3 and needtime))
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma, when = needtime)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma, when = needtime)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("L1")
    strategy.cancel("L2")
    strategy.cancel("L3")
    strategy.cancel("S1")
    strategy.cancel("S2")
    strategy.cancel("S3")
    strategy.cancel("TPL")
    strategy.cancel("TPS")

Mehr