Die Ressourcen sind geladen. Beförderung...

Kauf- und Verkaufsvolumen-Heatmap mit Echtzeitpreisstrategie

Schriftsteller:ChaoZhang, Datum: 2024-05-24 17:16:58
Tags:EMAVWAPSMA

img

Übersicht

Diese Strategie kombiniert eine Volumen-Heatmap und einen Echtzeitpreis, um Kauf- und Verkaufssignale zu generieren, indem die Verteilung von Preis und Volumen über einen bestimmten Zeitraum analysiert wird. Die Strategie berechnet zunächst mehrere Preisniveaus auf der Grundlage des aktuellen Preises und einer festgelegten Preisspanneprozentsatz. Sie zählt dann die Kauf- und Verkaufsvolumen auf jeder Preisstufe über einen vergangenen Zeitraum und berechnet die kumulativen Kauf- und Verkaufsvolumina. Die Farbe der Etiketten wird auf der Grundlage der kumulativen Kauf- und Verkaufsvolumina bestimmt. Darüber hinaus zeichnet die Strategie die Echtzeitpreiskurve. Darüber hinaus enthält die Strategie Indikatoren wie EMA und VWAP, um Kauf- und Verkaufssignale auf der Grundlage ihrer Beziehung zu Preis und Volumen zu generieren. Ein Kaufsignal wird generiert, wenn die Kaufbedingungen erfüllt sind, und kein vorheriges Signal aufgetreten ist. Ein Verkaufsignal wird generi

Strategieprinzip

  1. Berechnen Sie mehrere Preisniveaus auf der Grundlage des aktuellen Preises und eines festgelegten Preisbereichs.
  2. Berechnen Sie das Kauf- und Verkaufsvolumen auf jeder Preisstufe in einem vergangenen Zeitraum und berechnen Sie das kumulative Kauf- und Verkaufsvolumen.
  3. Bestimmung der Farbe der Etiketten auf der Grundlage der kumulierten Kauf- und Verkaufsmengen und Anzeige der Etiketten oder Grafikformen.
  4. Zeichnen Sie die Echtzeitpreiskurve.
  5. Berechnen Sie Indikatoren wie EMA und VWAP.
  6. Bestimmen Sie, ob die Kaufbedingungen auf der Grundlage der Beziehung zwischen Preis und Indikatoren wie EMA und VWAP sowie Volumenbedingungen erfüllt sind.
  7. Bestimmen Sie, ob die Verkaufsbedingungen auf der Grundlage der Beziehung zwischen Preis und Indikatoren wie EMA sowie Volumenbedingungen erfüllt sind. Wenn erfüllt und kein vorheriges Signal aufgetreten ist, erzeugen Sie ein Verkaufssignal. Wenn zwei aufeinanderfolgende rote Kerzen sind und kein vorheriges Signal aufgetreten ist, erzeugen Sie auch ein Verkaufssignal.
  8. Erfassen Sie die aktuellen Kauf- und Verkaufsbedingungen und aktualisieren Sie den Signalstatus.

Analyse der Vorteile

  1. Die Kombination von Volumen-Heatmap und Echtzeitpreis bietet eine intuitive Darstellung der Preis- und Volumenverteilung, die als Referenz für Handelsentscheidungen dient.
  2. Die Einbeziehung von Indikatoren wie EMA und VWAP bereichert die Bewertung der Strategie und verbessert ihre Zuverlässigkeit.
  3. Die Strategie berücksichtigt mehrere Faktoren, darunter Preis, Indikatoren und Volumen, wodurch die Kauf- und Verkaufssignale umfassender und robuster werden.
  4. Die Strategie legt Beschränkungen für die Signalerzeugung fest, um zu vermeiden, dass sich die Signale kontinuierlich wiederholen, wodurch irreführende Signale reduziert werden.

Risikoanalyse

  1. Die Leistung der Strategie kann von Parametereinstellungen wie dem Preisbereichsanteil und der Rückblicksperiode beeinflusst werden, die Anpassungen und Optimierungen auf der Grundlage spezifischer Situationen erfordern.
  2. Indikatoren wie EMA und VWAP haben eine inhärente Verzögerung und Einschränkungen, die in bestimmten Marktumgebungen unwirksam werden können.
  3. Die Strategie eignet sich hauptsächlich für Trending-Märkte und kann in unruhigen Märkten mehr falsche Signale erzeugen.
  4. Die Risikokontrollmaßnahmen der Strategie sind relativ einfach und fehlen Risikomanagementinstrumente wie Stop-Loss und Positionsgröße.

Optimierungsrichtung

  1. Einführung weiterer technischer Indikatoren und Indikatoren für die Marktstimmung, wie RSI, MACD, Bollinger Bands usw., um die Entscheidungsgrundlage der Strategie zu erweitern.
  2. Optimieren der Bedingungen für die Erzeugung von Kauf- und Verkaufssignalen, um die Genauigkeit und Zuverlässigkeit der Signale zu verbessern.
  3. Einbeziehung von Risikokontrollmaßnahmen wie Stop-Loss- und Positionsgrößen, Festlegung angemessener Stop-Loss-Levels und Positionsgrößen zur Kontrolle des Risikopositionsrisikos einzelner Geschäfte.
  4. Durchführung von Parameteroptimierung und Backtesting der Strategie, um die optimalen Parameterkombinationen und Marktanwendbarkeit zu finden.
  5. Es sollte in Betracht gezogen werden, diese Strategie mit anderen Strategien zu kombinieren, um die Stärken verschiedener Strategien zu nutzen und die allgemeine Stabilität und Rentabilität zu verbessern.

Zusammenfassung

Diese Strategie erzeugt Kauf- und Verkaufssignale, indem sie eine Volumen-Heatmap, Echtzeitpreis und mehrere technische Indikatoren kombiniert und einen bestimmten Referenzwert liefert. Der Vorteil der Strategie liegt in ihrer Fähigkeit, die Preis- und Volumenverteilung intuitiv anzuzeigen und mehrere Faktoren umfassend zu berücksichtigen, um Signale zu generieren. Die Strategie hat jedoch auch einige Einschränkungen und Risiken, wie die Auswirkungen von Parameter-Einstellungen, die Nachzügigkeit der Indikatoren und die Abhängigkeit von Trendmärkten. Daher sind in praktischen Anwendungen weitere Optimierungen und Verbesserungen der Strategie erforderlich, wie die Einführung mehrerer Indikatoren, die Optimierung der Signalbedingungen, die Verbesserung der Risikokontrolle usw., um die Robustheit und Rentabilität der Strategie zu verbessern.


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

//@version=5
strategy("Buy and Sell Volume Heatmap with Real-Time Price Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Settings for Volume Heatmap
lookbackPeriod = input.int(100, title="Lookback Period")
baseGreenColor = input.color(color.green, title="Buy Volume Color")
baseRedColor = input.color(color.red, title="Sell Volume Color")
priceLevels = input.int(10, title="Number of Price Levels")
priceRangePct = input.float(0.01, title="Price Range Percentage")
labelSize = input.string("small", title="Label Size", options=["tiny", "small", "normal", "large"])
showLabels = input.bool(true, title="Show Volume Labels")

// Initialize arrays to store price levels, buy volumes, and sell volumes
var float[] priceLevelsArr = array.new_float(priceLevels)
var float[] buyVolumes = array.new_float(priceLevels)
var float[] sellVolumes = array.new_float(priceLevels)

// Calculate price levels around the current price
for i = 0 to priceLevels - 1
    priceLevel = close * (1 + (i - priceLevels / 2) * priceRangePct)  // Adjust multiplier for desired spacing
    array.set(priceLevelsArr, i, priceLevel)

// Calculate buy and sell volumes for each price level
for i = 0 to priceLevels - 1
    level = array.get(priceLevelsArr, i)
    buyVol = 0.0
    sellVol = 0.0
    for j = 1 to lookbackPeriod
        if close[j] > open[j]
            if close[j] >= level and low[j] <= level
                buyVol := buyVol + volume[j]
        else
            if close[j] <= level and high[j] >= level
                sellVol := sellVol + volume[j]
    array.set(buyVolumes, i, buyVol)
    array.set(sellVolumes, i, sellVol)

// Determine the maximum volumes for normalization
maxBuyVolume = array.max(buyVolumes)
maxSellVolume = array.max(sellVolumes)

// Initialize cumulative buy and sell volumes for the current bar
cumulativeBuyVol = 0.0
cumulativeSellVol = 0.0

// Calculate colors based on the volumes and accumulate volumes for the current bar
for i = 0 to priceLevels - 1
    buyVol = array.get(buyVolumes, i)
    sellVol = array.get(sellVolumes, i)
    cumulativeBuyVol := cumulativeBuyVol + buyVol
    cumulativeSellVol := cumulativeSellVol + sellVol

// Determine the label color based on which volume is higher
labelColor = cumulativeBuyVol > cumulativeSellVol ? baseGreenColor : baseRedColor

// Initialize variables for plotshape
var float shapePosition = na
var color shapeColor = na

if cumulativeBuyVol > 0 or cumulativeSellVol > 0
    if showLabels
        labelText = "Buy: " + str.tostring(cumulativeBuyVol) + "\nSell: " + str.tostring(cumulativeSellVol)
        label.new(x=bar_index, y=high + (high - low) * 0.02, text=labelText, color=color.new(labelColor, 0), textcolor=color.white, style=label.style_label_down, size=labelSize)
    else
        shapePosition := high + (high - low) * 0.02
        shapeColor := labelColor

// Plot the shape outside the local scope
plotshape(series=showLabels ? na : shapePosition, location=location.absolute, style=shape.circle, size=size.tiny, color=shapeColor)

// Plot the real-time price on the chart
plot(close, title="Real-Time Price", color=color.blue, linewidth=2, style=plot.style_line)

// Mpullback Indicator Settings
a = ta.ema(close, 9)
b = ta.ema(close, 20)
e = ta.vwap(close)
volume_ma = ta.sma(volume, 20)

// Calculate conditions for buy and sell signals
buy_condition = close > a and close > e and volume > volume_ma and close > open and low > a and low > e // Ensure close, low are higher than open, EMA, and VWAP
sell_condition = close < a and close < b and close < e and volume > volume_ma

// Store the previous buy and sell conditions
var bool prev_buy_condition = na
var bool prev_sell_condition = na

// Track if a buy or sell signal has occurred
var bool signal_occurred = false

// Generate buy and sell signals based on conditions
buy_signal = buy_condition and not prev_buy_condition and not signal_occurred
sell_signal = sell_condition and not prev_sell_condition and not signal_occurred

// Determine bearish condition (close lower than the bottom 30% of the candle's range)
bearish = close < low + (high - low) * 0.3

// Add sell signal when there are two consecutive red candles and no signal has occurred
two_consecutive_red_candles = close[1] < open[1] and close < open
sell_signal := sell_signal or (two_consecutive_red_candles and not signal_occurred)

// Remember the current conditions for the next bar
prev_buy_condition := buy_condition
prev_sell_condition := sell_condition

// Update signal occurred status
signal_occurred := buy_signal or sell_signal

// Plot buy and sell signals
plotshape(buy_signal, title="Buy", style=shape.labelup, location=location.belowbar, color=color.green, text="Buy", textcolor=color.white)
plotshape(sell_signal, title="Sell", style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell", textcolor=color.white)

// Strategy entry and exit
if buy_signal
    strategy.entry("Buy", strategy.long)

if sell_signal
    strategy.entry("Sell", strategy.short)


Verwandt

Mehr