Esta estrategia garantiza una rentabilidad continua en mercados volátiles mediante el seguimiento de los avances de la línea media móvil.
La lógica central de esta estrategia es abrir posiciones basadas en los avances de la línea de promedio móvil. Utiliza MA para agregar múltiples promedios móviles para formar la línea de promedio móvil principal.
Específicamente, la estrategia adopta una media móvil doble WMA de 60 períodos como la línea media móvil principal. Al mismo tiempo, calcula el rango verdadero del precio y dibuja bandas superiores e inferiores.
Además de las señales de avance, la estrategia también incorpora RSI y EMA como indicadores auxiliares. Requiere RSI> 50 y precio por encima de EMA para ir largo, y RSI<50 y precio por debajo de EMA para ir corto, para evitar falsas rupturas.
Además, la estrategia utiliza formaciones de media móvil triple para determinar los puntos de salida.
Estos riesgos pueden reducirse optimizando los períodos de MA, ajustando los ajustes de triple MA, utilizando el RSI con precaución, etc.
En resumen, esta es una excelente estrategia de ruptura para los mercados de rango. La idea central es abrir posiciones basadas en rupturas de MA, filtradas por indicadores de tendencia, y obtener ganancias constantes en mercados que no están en tendencia. Las salidas se determinan antes utilizando formaciones de triple MA. Hay un amplio margen para optimizar los parámetros, mejorar la lógica de entrada / salida, etc. para maximizar el rendimiento en los mercados de rango.
/*backtest start: 2022-10-23 00:00:00 end: 2023-03-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //exapple bot strategy('RIPO BOT', shorttitle='RIPO BOT', overlay=true, process_orders_on_close=true, calc_on_order_fills=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) sl_inp = input(0.1, title='Stop Loss %') / 100 tp_inp = input(0.33, title='Take Profit %') / 100 length = input(defval=21) upper = ta.highest(length) lower = ta.lowest(length) lengthChop = input.int(14, minval=1) ci = 100 * math.log10(math.sum(ta.atr(1), lengthChop) / (ta.highest(lengthChop) - ta.lowest(lengthChop))) / math.log10(lengthChop) offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) hline(50, "Middle Band", color=color.new(#787B86, 50)) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") rsi = ta.rsi(close, 14) var float entry_price = na output = 100 * (close - upper) / (upper - lower) ema = ta.ema(output, input(defval=13, title='EMA')) ma(src, len) => ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) BBMC = ma(close, 60) rangema = ta.ema(ta.tr, 60) upperk = BBMC + rangema * 0.2 lowerk = BBMC - rangema * 0.2 color_bar = close > upperk ? color.blue : close < lowerk ? color.fuchsia : color.gray ExitHigh = ma(high, 15) ExitLow = ma(low, 15) Hlv3 = int(na) Hlv3 := close > ExitHigh ? 1 : close < ExitLow ? -1 : Hlv3[1] sslExit = Hlv3 < 0 ? ExitHigh : ExitLow base_cross_Long = ta.crossover(close, sslExit) base_cross_Short = ta.crossover(sslExit, close) codiff = base_cross_Long ? 1 : base_cross_Short ? -1 : na entry_long = false entry_short = false if ta.crossover(close, BBMC) and output > ema entry_long := true if ta.crossunder(close, BBMC) and output < ema entry_short := true if entry_long and strategy.position_size == 0 entry_price := close strategy.entry('enter long', strategy.long, comment='ENTER-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') if strategy.position_size > 0 strategy.exit('Stop Loss/TP long', 'enter long', limit=entry_price * (1 + tp_inp), stop = color_bar == color.fuchsia ? BBMC : na, comment='EXIT-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0)) //if entry_short and strategy.position_size == 0 //entry_price := close //strategy.entry('enter short', strategy.short, comment='ENTER-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') if strategy.position_size < 0 strategy.exit('Stop Loss/TP short', 'enter short', limit=entry_price * (1 - tp_inp), stop = color_bar == color.blue ? BBMC : na, comment='EXIT-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0)) // plot(entry_price * (1 - sl_inp), color=color.new(color.red, 0)) plot(rsi, color=color.yellow) plot(output, title='%R', color=color.new(color.yellow, 0), linewidth=2) plot(ema, title='EMA', color=color.new(color.aqua, 0), linewidth=2) plotarrow(codiff, colorup=color.new(color.blue, 35), colordown=color.new(color.fuchsia, 35), title='Exit Arrows', maxheight=20, offset=0) plot(BBMC, color=color_bar, linewidth=4, title='MA Trendline')