
La estrategia de precios relativos es una estrategia de comercio cuantitativa basada en la anomalía del volumen de transacciones y la volatilidad de los precios. La estrategia determina si el volumen de transacciones es anormal comparando la relación entre el volumen de transacciones actual y el volumen de transacciones promedio histórico; al mismo tiempo, en combinación con el rango de amplitud de onda real promedio, determina si los precios se encuentran en un rango relativamente estable.
La lógica central de la estrategia de precios relativos se basa en dos indicadores, uno es el volumen relativo de transacciones y el otro es el rango de fluctuación de los precios.
En primer lugar, calculamos el promedio móvil simple del volumen de transacciones de los últimos 20 ciclos como el promedio histórico de las transacciones. Luego, se establece un parámetro multiplicador (por ejemplo, 1.5 veces), y cuando el volumen de transacciones actuales es 1.5 veces mayor que el volumen de transacciones promedio, consideramos que el volumen de transacciones es anormal y pertenece a la situación de un aumento en el volumen relativo de las transacciones.
En segundo lugar, calculamos la amplitud real media (ATR) de los últimos 14 ciclos como una medida de la volatilidad de los precios. Al mismo tiempo, calculamos la diferencia estándar de la amplitud media. Si la amplitud real actual está entre la media y una diferencia estándar positiva, consideramos que la volatilidad de los precios está en un rango relativamente estable.
Cuando las dos condiciones anteriores se cumplen al mismo tiempo, es decir, se emite una señal para hacer más, abrir una posición para hacer más. Durante el proceso de mantenimiento de la posición, se reduce el ATR al máximo mínimo a dos veces el ATR como punto de parada, se reduce el ATR al máximo a dos veces el ATR como punto de parada.
La mayor ventaja de las estrategias de precios relativos reside en capturar la tendencia de los precios generada por el volumen de transacciones anormales. Cuando el volumen de transacciones aumenta, representa un cambio en la actitud de los participantes en el mercado, lo que a menudo indica una ruptura en los precios y la formación de nuevas tendencias. La estrategia puede determinar eficazmente el momento en que el volumen de transacciones es anormal al comparar la relación entre el volumen de transacciones y el promedio histórico.
Por otro lado, la estrategia también tiene en cuenta la volatilidad de los precios, lo que hace que las señales ocurran en momentos de relativa estabilidad de los precios. Esto evita el gran riesgo de pérdidas que se producen al seguir al alza en momentos de gran volatilidad. Al mismo tiempo, aumenta la oportunidad de obtener ganancias, ya que la tendencia generalmente comienza a romperse después de la relativa estabilidad.
El mayor riesgo de esta estrategia es que los indicadores de volumen de operaciones no pueden determinar el 100% de las nuevas tendencias, la explosión de volumen de operaciones puede ser una falsa ruptura y los precios se revierten rápidamente. En este caso, la estrategia de vRFS sufre grandes pérdidas.
Para reducir las pérdidas, se pueden ajustar adecuadamente los parámetros de la cantidad relativa de oro, establecer criterios más estrictos para juzgar las anomalías en el volumen de transacciones. O se pueden agregar otros indicadores de juicio, como el aumento del análisis del volumen de transacciones, para determinar si el crecimiento del volumen de transacciones coincide con el monto de transacciones.
La estrategia puede ser optimizada en los siguientes aspectos:
La adición de otros indicadores, tales como fluctuaciones, volúmenes de transacciones, etc., hace que las señales de volumen de transacciones anormales sean más confiables.
Los parámetros ATR se pueden optimizar para diferentes acciones y determinar con mayor precisión el rango de estabilidad de precios.
El uso de algoritmos de aprendizaje automático para juzgar positivamente las anomalías en el volumen de transacciones, en lugar de una simple comparación con las medias históricas.
El uso de modelos de aprendizaje profundo para determinar las predicciones de fluctuaciones de precios, no solo basado en el ATR histórico.
La estrategia de precio relativo emite una señal de negociación mediante la captura de la anomalía del volumen de transacciones como una señal característica, combinada con el juicio de la estabilidad de precios. La estrategia es simple y práctica, y es más efectiva para rastrear el volumen de transacciones anormales de las acciones. Pero también existe un cierto riesgo de falsas señales, y se necesita optimizar aún más los indicadores para mejorar la eficacia del juicio.
/*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)