Estrategia de precios por volumen relativo

El autor:¿ Qué pasa?, Fecha: 2023-12-28 17:54:44
Las etiquetas:

img

Resumen general

La estrategia de precios de volumen relativo es una estrategia de negociación cuantitativa basada en el volumen de negociación anormal y la volatilidad de los precios. Esta estrategia compara el volumen de negociación actual con el promedio histórico para determinar si el volumen de negociación es anormal. También combina el intervalo de rango verdadero promedio para determinar si el precio es relativamente estable. Cuando el volumen de negociación aumenta anormalmente y el precio es relativamente estable, se considera una señal de entrada.

Principio de la estrategia

La lógica central de la estrategia de precios de volumen relativo se basa en dos indicadores para el juicio: volumen de operaciones relativo y rango de fluctuación de precios.

Primero, se calcula el promedio móvil simple del volumen de operaciones durante los 20 períodos más recientes como el volumen de operaciones promedio histórico. Luego se establece un parámetro múltiple (como 1,5 veces). Cuando el volumen de operaciones actual es mayor de 1,5 veces el volumen de operaciones promedio, se considera que el volumen de operaciones es anormal y pertenece a una situación de volumen relativo.

En segundo lugar, se calcula el intervalo verdadero promedio (ATR) durante los 14 períodos más recientes como medida de la volatilidad de precios. Al mismo tiempo, se calcula la desviación estándar de la volatilidad promedio. Si la volatilidad verdadera actual está entre el promedio más o menos una desviación estándar, se considera que la fluctuación de precios está en un intervalo relativamente estable.

Cuando se cumplen las dos condiciones anteriores al mismo tiempo, se emite una señal larga para abrir una posición larga.

Análisis de ventajas

La mayor ventaja de la estrategia de precios de volumen relativo es que captura las tendencias de precios provocadas por un volumen de operaciones anormal. Cuando el volumen de operaciones aumenta, representa un cambio en la actitud de los participantes del mercado, lo que a menudo señala rupturas de precios y la formación de nuevas tendencias. Al comparar la relación entre el volumen de operaciones y los promedios históricos, la estrategia puede determinar eficazmente el momento del volumen de operaciones anormal.

Por otro lado, la estrategia también considera la tasa de volatilidad, de modo que las señales ocurren durante períodos de precios relativamente estables. Esto evita el enorme riesgo de pérdida causado por perseguir máximos durante violentas fluctuaciones. También aumenta las oportunidades de ganancia porque las tendencias generalmente comienzan a romper después de la relativa estabilidad.

Análisis de riesgos

El mayor riesgo de esta estrategia es que el indicador de volumen de negociación no puede estar 100% seguro de las nuevas tendencias.

Para reducir las pérdidas, ajustar adecuadamente los parámetros de volumen relativo y establecer criterios más estrictos para juzgar el volumen de operaciones anormal.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Añadir otros indicadores para el juicio, tales como el índice de cambio, la facturación, etc., para hacer más fiables las señales de volumen de negociación anormal.

  2. El parámetro ATR se puede optimizar para diferentes existencias para determinar con mayor precisión el rango de precios estable.

  3. Añadir algoritmos de aprendizaje automático para juzgar activamente el volumen de operaciones anormales, no sólo la simple comparación con los promedios históricos.

  4. Usar modelos de aprendizaje profundo para predecir la volatilidad de los precios, no sólo en base a ATR histórica.

Conclusión

La estrategia de precios de volumen relativo captura el volumen de operaciones anormal como una señal característica y combina el juicio de estabilidad de precios para emitir señales comerciales. La estrategia es simple y práctica, y funciona bien en el seguimiento del volumen de operaciones de acciones anormal.


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 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/
// © DojiEmoji (kevinhhl)

//@version=4
strategy("[KL] Relative Volume + ATR Strategy",overlay=true,pyramiding=1)
ENUM_LONG = "Long"

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
len_volat = input(14,title="Length of ATR to determine volatility")
ATR_volat = atr(len_volat)
avg_ATR_volat  = sma(ATR_volat, len_volat)
std_ATR_volat = stdev(ATR_volat, len_volat)
// }

// Trailing stop loss {
ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float)
TSL_source = low
var stop_loss_price = float(0)
TSL_line_color = color.green, TSL_transp = 100
if strategy.position_size == 0 or not within_timeframe
    TSL_line_color := color.black
    stop_loss_price := TSL_source - ATR_X2_TSL 
else if strategy.position_size > 0
    stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL)
    TSL_transp := 0
plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp))
// }

// Signals for entry {
_avg_vol = sma(volume,input(20, title="SMA(volume) length (for relative comparison)"))
_relative_vol = _avg_vol * input(1.5,title="Multiple of avg vol to consider relative volume as being high",type=input.float)
__lowerOfOpenClose = min(open,close)
_wickRatio_lower = (__lowerOfOpenClose - low) / (high - low)
entry_signal1 = volume > _relative_vol
entry_signal2 = ATR_volat < avg_ATR_volat + std_ATR_volat and ATR_volat > avg_ATR_volat - std_ATR_volat
// }


alert_per_bar(msg)=>
    prefix = "[" + syminfo.root + "] "
    suffix = "(P=" + tostring(close) + "; atr=" + tostring(ATR_volat) + ")"
    alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar)

// MAIN:
if within_timeframe
    if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005
        alert_per_bar("TSL raised to " + tostring(stop_loss_price))

    // EXIT ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::    // placed before entry, will re-enter if stopped out
	exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit"
	if strategy.position_size > 0 and TSL_source <= stop_loss_price
        strategy.close(ENUM_LONG, comment=exit_msg)

    // ENTRY :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	if entry_signal1 and entry_signal2// and entry_signal3
		entry_msg = strategy.position_size > 0 ? "adding" : "initial"
		strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)

// CLEAN UP:
if strategy.position_size == 0
	stop_loss_price := float(0)


Más.