Esta estrategia diseña un sistema de negociación con función de seguimiento de tendencias basado en el rango verdadero promedio (ATR) y el índice de fuerza relativa (RSI). Puede identificar automáticamente la dirección de la tendencia y tiene características de stop loss y take profit.
Calcule ATR y RSI. ATR refleja la volatilidad promedio de los precios durante un período. RSI refleja la comparación de poder entre los toros y los osos.
Cuando el ATR es superior a su media móvil, se considera un período de alta volatilidad adecuado para la negociación.
Cuando el RSI está por encima de la línea de sobrecompra, ir largo.
Después de largo, utilizar el punto más alto multiplicado por una relación fija como precio de stop-loss.
Tome el beneficio por la proporción de ganancias.
Las órdenes de stop loss pueden maximizar las órdenes de stop loss para reducir pérdidas.
El RSI puede juzgar eficazmente el poder de los alcistas y los bajistas para evitar la apertura repetida de posiciones en mercados de rango.
Como indicador de volatilidad, el ATR puede filtrar los mercados limitados al rango y solo operar en mercados de tendencia.
Tome ganancias por la relación de ganancias puede bloquear en algunas ganancias.
Tanto el ATR como el RSI son indicadores con retraso, lo que puede conducir a un tiempo de entrada tardío.
La relación de pérdidas y ganancias fijas para el stop loss y el take profit es propensa a una optimización excesiva, por lo que debe establecerse con prudencia en función de los resultados de las pruebas de retroceso.
En los grandes mercados de rango de ciclo, el ATR puede ser mayor que el promedio móvil durante un largo tiempo, lo que conduce a una sobrenegociación.
Optimizar los parámetros de ATR y RSI para hacer que el sistema sea más sensible.
Añadir MA y otros indicadores para determinar la dirección de la tendencia, evitar entrar erróneamente en los mercados de rango.
Pruebe el stop loss dinámico y tome los ratios de ganancia, en lugar de los ajustes fijos.
Considere la posibilidad de añadir medidas de control del tamaño de las operaciones.
Esta estrategia integra las ventajas de los indicadores ATR y RSI y diseña una tendencia simple y práctica siguiendo el sistema de negociación. Mejora aún más la estabilidad del sistema mediante la optimización de parámetros y la adición de filtros. En general, esta estrategia tiene un fuerte valor práctico para el comercio en vivo.
/*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)