Tendencia basada en el volumen siguiendo la estrategia de negociación

El autor:¿ Qué pasa?, Fecha: 2024-01-29 15:04:18
Las etiquetas:

img

Resumen general

Es una estrategia comercial basada en un indicador de oscilador de volumen modificado. Utiliza promedios móviles de volumen para identificar señales de volumen crecientes y determina entradas o salidas. Mientras tanto, incorpora el juicio de tendencia de precios para evitar señales incorrectas durante las oscilaciones de precios.

Estrategia lógica

  1. Calcular el volumen promedio móvil vol_sum con longitud de vol_length y suavizarlo por el período promedio móvil vol_smooth.
  2. Generar señales largas cuando el volumen supera el umbral y señales cortas cuando el volumen cae por debajo del umbral.
  3. Para filtrar las señales falsas, sólo se tarda mucho tiempo cuando la tendencia del precio verificada en las barras de dirección pasadas es hacia arriba y viceversa.
  4. Establecer dos valores de umbral umbral y umbral2. umbral genera señales comerciales mientras que el umbral2 actúa como un stop loss.
  5. Gestionar órdenes de apertura/cierre a través de una lógica de máquina de estado.

Análisis de ventajas

  1. El indicador de volumen captura los cambios en el poder de compra/venta del mercado para señales más precisas.
  2. La combinación con la tendencia de precios evita señales erróneas durante los cambios de precios.
  3. Dos valores umbral para controlar mejor los riesgos.

Análisis de riesgos

  1. El indicador de volumen tiene retraso y puede perder puntos de inflexión de precios.
  2. La configuración incorrecta de parámetros conduce a un exceso de negociación o retrasos en la señal.
  3. El stop loss puede producirse durante los picos en los volúmenes de negociación.

Los riesgos pueden mitigarse ajustando los parámetros, optimizando el cálculo de los indicadores y combinando otras confirmaciones.

Direcciones de optimización

  1. Optimización adaptativa de los parámetros en función de las condiciones del mercado.
  2. Incorporar otros indicadores como el índice de volatilidad para verificar aún más las señales.
  3. Investigación aplicando modelos de aprendizaje automático para mejorar la precisión de la señal.

Conclusión

Esta estrategia utiliza un oscilador de volumen mejorado con tendencia de precios para determinar entradas y salidas con dos valores de umbral de pérdida de parada. Es un sistema de seguimiento de tendencia estable con espacio de optimización en la afinación de parámetros, filtración de señales y estrategias de pérdida de parada. En general, tiene un valor práctico que merece más investigación y optimización.


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

//@version=4
strategy('Volume Advanced', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end    = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

source = close 
vol_length  = input(34, title = "Volume - Length")
vol_smooth  = input(200,title = "Volume - Smoothing")
volriselen  = input(21,  title = "Volume - Risinglength")
volfalllen  = input(13, title = "Volume - Fallinglength")
threshold   = input(1,"threshold")
threshold2  = input(1.2,step=0.1, title="Threshold 2")
direction = input(13,"amount of bars")


volsum  = sum(volume, vol_length) / (sum(volume, vol_smooth) / (vol_smooth / vol_length))


LongEntry  = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close > close[direction]
ShortEntry = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close < close[direction]
LongExit1  = falling (volsum,volfalllen)
ShortExit1 = falling (volsum,volfalllen)
LongExit2= (crossover(volsum, threshold2) and close < close[direction])


_state = 0
_prev = nz(_state[1])
_state := _prev

if _prev == 0
    if LongEntry
        _state := 1
        _state
    if ShortEntry
        _state := 2
        _state
if _prev == 1
    if ShortEntry or LongExit1
        _state := 0
        _state
if _prev == 2
    if LongEntry or ShortExit1
        _state := 0
        _state

_bLongEntry = _state == 1 
_bLongClose = _state == 0 

long_condition = _bLongEntry and close > close[direction]
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  _bLongClose or LongExit2
strategy.close('BUY', when=short_condition)

plot(volsum,      color = color.green,    title="Vol_Sum")
plot(threshold, color = color.fuchsia, transp=50, title="Threshold")
plot(threshold2, color=color.white, transp = 50, title="Threshold 2")

Más.