Estrategia de seguimiento de tendencias basada en VWAP


Fecha de creación: 2024-02-29 15:26:56 Última modificación: 2024-02-29 15:26:56
Copiar: 0 Número de Visitas: 944
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en VWAP

Descripción general

La estrategia se basa en VWAP y EMA como indicadores para determinar la dirección de la tendencia, VWAP representa el precio típico y EMA200 representa la tendencia de la línea media. Hacer más cuando el precio es superior a VWAP y EMA200 y hacer menos cuando es inferior a VWAP y EMA200 es una estrategia típica de seguimiento de la tendencia.

Principio de estrategia

La lógica central de la estrategia es usar VWAP y EMA para determinar la tendencia de los precios.

  • El VWAP representa el precio típico, que refleja el costo promedio de los participantes en el mercado. Cuando el precio es superior al VWAP, representa el aumento de la fuerza del comprador, hacer más; cuando el precio es inferior al VWAP, representa el aumento de la fuerza del vendedor, debe hacer un vacío.
  • El EMA200 representa la tendencia de la línea media larga del precio hacia arriba. El precio por encima de la EMA200 representa la tendencia positiva de la línea media larga, se debe hacer más; el precio por debajo de la EMA200 representa la tendencia negativa de la línea media larga, se debe hacer un recorte.

Por lo tanto, la estrategia primero determina si el precio es superior al VWAP y al EMA200 al mismo tiempo, y si es así, hace más; si el precio es inferior al VWAP y al EMA200 al mismo tiempo, hace nada. Como se puede ver, la estrategia depende principalmente de VWAP y EMA para determinar las decisiones de compra y venta.

Además, la estrategia también establece un punto de parada y pérdida. El punto de parada se establece en el 3.5% del precio de entrada después de hacer más, y el punto de parada en el 1.4%; el punto de parada se establece en el 2.5% del precio de entrada después de hacer menos, y el punto de parada en el 0.9% . Esto evita pérdidas excesivas.

Ventajas estratégicas

La mayor ventaja de esta estrategia es que se puede usar VWAP y EMA para determinar tendencias de manera muy fiable.

  • El VWAP refleja con precisión el costo promedio de los participantes en el mercado y es un buen indicador de tendencias.
  • El EMA200 refleja claramente las tendencias de la línea media y larga y es muy fiable para determinar la dirección de las grandes tendencias.

Por lo tanto, la combinación de VWAP y EMA para determinar la tendencia es muy confiable. Cuando ambos juzgan la tendencia de manera consistente, la tasa de éxito de la operación es alta.

Además, el establecimiento de un punto de parada para evitar pérdidas individuales excesivas.

Riesgo estratégico

El principal riesgo de esta estrategia es que VWAP y EMA podrían emitir señales erróneas.

  • Cuando el mercado fluctúa fuertemente, los precios pueden desviarse de VWAP por un corto período de tiempo, lo que emite una señal errónea.
  • Cuando una nueva tendencia está apenas comenzando, la EMA puede estar rezagada por los cambios en los precios, lo que hace que la estrategia pierda el mejor momento de entrada.

Además, la configuración de stop loss puede ser incorrecta y el riesgo de pérdidas excesivas permanece.

Para resolver el problema anterior, podemos optimizar la configuración de los parámetros de VWAP y EMA para que sean más capaces de discernir el comienzo de una nueva tendencia. Al mismo tiempo, se puede configurar un stop loss adaptativo para que el stop loss se ajuste a la fluctuación del precio.

Dirección de optimización de la estrategia

La estrategia se puede optimizar principalmente en los siguientes aspectos:

  • Optimización de los parámetros VWAP para encontrar una combinación de parámetros VWAP con una tendencia más estable.
  • Optimización del ciclo EMA para encontrar parámetros EMA más precisos para determinar la tendencia.
  • La adición de otros indicadores de tendencias de discernimiento, como la banda de Brin, KDJ y otros en combinación con VWAP y EMA, mejora la precisión de los juicios.
  • Configurar el stop-loss para adaptarse a las fluctuaciones de los precios, de acuerdo con ciertas reglas, para que el nivel de stop-loss se ajuste a las fluctuaciones de los precios y evitar que el stop-loss sea demasiado rígido
  • En combinación con la gestión de posiciones. Ajuste el tamaño de la posición según los indicadores de retiros, pérdidas acumuladas y otros, y controle el riesgo general de la estrategia.

Resumir

La estrategia en su conjunto es una estrategia de seguimiento de tendencias muy fiable. Utiliza VWAP y EMA para determinar la dirección de la tendencia, la idea es clara y simple, y la probabilidad de éxito de la entrada es alta cuando ambos emiten señales consistentes.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//26m Binance BTCUSDTPERP
//@version=4
strategy("VWAP Trend Follower", initial_capital=100, overlay=true, commission_type=strategy.commission.percent, commission_value=0.04, default_qty_type = strategy.percent_of_equity, default_qty_value = 90, currency = currency.USD )

/// INITIALISE STRATEGY ///
price=close[1]
vprice=vwap(price)
trend=ema(price, 200)

/// RISK MANAGEMENT ///
long_tp_inp = input(3.5, title='Long Take Profit %',step=0.1)/100
long_sl_inp = input(1.4, title='Long Stop Loss %',step=0.1)/100
short_tp_inp = input(2.5, title='Short Take Profit %',step=0.1)/100
short_sl_inp = input(0.9, title='Short Stop Loss %',step=0.1)/100
long_take_level = strategy.position_avg_price * (1 + long_tp_inp)
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)
short_take_level = strategy.position_avg_price * (1 - short_tp_inp)
short_stop_level = strategy.position_avg_price * (1 + short_sl_inp)
//long_trailing = input(5, title='Trailing Stop Long',step=0.1) / 100
//short_trailing = input(5, title='Trailing Stop short',step=0.1) / 100

/// STRATEGY CONDITIONS ///
aLong= price > trend and price > vprice
entry_long = aLong and aLong[2] and aLong[1]
aShort= price < trend and price < vprice 
entry_short = aShort and aShort[2] and aShort[1]
//exit_long = 
//exit_short =
//entry_price_long=valuewhen(entry_long,close,0)
//entry_price_short=valuewhen(entry_short,close,0)

/// PLOTTING ///
plot(vprice,                color=#5875E1, linewidth=2)
plot(trend,                 color=#D965E1, linewidth=1)
plotshape(series=aLong,     color=#71E181,style=shape.labelup)
plotshape(series=aShort,    color=#E18BA5,style=shape.labeldown)
//plot(long_take_level,     color=#00E676, linewidth=2)
//plot(long_stop_level,     color=#FF5252, linewidth=1)
//plot(short_take_level,    color=#4CAF50, linewidth=2)
//plot(short_stop_level,    color=#FF5252, linewidth=1)

/// PERIOD ///
testStartYear   = input(2019, "Backtest Start Year")
testStartMonth  = input(1, "Backtest Start Month")
testStartDay    = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear    = input(2020, "Backtest Stop Year")
testStopMonth   = input(12, "Backtest Stop Month")
testStopDay     = input(31, "Backtest Stop Day")
testPeriodStop  = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
testPeriod() => true

//// STRATEGY EXECUTION ////

if testPeriod()
    if strategy.position_size == 0 or strategy.position_size > 0
        strategy.entry(id="Long", long=true, when=entry_long, comment="Long")
        strategy.exit("Take Profit/ Stop Loss","Long", limit=long_take_level, stop=long_stop_level,comment="Exit Long")//,trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
//        strategy.close(id="Long", when=exit_long, comment = "Exit Long")

    if strategy.position_size == 0 or strategy.position_size < 0
        strategy.entry(id="Short", long=false, when=entry_short, comment = "Short")
        strategy.exit("Take Profit/ Stop Loss","Short", limit=short_take_level , stop=short_stop_level,comment = "Exit Short")//, trail_points=entry_price_short * short_trailing / syminfo.mintick, trail_offset=entry_price_short * short_trailing / syminfo.mintick)
//        strategy.close(id="Short", when=exit_short, comment = "Exit Short")