Ein umfassendes Analysesystem mit mehreren Indikatoren, das VAWSI und Trend Persistence Reversal Strategie mit dynamischer Längenberechnung kombiniert

VAWSI ATR RSI WMA SMA RMA
Erstellungsdatum: 2024-06-21 15:36:43 zuletzt geändert: 2024-06-21 15:36:43
Kopie: 4 Klicks: 567
1
konzentrieren Sie sich auf
1617
Anhänger

Ein umfassendes Analysesystem mit mehreren Indikatoren, das VAWSI und Trend Persistence Reversal Strategie mit dynamischer Längenberechnung kombiniert

Überblick

Die Strategie ist ein umfassendes Analyse-System, das mehrere Indikatoren kombiniert, um Markttrends und mögliche Wendepunkte zu beurteilen. Die Strategie basiert hauptsächlich auf dem VAWSI (Volumen- und ATR-gewichteter Intensitätsindex), dem Trendbeständigkeitsindikator und der modifizierten ATR. Die Strategie führt auch die Berechnung der Dynamiklänge ein, um sich an verschiedene Marktbedingungen anzupassen.

Der Kern der Strategie besteht darin, die Stärke, Dauer und Volatilität von Markttrends anhand mehrerer benutzerdefinierter Indikatoren zu messen, um den optimalen Zeitpunkt für den Handel zu finden. Sie ist besonders für Märkte mit deutlichen Trends geeignet, enthält aber auch Anpassungsmechanismen, um mit unterschiedlichen Marktzuständen umzugehen.

Strategieprinzip

  1. VAWSI-Indikator: Dies ist ein Original-Indikator, ähnlich wie der RSI, aber mit der Verwendung von VAWMA (Volume und ATR-Gewogenerten Moving Averages) anstelle von RMA. Es misst die Stärke von aufkommenden Trends.

  2. Trendbeständigkeitsindikator: Ein weiterer origineller Indikator zur Messung der Dauer eines Trends. Er berechnet die größte Abweichung der Quelldaten von den Höchst-/Tiefpunkten innerhalb einer bestimmten Länge und akkumuliert diese Abweichung, um einen Intensitätsindex zu erstellen.

  3. Modifizierte ATR: Maximale Werte der Höhen-Niedrig- und der Quellenwerte der vorherigen Quellenwerte, und dann die absoluten Werte ihrer Veränderungen und die Anpassung an die Quelldaten.

  4. Dynamische Längenberechnung: Die Dynamische Längenberechnungsmethode mit BlackCat1402 wird verwendet, um die Längenparameter des Indikators an die Marktbedingungen anzupassen.

  5. Zusammenfassende Analyse: Zusammenfassung der VAWSI, der Trendbeständigkeit und der ATR-Lesungen, um eine Zusammenfassung zu erzeugen. Niedrigere Endwerte bedeuten eine bevorstehende Umkehrung, höhere Werte bedeuten Marktinstabilität oder Erschütterung.

  6. Dynamische Stop-Loss/Profit: Dynamische Stop-Loss- und Profit-Level, berechnet auf Basis von Komplexindikatoren und der aktuellen Trendrichtung.

  7. Handelssignale: Das System bestätigt die Kreuzung und erzeugt ein Handelssignal, wenn der Preis die berechnete Schwellenlinie vollständig überschreitet.

Strategische Vorteile

  1. Multidimensionelle Analyse: Durch die Kombination mehrerer Indikatoren kann die Strategie den Markt aus verschiedenen Blickwinkeln analysieren und die Genauigkeit der Beurteilung verbessern.

  2. Anpassungsfähigkeit: Die dynamische Längenberechnung ermöglicht Strategien, sich an unterschiedliche Marktbedingungen anzupassen, was die Flexibilität der Strategie erhöht.

  3. Risikomanagement: Die Einstellung von dynamischen Stop-Loss- und Profit-Einstellungen hilft, Risiken besser zu kontrollieren und sich an Veränderungen am Markt anzupassen.

  4. Originale Indikatoren: Der VAWSI und der Trend-Kontinuität-Indikator bieten einzigartige Markt-Einblicke und können Signale erfassen, die von herkömmlichen Indikatoren übersehen werden.

  5. Verhindern von Übertragung: Die Verwendung von barstate.isconfirmed sorgt dafür, dass das Signal nicht übertragen wird, was die Genauigkeit der Rückmessung erhöht.

  6. Anpassbarkeit: Mehrere Parameter können angepasst werden, so dass die Strategie sich an verschiedene Handelsarten und Zeitrahmen anpasst.

Strategisches Risiko

  1. Überoptimierung: Eine große Anzahl von Parametern kann zu einer Überoptimierung führen, die bei Live-Trading schlecht funktioniert.

  2. Marktadaptivität: Obwohl in einigen Märkten gut funktioniert, kann dies nicht für alle Marktbedingungen gelten, insbesondere in Märkten mit geringer Volatilität.

  3. Komplexität: Die Komplexität einer Strategie kann sie schwer zu verstehen und zu pflegen machen, was das Risiko von Betriebsfehlern erhöht.

  4. Rechenintensivität: Mehrere benutzerdefinierte Kennzahlen und dynamische Berechnungen können zu einer höheren Rechenlast führen, was die Ausführungsgeschwindigkeit beeinträchtigt.

  5. Abhängigkeit von historischen Daten: Die Strategie verwendet große Mengen an historischen Daten für Berechnungen, die in einigen Fällen zu Verzögerungen führen können.

Optimierungsrichtung

  1. Parameteroptimierung: Die Verwendung von Machine Learning-Algorithmen zur Optimierung verschiedener Gewichts- und Längenparameter zur Verbesserung der Strategie unter verschiedenen Marktbedingungen.

  2. Marktstatuserkennung: Hinzufügung eines Marktstatuserkennungsmoduls, um die Strategieparameter automatisch in verschiedenen Marktumgebungen anzupassen.

  3. Signalfilterung: Einführung von zusätzlichen Filtermechanismen, wie z. B. Trendstärken-Temperaturen, um falsche Signale zu reduzieren.

  4. Umfangsanalyse: Die Analyse des Umfangs in der Tiefe, möglicherweise mit der Einführung der Umfangformerkennung, um die Zuverlässigkeit des Signals zu erhöhen.

  5. Multi-Zeitrahmen-Analyse: Integration von Signalen aus mehreren Zeitrahmen zur Steigerung der Stabilität von Handelsentscheidungen.

  6. Optimierung des Risikomanagements: Implementierung von komplexeren Risikomanagementstrategien, wie beispielsweise dynamische Positionssizing und mehrstufiges Stop Loss.

  7. Berechnungs-Effizienz: Optimierung des Codes zur Steigerung der Rechen-Effizienz, insbesondere bei der Bearbeitung großer Mengen an historischen Daten.

Zusammenfassen

Die VAWSI und die Trend-Continuity-Reversal-Strategie sind ein komplexes und umfassendes Handelssystem, das mehrere innovative Indikatoren und dynamische Parameter-Anpassungen kombiniert. Ihr Vorteil liegt in der multidimensionalen Marktanalyse und der Selbst-Anpassungsfähigkeit, die es ermöglicht, potenzielle Reversal-Gelegenheiten unter verschiedenen Marktbedingungen zu suchen. Die Komplexität der Strategie birgt jedoch auch Herausforderungen in Bezug auf Überoptimierung und Anpassungsfähigkeit.

Die Strategie hat das Potenzial, durch weitere Optimierungen, insbesondere in Bezug auf Parameteranpassung, Marktsituationserkennung und Risikomanagement, zu einem leistungsstarken Handelsinstrument zu werden. Der Benutzer sollte jedoch beachten, dass keine Strategie perfekt ist und ständige Überwachung und Anpassung notwendig sind. In der praktischen Anwendung wird empfohlen, dass sie ausreichend auf Simulationskonten getestet wird und in Kombination mit anderen Analysewerkzeugen und Marktwissen für Handelsentscheidungen getroffen wird.

Strategiequellcode
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("VAWSI and Trend Persistance Reversal", overlay=true, max_bars_back = 4999, process_orders_on_close = true)


//INPUTS
sltp = input.float(title = "Minimum SL/TP", defval = 5.0)
rsi_weight = input.float(title = "Wawsi weight", defval = 100.0)
half_weight= input.float(title = "Trend Persistence Weight", defval = 79.0)
atr_weight = input.float(title = "ATR Weight", defval = 20.0)
com_mult = input.float(title = "Combination Mult", defval = 1, step = .001)
smoothing = input.int(title = "Trend Persistence smooth length", defval = 3)
CycPart = input.float(1.1, step = .001, title = "Length Cycle Decimal")
src = close
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)

//BlackCat1402's Dynamic Length Calculation
EhlersHoDyDC(Price, CycPart) =>
    // Vars: 
    Smooth = 0.00
    Detrender = 0.00
    I1 = 0.00
    Q1 = 0.00
    jI = 0.00
    jQ = 0.00
    I2 = 0.00
    Q2 = 0.00
    Re = 0.00
    Im = 0.00
    Period = 0.00
    SmoothPeriod = 0.00
    pi = 2 * math.asin(1)
    DomCycle = 0.0

    //Hilbert Transform
    Smooth := bar_index > 5 ? (4 * Price + 3 * nz(Price[1]) + 2 * nz(Price[2]) + nz(Price[3])) / 10 : Smooth
    Detrender := bar_index > 5 ? (.0962 * Smooth + .5769 * nz(Smooth[2]) - .5769 * nz(Smooth[4]) - .0962 * nz(Smooth[6])) * (.075 * nz(Period[1]) + .54) : Detrender
    //Compute InPhase and Quadrature components
    Q1 := bar_index > 5 ? (.0962 * Detrender + .5769 * nz(Detrender[2]) - .5769 * nz(Detrender[4]) - .0962 * nz(Detrender[6])) * (.075 * nz(Period[1]) + .54) : Q1
    I1 := bar_index > 5 ? nz(Detrender[3]) : I1

    //Advance the phase of I1 and Q1 by 90 degrees
    jI := (.0962 * I1 + .5769 * nz(I1[2]) - .5769 * nz(I1[4]) - .0962 * nz(I1[6])) * (.075 * nz(Period[1]) + .54)
    jQ := (.0962 * Q1 + .5769 * nz(Q1[2]) - .5769 * nz(Q1[4]) - .0962 * nz(Q1[6])) * (.075 * nz(Period[1]) + .54)

    //Phasor addition for 3 bar averaging
    I2 := I1 - jQ
    Q2 := Q1 + jI

    //Smooth the I and Q components before applying the discriminator
    I2 := .2 * I2 + .8 * nz(I2[1])
    Q2 := .2 * Q2 + .8 * nz(Q2[1])

    //Homodyne Discriminator
    Re := I2 * nz(I2[1]) + Q2 * nz(Q2[1])
    Im := I2 * nz(Q2[1]) - Q2 * nz(I2[1])
    Re := .2 * Re + .8 * nz(Re[1])
    Im := .2 * Im + .8 * nz(Im[1])

    Period := Im != 0 and Re != 0 ? 2 * pi / math.atan(Im / Re) : Period
    Period := Period > 1.5 * nz(Period[1]) ? 1.5 * nz(Period[1]) : Period
    Period := Period < .67 * nz(Period[1]) ? .67 * nz(Period[1]) : Period
    //Limit Period to be within the bounds of 6 bar and 50 bar cycles
    Period := Period < 6 ? 6 : Period
    Period := Period > 50 ? 50 : Period
    Period := .2 * Period + .8 * nz(Period[1])
    SmoothPeriod := .33 * Period + .67 * nz(SmoothPeriod[1])
    //it can add filter to Period here
    DomCycle := math.ceil(CycPart * SmoothPeriod) > 34 ? 34 : math.ceil(CycPart * SmoothPeriod) < 1 ? 1 : math.ceil(CycPart * SmoothPeriod)
    DomCycle

wma(src, length) =>
    wma = 0.0
    sum = 0.0
    norm = length * (length + 1) / 2
    for i = 0 to length - 1
        sum := sum + src[i] * (length - i)
    wma := sum / norm


length = math.round(math.ceil(EhlersHoDyDC(hclose,CycPart)))

// Traditional Function initialization
highest_custom(src, length) =>
    x = src
    for i = 0 to math.min(length, 4999)
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to math.min(length, 4999)
        if src[i] < x
            x := src[i]
    x

rma(src, len) =>
    sum = 0.0
    for i = 0 to len - 1
        math.min(1, len)
        sum += src[i]
    rma = sum / len
    rma := nz(rma[1]) * (len - 1) / len + src / len
    
sma(src, length) =>
    math.sum(src, length) / length

hln(src, length) =>
    TR = math.max(math.abs(src - src[1]), high - low)
    TR := src / math.abs(ta.change(rma(TR, length)))
    TR := (1 / TR) * 100

vawma(src, length) =>
    atr = ta.atr(1)
    aavg = sma(atr, length)
    vavg = sma(volume, length)
    weighted_sum = 0.0
    sum_weights = 0.0
    weighted = 0.0
    for i = 0 to length
        weight = ((volume[i] / vavg + (atr[i]) / aavg) / 2)
        weighted_sum += src[i] * weight
        sum_weights += weight
    a = (weighted_sum / sum_weights)

vawsi(src, len) =>
    rmaUp = vawma(math.max(ta.change(src), 0), len)
    rmaDown = vawma(-math.min(ta.change(src), 0), len)
    rsi = 100 - (100 / (1 + rmaUp / rmaDown))

trendPersistence(src, length, smoothing) =>
    trendu = math.abs(src - highest_custom(src, length))
    trendd = math.abs(src - lowest_custom(src, length))
    trendu := wma(trendu, smoothing)
    trendd := wma(trendd, smoothing)
    trendu := ta.change(ta.cum(trendu))
    trendd := ta.change(ta.cum(trendd))
    trend = wma(math.max(trendu, trendd), smoothing)
    rmaUp = rma(math.max(ta.change(trend), 0), length)
    rmaDown = rma(-math.min(ta.change(trend), 0), length)
    rsi = 100 - (100 / (1 + rmaUp / rmaDown))

//Strategy Calculations
sl = ((100 - sltp) / 100) * close
tp = ((100 + sltp) / 100) * close

var bool crossup = na
var bool crossdown = na
var float dir = na
var float BearGuy = 0

BullGuy = ta.barssince(crossup or crossdown)
if na(BullGuy)
    BearGuy += 1
else
    BearGuy := math.min(BullGuy, 4999)


rsiw = rsi_weight / 100
cew = half_weight / 100
atrw = atr_weight / 100

atr = hln(hclose, length) * atrw
ce = 1 / trendPersistence(hclose, length, smoothing)
com = 1 / math.max(math.abs(vawsi(hclose, length) - 50) * 2, 20)

comfin = (((com * rsiw) + (ce * cew) - atr)) * com_mult

lower = highest_custom(math.min((math.max(highest_custom(src, BearGuy) * (1 - comfin), sl)), src[1]), BearGuy)
upper = lowest_custom(math.max((math.min(lowest_custom(src, BearGuy) * (1 + comfin), tp)), src[1]), BearGuy)

var float thresh = na

if na(thresh)
    thresh := lower
if na(dir)
    dir := 1
if crossdown
    dir := -1
if crossup
    dir := 1
if dir == 1
    thresh := lower
if dir == -1
    thresh := upper

crossup := ta.crossover(hclose, thresh) and barstate.isconfirmed
crossdown := ta.crossunder(hclose, thresh) and barstate.isconfirmed

//STRATEGY
if crossup
    strategy.entry("long", strategy.long)
if crossdown
    strategy.entry("Short", strategy.short)

//PLOTTING
col = hclose > thresh ? color.lime : color.red
plot(thresh, linewidth = 2, color = color.new(col[1], 0))