En la carga de los recursos... Cargando...

Mapa de calor de volumen de compra y venta con estrategia de precios en tiempo real

El autor:¿ Qué pasa?, Fecha: 2024-05-24 17:16:58
Las etiquetas:El EMAVWAPLa SMA

img

Resumen general

Esta estrategia combina un mapa de calor de volumen y el precio en tiempo real para generar señales de compra y venta mediante el análisis de la distribución de precio y volumen durante un determinado período. La estrategia primero calcula varios niveles de precio basados en el precio actual y un porcentaje de rango de precios establecido. Luego cuenta los volúmenes de compra y venta en cada nivel de precio durante un período pasado y calcula los volúmenes acumulados de compra y venta. El color de las etiquetas se determina en función de los volúmenes acumulados de compra y venta. Además, la estrategia traza la curva de precios en tiempo real. Además, la estrategia incorpora indicadores como EMA y VWAP para generar señales de compra y venta basadas en su relación con el precio y el volumen.

Principio de la estrategia

  1. Calcular varios niveles de precios basados en el precio actual y un porcentaje de rango de precios establecido.
  2. Se calcularán los volúmenes de compra y venta en cada nivel de precios durante un período pasado y se calcularán los volúmenes de compra y venta acumulados.
  3. Determinar el color de las etiquetas en función de los volúmenes acumulados de compra y venta y mostrar las etiquetas o las formas de la gráfica.
  4. Trace la curva de precios en tiempo real.
  5. Calcular indicadores como el EMA y el VWAP.
  6. Determine si se cumplen las condiciones de compra basándose en la relación entre el precio y los indicadores como EMA y VWAP, así como las condiciones de volumen.
  7. Determine si se cumplen las condiciones de venta basándose en la relación entre el precio y los indicadores como la EMA, así como las condiciones de volumen. Si se cumplen y no se ha producido ninguna señal anterior, genere una señal de venta. Si hay dos velas rojas consecutivas y no se ha producido ninguna señal anterior, también genere una señal de venta.
  8. Registrar los estados actuales de condiciones de compra y venta y actualizar el estado de ocurrencia de la señal.

Análisis de ventajas

  1. La combinación de mapa de calor de volumen y precio en tiempo real proporciona una visualización intuitiva de la distribución de precios y volumen, que sirve de referencia para las decisiones comerciales.
  2. La incorporación de indicadores como el EMA y el VWAP enriquece la evaluación de la situación de la estrategia y mejora su fiabilidad.
  3. La estrategia considera múltiples factores, incluidos el precio, los indicadores y el volumen, lo que hace que las señales de compra y venta sean más completas y robustas.
  4. La estrategia establece limitaciones en la generación de señales para evitar generar señales repetidas continuamente, reduciendo las señales engañosas.

Análisis de riesgos

  1. El rendimiento de la estrategia puede verse afectado por ajustes de parámetros como el porcentaje del rango de precios y el período de revisión, lo que requiere ajustes y optimizaciones basados en situaciones específicas.
  2. Los indicadores como el EMA y el VWAP presentan un retraso y limitaciones inherentes, que pueden volverse ineficaces en determinados entornos de mercado.
  3. La estrategia es principalmente adecuada para mercados de tendencia y puede generar más señales falsas en mercados inestables.
  4. Las medidas de control de riesgos de la estrategia son relativamente simples, careciendo de herramientas de gestión de riesgos como el stop-loss y el dimensionamiento de posiciones.

Dirección de optimización

  1. Introducir más indicadores técnicos e indicadores del sentimiento del mercado, como el RSI, el MACD, las bandas de Bollinger, etc., para enriquecer la base del juicio de la estrategia.
  2. Optimizar las condiciones para generar señales de compra y venta para mejorar la precisión y fiabilidad de la señal.
  3. Incorporar medidas de control de riesgos como el tamaño de las posiciones y el stop-loss, fijando niveles y tamaños de posiciones razonables para controlar la exposición al riesgo de las operaciones individuales.
  4. Realizar la optimización de parámetros y las pruebas de retroceso de la estrategia para encontrar las combinaciones óptimas de parámetros y la aplicabilidad en el mercado.
  5. Considere combinar esta estrategia con otras estrategias para aprovechar las fortalezas de las diferentes estrategias y mejorar la estabilidad y la rentabilidad en general.

Resumen de las actividades

Esta estrategia genera señales de compra y venta mediante la combinación de un mapa de calor de volumen, precio en tiempo real y múltiples indicadores técnicos, proporcionando un cierto valor de referencia. La ventaja de la estrategia radica en su capacidad para mostrar intuitivamente la distribución de precio y volumen y considerar de manera integral múltiples factores para generar señales. Sin embargo, la estrategia también tiene algunas limitaciones y riesgos, como el impacto de la configuración de parámetros, la naturaleza rezagada de los indicadores y la dependencia de los mercados de tendencia. Por lo tanto, en las aplicaciones prácticas, se necesita una mayor optimización y mejora de la estrategia, como la introducción de más indicadores, la optimización de las condiciones de la señal, la mejora del control de riesgos, etc., para mejorar la robustez y rentabilidad de la estrategia.


/*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)


Relacionados

Más.