Strategie für Übergangszonen

Schriftsteller:ChaoZhang, Datum: 29.12.2023
Tags:

img

Übersicht

Die Transient Zones-Strategie ist eine kurzfristige Handelsstrategie, die auf Preisschwankungszonen basiert. Sie verwendet die von Preisen innerhalb eines bestimmten Zeitraums gebildeten Schwankungszonen, um Markttrends zu beurteilen und Positionen einzunehmen, wenn die Zonen durchdrungen werden.

Strategie Logik

Die Strategie berechnet die höchsten und niedrigsten Preise der letzten N Kerzen, um eine Preisschwankungszone zu konstruieren.

Die Strategie verfolgt insbesondere kontinuierlich die höchsten und niedrigsten Preise der letzten N Leuchter (anpassbarer Parameter N), wobei:

  • Niedrigster Preis = niedrigster Punkt in den letzten N Leuchtern
  • Höchster Preis = höchster Punkt in den vergangenen N Leuchtern

Dies bildet die Preisschwankungszone.

Wenn der Schlusskurs des neuesten Kerzenhändlers höher als der höchste Preis der Zone ist, signalisiert er, dass die Zone durchdrungen wurde, was ein langes Signal erzeugt; wenn der Schlusskurs niedriger als der niedrigste Preis der Zone ist, signalisiert er, dass die Zone durchdrungen wurde, was ein kurzes Signal erzeugt.

Darüber hinaus beinhaltet die Strategie auch Farb- und Körperfilter. Der Farbfilter filtert Signale basierend auf der Farbe des Kerzen; der Körperfilter filtert Signale basierend auf der Größe des Kerzenkörpers. Dies hilft, einige falsche Signale auszufiltern.

Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Erfasst Preiszonen und ermittelt Trendumkehrpunkte für genaue Long/Short-Einträge
  2. Farb- und Körperfilter helfen, falsche Signale zu filtern
  3. Einfache und klare Strategie-Logik, leicht verständlich und Anpassung der Parameter
  4. Viele verstellbare Parameter ermöglichen die Optimierung der Strategie

Risiken

Die Strategie birgt auch einige Risiken:

  1. Unangemessene Parameter-Einstellungen können zu Überhandelungen und hohen Gebühren führen
  2. Falsche Zonenbereiche können zu viele falsche Ausbruchssignale erzeugen
  3. Schlechte Vorhersagekraft bei starken Marktschwankungen
  4. Nicht in der Lage, mit Preisunterschieden umzugehen

Diese Risiken können durch Anpassung der Zonenparameter, Optimierung der Signalfilter usw. verringert werden.

Optimierungsrichtlinien

Die Strategie kann in mehreren Richtungen optimiert werden:

  1. Dynamische Anpassung der Preissphäre anstelle von festen N-Leuchter
  2. Einbeziehung von Stop-Loss-Logik zur Begrenzung von Verlusten
  3. Optimierung der Filterparameter zur Verbesserung der Signalqualität
  4. Hinzufügen von Logik, um mit Preislücken umzugehen
  5. Kombination mehrerer Zeitrahmen, um Signale zu beurteilen und Fallen zu vermeiden

Schlussfolgerung

Die Transient Zones Strategie ist eine einfach zu bedienende kurzfristige Handelsstrategie. Sie bestimmt Trendumkehrpunkte durch Preiszonen und kann schnell von Marktchancen profitieren. Es gibt auch einige Risiken zu beachten. Weitere Verbesserungen können durch Parameteranpassung und -optimierung zur Steigerung der Rentabilität vorgenommen werden.


/*backtest
start: 2023-11-28 00:00:00
end: 2023-12-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Transient Zones Strategy v1.0", shorttitle = "TZ str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")

usecol = input(true, defval = true, title = "Use Color-Filter")
usebod = input(true, defval = true, title = "Use Body-Filter")

h_left = input(title = "H left", defval = 10)
h_right = -1
sample_period = input(title = "Sample bars for % TZ",  defval = 5000)
show_ptz = input(title = "Show PTZ", type = bool, defval = true)
show_channel = input(title = "Show channel", type = bool, defval = true)

fromyear = input(2018, defval = 2018, 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")

//By Jurij w/ TZ percent occurrence by SPYderCrusher

//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
plotshape(newlow and show_ptz, style=shape.triangledown, location=location.belowbar, color=red)
plotshape(newhigh and show_ptz, style=shape.triangleup, location=location.abovebar, color=green)
channel_high = plot(show_channel ? h_left_low : 0, color=silver)
channel_low = plot (show_channel ? h_left_high : 0, color=silver)

//check true TZ back in history
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotarrow(central_bar_is_highest ? -1 : 0, offset=-h_right-1)
plotarrow(central_bar_is_lowest ? 1 : 0, offset=-h_right-1)

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = central_bar_is_lowest and body and (bar == -1 or usecol == false)
dn1 = central_bar_is_highest and body and (bar == 1 or usecol == false)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr