Estrategia ZVWAP basada en la distancia Z desde VWAP

El autor:¿ Qué pasa?, Fecha: 2023-11-10 12:02:19
Las etiquetas:

img

Resumen general

Esta estrategia se basa en la distancia Z del indicador VWAP de LazyBear. Utiliza la distancia Z entre el precio y el VWAP para determinar las condiciones de sobrecompra y sobreventa, así como las entradas y salidas.

Estrategia lógica

  1. Calcular el valor del VWAP
  2. Calcular la distancia Z entre el precio y el VWAP
  3. Se establecen la línea sobrecomprada (2.5) y la línea sobrevendida (-0.5)
  4. Ir largo cuando la EMA rápida > la EMA lenta, la distancia Z < la línea de sobreventa y la distancia Z cruzan por encima de 0
  5. Posición cerrada cuando la distancia Z > línea sobrecomprada
  6. Incorporar la lógica de stop loss

Funciones clave:

  • calc_zvwap: Calcular la distancia Z entre el precio y el VWAP
  • Valor del VWAP: vwap ((hlc3)
  • La velocidad de EMA:
  • Lenta EMA: ema (casi, lenta EMA)

Análisis de ventajas

  1. La distancia Z muestra de forma intuitiva los niveles de sobrecompra/sobreventa
  2. La EMA filtra las faltas falsas
  3. Permite que las pirámides se aprovechen de las tendencias
  4. Tiene una lógica de stop loss para controlar el riesgo

Análisis de riesgos

  1. Necesidad de asegurar que los parámetros como las líneas, los períodos de EMA se establecen correctamente
  2. Retrasos en el indicador de distancia Z, puede perder puntos clave de inflexión
  3. La pirámide puede aumentar las pérdidas si la tendencia se invierte
  4. Se debe establecer un stop loss razonable.

Soluciones:

  1. Optimización de parámetros mediante backtesting
  2. Añadir otros indicadores a las señales de filtro
  3. Establecer las condiciones adecuadas para la pirámide
  4. Utilizar el stop loss dinámico

Direcciones de optimización

  1. Optimización de los períodos de EMA
  2. Prueba diferentes criterios de sobrecompra/sobreventa
  3. Añadir otros indicadores para filtrar el ruido
  4. Prueba de diferentes técnicas de stop loss
  5. Optimizar la lógica de entrada, pirámide y stop loss

Resumen de las actividades

La estrategia utiliza la distancia Z para determinar la relación precio-VWAP y agrega EMA a las señales de filtro, con el objetivo de capturar las oportunidades de tendencia. Permite la pirámide para seguir las tendencias y tiene un stop loss para controlar el riesgo. La optimización y la adición de otros indicadores pueden mejorar la robustez. Sin embargo, el problema de la distancia Z debe considerarse durante la optimización. En general, esta es una estrategia de seguimiento de tendencias con lógica simple y clara. Cuando está completamente optimizada, puede ser una herramienta eficiente para comerciar tendencias.


/*backtest
start: 2022-11-03 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//This is based on Z distance from VWAP by Lazybear
strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)
length=input(13,"length")

calc_zvwap(pds, source1) =>
	mean = sum(volume*source1,pds)/sum(volume,pds)
	vwapsd = sqrt(sma(pow(source1-mean, 2), pds) )
	(close-mean)/vwapsd


upperTop=2.5  //input(2.5)
upperBottom=2.0  //input(2.0)
lowerTop=-0.5  //input(-0.5)
lowerBottom=-2.0 //input(-2.0)

buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3)
sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)

stopLoss =input(5, title="Stop Loss",minval=1) 

hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green)

ul1=plot(upperTop, "OB High")
ul2=plot(upperBottom, "OB Low")
fill(ul1,ul2, color=color.red)
ll1=plot(lowerTop, "OS High")
ll2=plot(lowerBottom, "OS Low")
fill(ll1,ll2, color=color.green)
zvwapVal=calc_zvwap(length,close)
plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2)


longEmaVal=ema(close,slowEma)
shortEmaVal=ema(close,fastEma)  

vwapVal=vwap(hlc3)


zvwapDipped=false

for i = 1 to 10
    zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine

longCondition=  shortEmaVal > longEmaVal  and zvwapDipped and  crossover(zvwapVal,0)

barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ZVWAPLE", long=true,  when= longCondition  and strategy.position_size<1) 


//Add
strategy.entry(id="ZVWAPLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ZVWAPLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss

strategy.close(id="ZVWAPLE",comment="TPExitAll",    qty=strategy.position_size ,   when= crossunder(zvwapVal,sellLine))   //close all      zvwapVal>sellLine

Más.