Automatisierte Trendfolgestrategie basierend auf Pivot-Punkten und Fibonacci-Retracements


Erstellungsdatum: 2024-01-05 11:34:17 zuletzt geändert: 2024-01-05 11:34:17
Kopie: 0 Klicks: 687
1
konzentrieren Sie sich auf
1621
Anhänger

Automatisierte Trendfolgestrategie basierend auf Pivot-Punkten und Fibonacci-Retracements

Überblick

Die Strategie identifiziert automatisch die ABC-Strecken der Aktienpreise basierend auf den Pivot-Punkten und der Fibonacci-Retracement-Rate und gibt ein langes oder kurzes Signal. Die Strategie verwendet die Pivot-Punkte, um die Aktienpreisstrecken zu ermitteln, und berechnet dann die Fibonacci-Retracement-Rate zwischen den ABC-Strecken, um ein Handelssignal zu erzeugen, wenn bestimmte Bedingungen erfüllt werden.

Strategieprinzip

  1. Berechnen Sie die Pivot-Hoch- und Tiefpunkte der Aktien
  2. Beurteilen Sie, ob der Preis von einem Hoch der vorherigen Welle gefallen ist oder von einem Tief der vorherigen Welle gestiegen ist
  3. Berechnung des Fibonacci-Rücktritts zwischen der aktuellen und der vorherigen Welle
  4. Wenn die Rückziehung der Auf- und Abwärtstränge im richtigen Bereich liegt, wird die Bildung eines ABC-Bereichs vermutet
  5. Nach der Bestätigung der ABC-Band wird der Stop-Loss für den Pluspunkt C und der Stop-Loss für die 1,5-fache Schwankung festgelegt; der Stop-Loss für den Leerpunkt A und der Stop-Loss für die 1,5-fache Schwankung

Analyse der Stärken

  1. Nutzung von Achsenpunkten zur Bestimmung der wichtigsten Widerstandsbereiche zur Verbesserung der Signalgenauigkeit
  2. Die Fibonacci-Rückgängigmachung erkennt ABC-Formen und fängt automatisch Trendwechselpunkte ein
  3. Stop-Losses sind klar und vernünftig, um große Verluste zu vermeiden

Risikoanalyse

  1. Pivotpoints und Fibonacci-Rückgängigungen sind keine Garantie dafür, dass man die Trendwechselpunkte immer genau beurteilt, es kann zu Fehleinschätzungen kommen.
  2. C- und A-Stopps könnten durchbrochen werden, was zu einer Vergrößerung der Verluste führen würde.
  3. Parameter, die optimiert werden müssen, z. B. die Reichweite der Fibonacci-Widerrufsquote

Optimierungsrichtung

  1. Mehr technische Kennzahlen können die ABC-Form bestimmen und die Signalgenauigkeit verbessern
  2. Der Umfang der Fibonacci-Widerrufsquote kann optimiert werden, um mehr Marktbedingungen anzupassen
  3. Modelle, die ABC-Formen bestimmen können, die mit Methoden des maschinellen Lernens trainiert werden

Zusammenfassen

Die Strategie basiert auf dem Pivot-Punkt, um die wichtigsten Unterstützungs- und Widerstandsbereiche zu ermitteln, und verwendet die Fibonacci-Rücktrittsquote, um die ABC-Form automatisch zu identifizieren, um einen langen und kurzen Handel an den Bandbreiten zu signalisieren. Die Strategie hat eine klare Logik, eine einfache Stop-Loss-Einstellung und eine vernünftige Einstellung, um das Risiko effektiv zu kontrollieren. Es besteht jedoch ein gewisses Risiko für Fehlentscheidungen, die weiter optimiert und verbessert werden müssen, um mehr Marktbedingungen zu berücksichtigen.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-19 23:59:59
period: 1m
basePeriod: 1m
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/
// © kerok3g

//@version=5
strategy("ABCD Strategy", shorttitle="ABCDS", overlay=true, commission_value=0.04)
calcdev(fprice, lprice, fbars, lbars) =>
    rise = lprice - fprice
    run = lbars - fbars
    avg = rise/run
    ((bar_index - lbars) * avg) + lprice

len = input(5)

ph = ta.pivothigh(len, len)
pl = ta.pivotlow(len, len)

var bool ishigh = false
ishigh := ishigh[1]

var float currph = 0.0
var int currphb = 0
currph := nz(currph)
currphb := nz(currphb)

var float oldph = 0.0
var int oldphb = 0
oldph := nz(oldph)
oldphb := nz(oldphb)

var float currpl = 0.0
var int currplb = 0
currpl := nz(currpl)
currplb := nz(currplb)

var float oldpl = 0.0
var int oldplb = 0
oldpl := nz(oldpl)
oldplb := nz(oldplb)

if (not na(ph))
    ishigh := true
    oldph := currph
    oldphb := currphb
    currph := ph
    currphb := bar_index[len]
else
    if (not na(pl))
        ishigh := false
        oldpl := currpl
        oldplb := currplb
        currpl := pl
        currplb := bar_index[len]

endHighPoint = calcdev(oldph, currph, oldphb, currphb)
endLowPoint = calcdev(oldpl, currpl, oldplb, currplb)

plotshape(ph, style=shape.triangledown, color=color.red, location=location.abovebar, offset=-len)
plotshape(pl, style=shape.triangleup, color=color.green, location=location.belowbar, offset=-len)

// var line lnhigher = na
// var line lnlower = na
// lnhigher := line.new(oldphb, oldph, bar_index, endHighPoint)
// lnlower := line.new(oldplb, oldpl, bar_index, endLowPoint)
// line.delete(lnhigher[1])
// line.delete(lnlower[1])

formlong = oldphb < oldplb and oldpl < currphb and currphb < currplb
longratio1 = (currph - oldpl) / (oldph - oldpl)
longratio2 = (currph - currpl) / (currph - oldpl)

formshort = oldplb < oldphb and oldphb < currplb and currplb < currphb
shortratio1 = (oldph - currpl) / (oldph - oldpl)
shortratio2 = (currph - currpl) / (oldph - currpl)

// prevent multiple entry for one pattern
var int signalid = 0
signalid := nz(signalid[1])

longCond = formlong and 
           longratio1 < 0.7 and 
           longratio1 > 0.5 and 
           longratio2 > 1.1 and 
           longratio2 < 1.35 and 
           close < oldph and 
           close > currpl and 
           signalid != oldplb
if (longCond)
    signalid := oldplb
    longsl = currpl - ta.tr
    longtp = ((close - longsl) * 1.5) + close
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", limit=math.min(longtp, oldph), stop=longsl)

shortCond = formshort and 
             shortratio1 < 0.7 and 
             shortratio1 > 0.5 and 
             shortratio2 > 1.1 and 
             shortratio2 < 1.35 and 
             close > oldpl and 
             close < currph and 
             signalid != oldphb

if (shortCond)
    signalid := oldphb
    shortsl = currph + ta.tr
    shorttp = close - ((shortsl - close) * 1.5)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", limit=math.max(shorttp, oldpl), stop=shortsl)