Estrategias de compra y venta basadas en mapas de calor de volumen y precios en tiempo real

EMA VWAP SMA
Fecha de creación: 2024-05-24 17:16:58 Última modificación: 2024-05-24 17:16:58
Copiar: 2 Número de Visitas: 570
1
Seguir
1617
Seguidores

Estrategias de compra y venta basadas en mapas de calor de volumen y precios en tiempo real

Descripción general

La estrategia combina un gráfico de volumen de transacciones y precios en tiempo real para generar una señal de compra y venta mediante el análisis de los precios y la distribución del volumen de transacciones en un período de tiempo determinado. La estrategia primero calcula varios niveles de precios en función del precio actual y el porcentaje del rango de precios establecido.

Principio de estrategia

  1. Se calculan varios niveles de precios basados en el precio actual y el porcentaje del rango de precios establecido.
  2. Calcular el volumen de transacciones de compra y venta en cada nivel de precios durante el período anterior y calcular el volumen de transacciones de compra y venta acumulado.
  3. Determine el color de las etiquetas y muestre las etiquetas o dibuje un gráfico de acuerdo con el volumen de transacciones acumuladas.
  4. Trazar una curva de precios en tiempo real.
  5. Calcular los indicadores como el EMA, el VWAP y otros.
  6. En función de la relación entre el precio y los indicadores como EMA, VWAP y las condiciones de volumen de transacción, se determina si se cumplen las condiciones de compra. Si se cumple y no se ha generado una señal antes, se genera una señal de compra.
  7. En función de la relación entre el precio y los indicadores como la EMA y las condiciones de volumen de transacción, se determina si se cumplen las condiciones de venta. Si se cumple y no se ha producido una señal antes, se produce una señal de venta. Si hay dos líneas negativas consecutivas y no se ha producido una señal antes, también se produce una señal de venta.
  8. Registra el estado actual de las condiciones de compra y venta y actualiza el estado de la generación de señales.

Análisis de las ventajas

  1. La combinación de gráficos de volumen de transacciones y precios en tiempo real permite mostrar de forma intuitiva la distribución de precios y volúmenes de transacciones, lo que proporciona una referencia para las decisiones comerciales.
  2. La introducción de indicadores como EMA, VWAP, enriquece el criterio de la estrategia y mejora la fiabilidad de la misma.
  3. Al mismo tiempo, se tienen en cuenta factores como el precio, los indicadores y el volumen de transacciones, lo que hace que la señal de compra y venta sea más completa y sólida.
  4. Se establecen las condiciones de restricción de la generación de señales, evitando la generación de señales repetitivas y reduciendo las señales engañosas.

Análisis de riesgos

  1. El rendimiento de la estrategia puede verse afectado por la configuración de parámetros como el porcentaje de rango de precios, el período de retroceso, etc., que requieren ajustes y optimizaciones según las circunstancias específicas.
  2. Indicadores como el EMA, VWAP y otros también tienen ciertos retrasos y limitaciones, que pueden no ser válidos en ciertas circunstancias del mercado.
  3. La estrategia se aplica principalmente a los mercados con una fuerte tendencia, donde las señales falsas son más probables en los mercados convulsivos.
  4. Las medidas de control de riesgo de la estrategia son relativamente simples y carecen de medios de gestión de riesgo como el stop loss y la gestión de posiciones.

Dirección de optimización

  1. La introducción de más indicadores técnicos y de sentimiento en el mercado, como el RSI, el MACD y el Brin, enriquece la base de juicio estratégico.
  2. Optimizar las condiciones de generación de las señales de compra y venta, mejorar la precisión y la fiabilidad de las señales. Se puede considerar la introducción de análisis de varios marcos de tiempo para confirmar la dirección de la tendencia.
  3. Incorporar medidas de control de riesgo como el control de pérdidas y posiciones, establecer límites razonables de pérdidas y posiciones, y controlar el umbral de riesgo de las operaciones individuales.
  4. Optimización de parámetros y retroalimentación de la estrategia para encontrar la combinación óptima de parámetros y el alcance de la aplicación en el mercado.
  5. Considerar la combinación de esta estrategia con otras estrategias para aprovechar las ventajas de las diferentes estrategias y mejorar la estabilidad y rentabilidad en general.

Resumir

La estrategia de la combinación de gráficos de volumen de transacciones, precios en tiempo real y varios indicadores técnicos para generar señales de compra y venta, con un cierto valor de referencia. La ventaja de la estrategia es que puede mostrar visualmente la distribución de precios y volúmenes de transacciones, y la generación de señales de la consideración integral de varios factores. Pero la estrategia también tiene algunas limitaciones y riesgos, como el impacto de la configuración de parámetros, el atraso de los indicadores, la dependencia de mercados de tendencias, etc. Por lo tanto, en la aplicación práctica, es necesario optimizar y perfeccionar la estrategia, como la introducción de más indicadores, la optimización de las condiciones de la señal, el fortalecimiento del control de riesgos, etc., para mejorar la estabilidad de la estrategia y la rentabilidad.

Código Fuente 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)