Esta estrategia se basa en el promedio de la amplitud de fluctuación real (ATR) y el índice de fuerza relativa (RSI) para diseñar un sistema de negociación con una función de seguimiento de tendencias. El sistema puede identificar automáticamente la dirección de la tendencia y tiene funciones de stop loss y stop loss.
Calcular el ATR y el RSI. El ATR refleja la fluctuación promedio de los precios en el período más reciente. El RSI refleja la relación de fuerzas entre las dos partes.
Cuando el ATR es mayor que su media móvil, se considera que está en un período de alta volatilidad y es adecuado para el comercio.
Cuando el RSI está por encima de la línea de sobreventa, se hace más; cuando el RSI está por debajo de la zona de sobreventa, se hace menos.
Después de hacer un alza, multiplica la proporción fija por el punto más alto para seguir el punto de parada. Después de hacer una baja, multiplica la proporción fija por el punto más bajo para seguir el punto de parada.
El porcentaje de ganancias se detuvo.
El seguimiento del stop loss puede minimizar el stop loss y reducir las pérdidas
El RSI puede ser un buen indicador de la fuerza de la volatilidad y evitar abrir posiciones repetidas en situaciones de crisis.
El ATR es un indicador de volatilidad, que permite filtrar el movimiento de la oscilación y solo negociar en el movimiento de la tendencia.
El bloqueo del porcentaje de ganancias puede bloquear parte de las ganancias.
El ATR y el RSI son indicadores de retraso, lo que puede llevar a un retraso en el punto de entrada. Se pueden optimizar los parámetros adecuadamente para que el sistema sea más sensible.
El límite de pérdidas fijas frente al límite de pérdidas se puede optimizar excesivamente y debe ajustarse con cautela en combinación con los resultados de la retroalimentación.
En un escenario de gran oscilación periódica, el ATR puede ser mayor que la media móvil durante mucho tiempo, lo que lleva a una sobrecambio. Se pueden agregar otras condiciones de filtración.
Optimizar los parámetros de ATR y RSI para que el sistema sea más sensible.
Aumentar la MA para determinar la dirección de la tendencia y evitar el error de la oscilación.
Prueba con la proporción de stop loss dinámica, en lugar de la fijación fija.
Considere la posibilidad de incluir medidas de control de volumen de transacciones.
Esta estrategia integra las ventajas de los dos indicadores ATR y RSI, diseñando un sistema de comercio de seguimiento de tendencias sencillo y práctico. La estabilidad del sistema se puede mejorar aún más mediante la optimización de los parámetros y el aumento de las condiciones de filtrado. En general, la estrategia tiene un fuerte valor de aplicación en el mercado.
/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// © liwei666
//@version=5
// # ========================================================================= #
// # | Strategy |
// # ========================================================================= #
strategy(
title = "ATR_RSI_Strategy v2[liwei666]",
shorttitle = "ATR_RSI_Strategy",
overlay = true,
max_lines_count = 500,
max_labels_count = 500,
max_boxes_count = 500,
max_bars_back = 5000,
initial_capital = 10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=50, commission_type=strategy.commission.percent, pyramiding=1,
commission_value=0.05
)
// # ========================================================================= #
// # | Strategy |
// # ========================================================================= #
atr_length = input.int(26, "atr_length", minval = 6, maxval = 100, step=1)
atr_ma_length = input.int(45, "atr_ma_length", minval = 6, maxval = 100, step=1)
rsi_length = input.int(15, "rsi_length", minval = 6, maxval = 100, step=1)
rsi_entry = input.int(10, "rsi_entry", minval = 6, maxval = 100, step=1)
atr_ma_norm_min = input.float(0.3, "atr_ma_norm_min", minval = 0.1, maxval = 0.5, step=0.1)
atr_ma_norm_max = input.float(0.7, "atr_ma_norm_max", minval = 0.5, maxval = 1, step=0.1)
trailing_percent= input.float(1.5, "trailing_percent", minval = 0.1, maxval = 2, step=0.1)
var rsi_buy = 50 + rsi_entry
var rsi_sell = 50 - rsi_entry
sma_norm_h_45() =>
source = high
n = 45
sma = ta.sma(source, n)
sma_norm = (sma - ta.lowest(sma, n)) / (ta.highest(sma,n) - ta.lowest(sma, n))
sma_norm
atr_value = ta.atr(atr_length)
atr_ma = ta.sma(atr_value, atr_ma_length)
rsi_value = ta.rsi(close, length = rsi_length)
atr_ma_norm = atr_ma / close * 100
sma_norm = sma_norm_h_45()
var intra_trade_high = 0.0
var intra_trade_low = 0.0
if strategy.position_size == 0
intra_trade_high := high
intra_trade_low := low
if atr_ma_norm >= atr_ma_norm_min and atr_ma_norm <= atr_ma_norm_max
if atr_value > atr_ma
if rsi_value > rsi_buy
strategy.entry("B1", strategy.long, limit = close + 5 )
else if rsi_value < rsi_sell
strategy.entry("S1", strategy.short, limit = close - 5 )
else if strategy.position_size > 0
intra_trade_high := math.max(intra_trade_high, high)
intra_trade_low := low
long_tp = intra_trade_high * (1 - trailing_percent / 100)
strategy.exit("Exit B1", from_entry="B1", stop = long_tp, limit = strategy.position_avg_price * 1.03)
else if strategy.position_size < 0
intra_trade_high := high
intra_trade_low := math.min(intra_trade_low, low)
short_tp = intra_trade_low * (1 + trailing_percent / 100)
strategy.exit("Exit S1", from_entry="S1", stop = short_tp, limit = strategy.position_avg_price * 0.94)