Williams-Fraktal kombiniert mit ZZ-Indikator – quantitative Handelsstrategie


Erstellungsdatum: 2024-01-29 15:24:30 zuletzt geändert: 2024-01-29 15:24:30
Kopie: 0 Klicks: 850
1
konzentrieren Sie sich auf
1617
Anhänger

Williams-Fraktal kombiniert mit ZZ-Indikator – quantitative Handelsstrategie

Überblick

Es handelt sich um eine quantitative Handelsstrategie, die Bill Williams’ Spalttheorie mit dem ZZ-Index kombiniert. Die Strategie beurteilt Markttrends durch die Berechnung der Williams-Spaltung und zeichnet in Verbindung mit dem ZZ-Index Unterstützungs-Widerstandslinien, um potenzielle Durchbrüche zu erkennen, wodurch Trend-Tracking-Handlungen möglich sind.

Strategieprinzip

Die Strategie berechnet zunächst die Williams-Splitter, um zu beurteilen, ob der Moment eine Aufwärts- oder eine Abwärtssplitter ist. Wenn es eine Aufwärtssplitter ist, wird davon ausgegangen, dass er sich in einer Aufwärtstrend befindet; wenn es eine Abwärtssplitter ist, wird davon ausgegangen, dass er sich in einer Abwärtstrend befindet.

Dann zeichnen Sie die Unterstützungs- und Widerstandslinien des ZZ-Indikators anhand der Verteilungspunkte. Wenn der Preis die entsprechende Widerstandslinie des Auf- und Absteigens durchbricht, machen Sie einen Plus; wenn der Preis die entsprechende Unterstützungslinie des Abstiegs durchbricht, machen Sie einen Null.

Mit dieser Kombination können Trends im richtigen Moment erfasst und Trends verfolgt werden.

Strategische Stärkenanalyse

Diese Strategie kombiniert zwei verschiedene Methoden der technischen Analyse, die Williams-Splitter- und ZZ-Index, um mehr Handelsmöglichkeiten zu erschließen.

Es ist in der Lage, die Veränderungen der Markttrends rechtzeitig zu beurteilen und gute Stop-Loss-Bedingungen zu setzen, um die Richtung der Haupttrends zu erfassen. Darüber hinaus kann der ZZ-Indikator einige falsche Durchbrüche filtern und unnötige Verluste vermeiden.

Insgesamt betrachtet diese Strategie sowohl die Trends als auch die spezifischen Einstiegspunkte, um ein Gleichgewicht zwischen Risiken und Erträgen herzustellen.

Strategische Risikoanalyse

Die größte Gefahr dieser Strategie besteht darin, dass die Spaltung der Urteile und der ZZ-Index falsche Handelssignale auslösen können, was zu unnötigen Verlusten führt. Zum Beispiel kann der Preis nach einem Durchbruch der Resistenzlinie schnell zurückgehen und nicht weiter steigen.

Darüber hinaus kann die Differentialrechnung aufgrund der falschen Zeitspanne-Einstellung fehlerhaft beurteilt werden. Wenn die Zeitspanne zu kurz ist, erhöht sich die Wahrscheinlichkeit eines falschen Durchbruchs.

Um diese Risiken zu verringern, können die Berechnungsparameter für die Verformung angepasst werden, oder falsche Signale durch die Erhöhung der Filterbedingungen reduziert werden. Darüber hinaus kann eine größere Stop-Loss-Marge gesetzt werden, um einzelne Verluste zu kontrollieren.

Richtung der Strategieoptimierung

Diese Strategie kann durch folgende Aspekte weiter optimiert werden:

  1. Durch die Erhöhung der Filterung von Dynamikindikatoren wie MACD oder Brin-Band-Indikatoren können teilweise falsche Durchbrüche vermieden werden.

  2. Optimierung der Parameter-Einstellungen, Anpassung der Berechnungsmethode für die Höhen und Tiefen, Verkürzung der Zeiträume, um eine genauere Trendbeurteilung zu erhalten.

  3. Erhöhung der Genauigkeit von Trendbeurteilungen durch Machine-Learning-Algorithmen, um die Einschränkungen von künstlichen Einstellungen durch die Nutzung von AI-Urteilsvermögen zu vermeiden.

  4. Erweiterung der Anpassungs-Stop-Mechanismen, die die Stop-Loss-Grenze an die Marktschwankungen anpassen können.

  5. Die Deep Learning-Algorithmen werden verwendet, um die Gesamtargumentation zu optimieren.

Zusammenfassen

Die Strategie ermöglicht die zeitnahe Beurteilung und Erfassung von Markttrendveränderungen durch eine geschickte Kombination aus Williams-Split-Theorie und ZZ-Indikatoren. Es hält eine hohe Gewinnrate bei und erwartet langfristig stabile Übergewinne. Der nächste Schritt ist die Einführung von mehr Filtermitteln und AI-Urteilen, die die Stabilität und Ertragsrate der Strategie weiter verbessern sollen.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "robotrading ZZ-8 fractals", shorttitle = "ZZ-8", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(false, defval = true, title = "Short")
filterBW = input(false, title="filter Bill Williams Fractals")
showll = input(true, title = "Show levels")
showff = input(true, title = "Show fractals (repaint!)")
showdd = input(true, title = "Show dots (repaint!)")
showbg = input(false, title = "Show background")
showlb = input(false, title = "Show drawdown")
startTime = input(defval = timestamp("01 Jan 2000 00:00 +0000"), title = "Start Time", type = input.time, inline = "time1")
finalTime = input(defval = timestamp("31 Dec 2099 23:59 +0000"), title = "Final Time", type = input.time, inline = "time1")

//Variables
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Fractals
isRegularFractal(mode) =>
    ret = mode == 1 ? high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0] : mode == -1 ? low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] : false
isBWFractal(mode) =>
    ret = mode == 1 ? high[4] < high[2] and high[3] <= high[2] and high[2] >= high[1] and high[2] > high[0] : mode == -1 ? low[4] > low[2] and low[3] >= low[2] and low[2] <= low[1] and low[2] < low[0] : false
filteredtopf = filterBW ? isRegularFractal(1) : isBWFractal(1)
filteredbotf = filterBW ? isRegularFractal(-1) : isBWFractal(-1)

//Triangles
plotshape(filteredtopf and showff, title='Filtered Top Fractals', style=shape.triangledown, location=location.abovebar, color= color.red, offset=-2)
plotshape(filteredbotf and showff, title='Filtered Bottom Fractals', style=shape.triangleup, location=location.belowbar, color= color.lime, offset=-2)

//Levels
hh = 0.0
ll = 0.0
hh := filteredtopf ? high[2] : hh[1]
ll := filteredbotf ? low[2] : ll[1]

//Trend
trend = 0
trend := high >= hh[1] ? 1 : low <= ll[1] ? -1 : trend[1]

//Lines
hcol = showll and hh == hh[1] and close < hh ? color.lime : na
lcol = showll and ll == ll[1] and close > ll ? color.red : na
plot(hh, color = hcol)
plot(ll, color = lcol)

//Dots
// var line hline = na
// if hh != hh[1] and showdd
//     hline := line.new(bar_index - 0, hh[0], bar_index - 2, hh[0], xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.lime, width = 1)
// var line lline = na
// if ll != ll[1] and showdd
//     lline := line.new(bar_index - 0, ll[0] - syminfo.mintick, bar_index - 2, ll[0] - syminfo.mintick, xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.red, width = 1)
    
//Background
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)

//Orders
if hh > 0 and needlong
    strategy.entry("Long", strategy.long, na, stop = hh, when = needlong and truetime)
    strategy.exit("Exit Long", "Long", stop = ll, when = needshort == false)
if ll > 0 and startTime
    strategy.entry("Short", strategy.short, na, stop = ll, when = needshort and truetime)
    strategy.exit("Exit Short", "Short", stop = hh, when = needlong == false)
if time > finalTime
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

if showlb

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size != strategy.position_size[1] ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*50)
    osy = highest(100)
    la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)