VWAP-Handelsstrategie und Überwachung von Volumenanomalien

VWAP RSI YTD SMA
Erstellungsdatum: 2024-06-07 15:44:04 zuletzt geändert: 2024-06-07 15:44:04
Kopie: 0 Klicks: 717
1
konzentrieren Sie sich auf
1617
Anhänger

VWAP-Handelsstrategie und Überwachung von Volumenanomalien

Überblick

Die Strategie basiert auf mehreren VWAP-Levels, einschließlich der VWAP-Diagramme mit dem Eröffnungspreis, dem Höchstpreis, dem Tiefpreis und dem außergewöhnlich hohen Handelsvolumen. Die Strategie nutzt VWAPs als Unterstützungs- und Widerstandsplätze, wobei auch die außergewöhnlichen Umstände des Handels berücksichtigt werden. Die Strategie erzeugt ein Handelssignal, wenn der Preis die VWAP-Level überschreitet und bestimmte Bedingungen erfüllt.

Strategieprinzip

  1. Berechnen Sie mehrere VWAP-Levels, einschließlich der VWAP des Eröffnungspreises, der VWAP des Höchstpreises, der VWAP des Tiefpreises und der VWAP mit einem außergewöhnlich hohen Transaktionsvolumen.
  2. Erkennen Sie eine ungewöhnlich hohe Verkehrsdichte und setzen Sie die kumulierten Variablen des ungewöhnlich hohen Verkehrs VWAP auf diese Karte.
  3. Die Abweichung wird als Auslöser für ein Handelssignal auf der VWAP-Ebene festgelegt.
  4. Überprüfen Sie, ob Preise auf der anderen Seite des VWAP-Signals übersprungen sind, um falsche Signale zu vermeiden.
  5. Je nach der Position des Preises gegenüber dem VWAP und der Beziehung zwischen dem Schlusskurs und dem Eröffnungskurs werden mehrere Handelssignale erzeugt, darunter zwei Arten von Wick (Schattenlinie) und Crossover (Kreuzung).
  6. Der RSI-Indikator wird verwendet, um die Dynamik zu überprüfen. Wenn der RSI über 70 oder unter 30 liegt, wird der entsprechende Handel platziert.

Analyse der Stärken

  1. Die Strategie nutzt mehrere VWAP-Ebenen und bietet umfassendere Informationen über Unterstützungs- und Widerstandspunkte.
  2. Die Strategie kann wichtige Marktveränderungen erfassen, indem sie abnormal hohe Umsätze erkennt.
  3. Die Einstellung der Abweichung kann einige Geräusche filtern und die Qualität des Handelssignals verbessern.
  4. Dabei wurden die falschen Signale vermieden, da der Preis auf der anderen Seite des VWAP-Systems in die Höhe gesprungen war.
  5. Es werden mehrere Handelssignale erzeugt, die auf die relative Position des Preises gegenüber dem VWAP und die Beziehung zwischen dem Schlusskurs und dem Eröffnungskurs basieren, was die Flexibilität der Strategie erhöht.
  6. Die Verwendung des RSI-Indikators als Ausgleichsbedingung hilft der Strategie, den Handel rechtzeitig zu beenden, wenn sich die Dynamik ändert.

Risikoanalyse

  1. Die Strategie ist abhängig von der VWAP-Ebene, die bei extremen Marktverhältnissen ausfallen kann.
  2. Die Beurteilung von außergewöhnlich hohen Umsätzen basiert auf festen Schwellenwerten, die möglicherweise nicht an unterschiedliche Marktbedingungen angepasst werden können.
  3. Die Einstellung der Abweichungen kann je nach Markt und Handelsart angepasst werden.
  4. Diese Strategie erzeugt mehrere Handelssignale, was zu Überhändlungen und hohen Transaktionskosten führen kann.
  5. Die RSI-Indikatoren können ein nachlassendes Nah-Positionssignal erzeugen, was zu einem höheren Risiko für die Strategie führt.

Optimierungsrichtung

  1. Optimierung der Berechnungsmethoden für die VWAP-Ebene, z. B. durch Berücksichtigung längerer Zeiträume oder Verwendung einer Gewichtungsmethode.
  2. Optimierung von Kriterien für die Bestimmung von außergewöhnlich hohen Transaktionen, z. B. durch die Verwendung von adaptiven Schwellenwerten oder in Kombination mit anderen Transaktionsindikatoren.
  3. Parameteroptimierung der Abweichungen, um die optimale Abweichung zu finden.
  4. Einführung von Risikomanagement-Maßnahmen wie Stop-Loss- und Stop-Stopp-Systemen, um die Risikothek für Einzelgeschäfte zu kontrollieren.
  5. Versuchen Sie andere Dynamik-Indikatoren oder Kombinationen von mehreren Indikatoren, um ein genaueres Ausgleichssignal zu erhalten.
  6. Das Programm wurde von der US-Regierung in Zusammenarbeit mit der US-Regierung entwickelt, um die Handelssignale zu filtern, um Übertrading zu verhindern und die Kosten zu senken.

Zusammenfassen

Die Strategie nutzt mehrere VWAP-Levels und Ausnahmetests, um eine Vielfalt von Handelssignalen zu erzeugen. Die Strategie versucht, wichtige Veränderungen im Markt zu erfassen und den Handel zeitnah zu beenden, indem sie die relative Position des Preises gegenüber dem VWAP, die Beziehung zwischen dem Schlusskurs und dem Eröffnungskurs sowie den RSI berücksichtigt. Die Strategie birgt jedoch auch einige Risiken, wie z. B. die Anpassung an Extremszenarien, Übertrieben und verspätete Ausstiegssignale.

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

//@version=5
strategy("5 Anchored VWAP Strategy with Abnormally High Volume Candle", overlay=true)

// Initialize VWAP variables
var float vwap_open = na
var float vwap_high = na
var float vwap_low = na
var float vwap_high_volume = na

var float cum_v_open = 0
var float cum_v_high = 0
var float cum_v_low = 0
var float cum_v_high_volume = 0

var float cum_pv_open = 0
var float cum_pv_high = 0
var float cum_pv_low = 0
var float cum_pv_high_volume = 0

var float highest_volume = 0

// Initialize YTD high and low variables
var float ytd_high = na
var float ytd_low = na

// Parameters for abnormal volume detection
length = 20
volume_threshold = 2.0

// Displacement parameters
displacement_percentage = 0.01 // 1% displacement

// Calculate average volume
avg_volume = ta.sma(volume, length)

// Check if it's the first day of the year
is_first_day_of_year = year(time) != year(time[1])

// Reset YTD high and low on the first day of the year
if is_first_day_of_year
    ytd_high := high
    ytd_low := low

// Update YTD high and low
ytd_high := na(ytd_high) ? high : math.max(ytd_high, high)
ytd_low := na(ytd_low) ? low : math.min(ytd_low, low)

// Update cumulative variables for open VWAP
cum_v_open += volume
cum_pv_open += close * volume
if cum_v_open != 0
    vwap_open := cum_pv_open / cum_v_open

// Update cumulative variables for high VWAP
if high == ytd_high
    cum_v_high := 0
    cum_pv_high := 0

cum_v_high += volume
cum_pv_high += close * volume
if cum_v_high != 0
    vwap_high := cum_pv_high / cum_v_high

// Update cumulative variables for low VWAP
if low == ytd_low
    cum_v_low := 0
    cum_pv_low := 0

cum_v_low += volume
cum_pv_low += close * volume
if cum_v_low != 0
    vwap_low := cum_pv_low / cum_v_low

// Check for new high-volume candle that is also abnormally high and reset cumulative variables for high-volume VWAP
new_high_volume = false
if volume > highest_volume and volume > volume_threshold * avg_volume
    highest_volume := volume
    cum_v_high_volume := 0
    cum_pv_high_volume := 0
    new_high_volume := true

cum_v_high_volume += volume
cum_pv_high_volume += close * volume
if cum_v_high_volume != 0
    vwap_high_volume := cum_pv_high_volume / cum_v_high_volume

// Plot VWAPs
plot(vwap_open, color=color.red, linewidth=2, title="VWAP Open")
plot(vwap_high, color=color.green, linewidth=2, title="VWAP High")
plot(vwap_low, color=color.blue, linewidth=2, title="VWAP Low")
plot(vwap_high_volume, color=color.purple, linewidth=2, title="VWAP High Volume")

// Plot a vertical line on the chart only when a new high-volume VWAP anchor occurs
bgcolor(new_high_volume ? color.new(color.purple, 90) : na, offset=-1)

// Calculate displacement amounts
displacement_amount_open = vwap_open * displacement_percentage
displacement_amount_high = vwap_high * displacement_percentage
displacement_amount_low = vwap_low * displacement_percentage
displacement_amount_high_volume = vwap_high_volume * displacement_percentage

// Check for gaps on the opposite side of a VWAP
gap_up_opposite_open = na(close[1]) ? false : (open > close[1] and open < vwap_open and close[1] > vwap_open)
gap_down_opposite_open = na(close[1]) ? false : (open < close[1] and open > vwap_open and close[1] < vwap_open)

gap_up_opposite_high = na(close[1]) ? false : (open > close[1] and open < vwap_high and close[1] > vwap_high)
gap_down_opposite_high = na(close[1]) ? false : (open < close[1] and open > vwap_high and close[1] < vwap_high)

gap_up_opposite_low = na(close[1]) ? false : (open > close[1] and open < vwap_low and close[1] > vwap_low)
gap_down_opposite_low = na(close[1]) ? false : (open < close[1] and open > vwap_low and close[1] < vwap_low)

gap_up_opposite_high_volume = na(close[1]) ? false : (open > close[1] and open < vwap_high_volume and close[1] > vwap_high_volume)
gap_down_opposite_high_volume = na(close[1]) ? false : (open < close[1] and open > vwap_high_volume and close[1] < vwap_high_volume)

// RSI calculation for momentum change detection
rsi = ta.rsi(close, 14)
long_exit_condition = rsi > 70
short_exit_condition = rsi < 30

// Debugging Plots
plotshape(not gap_up_opposite_open and not gap_down_opposite_open and close > vwap_open and low < vwap_open - displacement_amount_open and close[1] < vwap_open, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Open Long Signal")
plotshape(not gap_up_opposite_open and not gap_down_opposite_open and close < vwap_open and high > vwap_open + displacement_amount_open and close[1] > vwap_open, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Open Short Signal")

plotshape(not gap_up_opposite_high and not gap_down_opposite_high and close > vwap_high and low < vwap_high - displacement_amount_high and close[1] < vwap_high, style=shape.triangledown, location=location.abovebar, color=color.blue, size=size.small, title="High Long Signal")
plotshape(not gap_up_opposite_high and not gap_down_opposite_high and close < vwap_high and high > vwap_high + displacement_amount_high and close[1] > vwap_high, style=shape.triangleup, location=location.belowbar, color=color.orange, size=size.small, title="High Short Signal")

plotshape(not gap_up_opposite_low and not gap_down_opposite_low and close > vwap_low and low < vwap_low - displacement_amount_low and close[1] < vwap_low, style=shape.triangledown, location=location.abovebar, color=color.purple, size=size.small, title="Low Long Signal")
plotshape(not gap_up_opposite_low and not gap_down_opposite_low and close < vwap_low and high > vwap_low + displacement_amount_low and close[1] > vwap_low, style=shape.triangleup, location=location.belowbar, color=color.yellow, size=size.small, title="Low Short Signal")

plotshape(not gap_up_opposite_high_volume and not gap_down_opposite_high_volume and close > vwap_high_volume and low < vwap_high_volume - displacement_amount_high_volume and close[1] < vwap_high_volume, style=shape.triangledown, location=location.abovebar, color=color.teal, size=size.small, title="High Volume Long Signal")
plotshape(not gap_up_opposite_high_volume and not gap_down_opposite_high_volume and close < vwap_high_volume and high > vwap_high_volume + displacement_amount_high_volume and close[1] > vwap_high_volume, style=shape.triangleup, location=location.belowbar, color=color.fuchsia, size=size.small, title="High Volume Short Signal")

// Trading signals based on VWAP support/resistance with displacement, no gaps on the opposite side, and bounce conditions
if not gap_up_opposite_open and not gap_down_opposite_open
    if (close > vwap_open and low < vwap_open)
        if close > open
            strategy.entry("Long_Open_Wick", strategy.long, comment="Wick")
        else
            strategy.entry("Long_Open_Crossover", strategy.long, comment="Crossover")
    
    if (close < vwap_open and high > vwap_open)
        if close < open
            strategy.entry("Short_Open_Wick", strategy.short, comment="Wick")
        else
            strategy.entry("Short_Open_Crossover", strategy.short, comment="Crossover")

if not gap_up_opposite_high and not gap_down_opposite_high
    if (close > vwap_high and low < vwap_high)
        if close > open
            strategy.entry("Long_High_Wick", strategy.long, comment="Wick")
        else
            strategy.entry("Long_High_Crossover", strategy.long, comment="Crossover")
    
    if (close < vwap_high and high > vwap_high)
        if close < open
            strategy.entry("Short_High_Wick", strategy.short, comment="Wick")
        else
            strategy.entry("Short_High_Crossover", strategy.short, comment="Crossover")

if not gap_up_opposite_low and not gap_down_opposite_low
    if (close > vwap_low and low < vwap_low)
        if close > open
            strategy.entry("Long_Low_Wick", strategy.long, comment="Wick")
        else
            strategy.entry("Long_Low_Crossover", strategy.long, comment="Crossover")
    
    if (close < vwap_low and high > vwap_low)
        if close < open
            strategy.entry("Short_Low_Wick", strategy.short, comment="Wick")
        else
            strategy.entry("Short_Low_Crossover", strategy.short, comment="Crossover")

if not gap_up_opposite_high_volume and not gap_down_opposite_high_volume
    if (close > vwap_high_volume and low < vwap_high_volume)
        if close > open
            strategy.entry("Long_High_Volume_Wick", strategy.long, comment="Wick")
        else
            strategy.entry("Long_High_Volume_Crossover", strategy.long, comment="Crossover")
    
    if (close < vwap_high_volume and high > vwap_high_volume)
        if close < open
            strategy.entry("Short_High_Volume_Wick", strategy.short, comment="Wick")
        else
            strategy.entry("Short_High_Volume_Crossover", strategy.short, comment="Crossover")

// Exit trades based on RSI momentum change
if strategy.position_size > 0 and long_exit_condition
    strategy.close("Long_Open_Wick")
    strategy.close("Long_Open_Crossover")
    strategy.close("Long_High_Wick")
    strategy.close("Long_High_Crossover")
    strategy.close("Long_Low_Wick")
    strategy.close("Long_Low_Crossover")
    strategy.close("Long_High_Volume_Wick")
    strategy.close("Long_High_Volume_Crossover")

if strategy.position_size < 0 and short_exit_condition
    strategy.close("Short_Open_Wick")
    strategy.close("Short_Open_Crossover")
    strategy.close("Short_High_Wick")
    strategy.close("Short_High_Crossover")
    strategy.close("Short_Low_Wick")
    strategy.close("Short_Low_Crossover")
    strategy.close("Short_High_Volume_Wick")
    strategy.close("Short_High_Volume_Crossover")