Estrategia de seguimiento de medias móviles de ruptura oscilante


Fecha de creación: 2023-10-30 11:39:31 Última modificación: 2023-10-30 11:39:31
Copiar: 1 Número de Visitas: 629
1
Seguir
1617
Seguidores

Estrategia de seguimiento de medias móviles de ruptura oscilante

Esta estrategia permite obtener ganancias sostenidas en mercados convulsivos mediante el seguimiento de brechas en la línea de equilibrio.

Principio de estrategia

La estrategia se basa principalmente en el principio de ruptura de la línea media para la construcción de posiciones, y utiliza MA para agrupar múltiples líneas medias para formar la línea media principal. Se genera una señal de negociación cuando el precio rompe la línea media principal.

En concreto, la estrategia utiliza una media móvil doble WMA de 60 ciclos como la media principal. Al mismo tiempo, se calcula el rango de fluctuación real de los precios y se traza un canal ascendente y descendente.

Sobre la base de la ruptura, la estrategia también introduce el indicador RSI y el indicador EMA para el juicio auxiliar, que requiere que se haga más cuando el RSI> 50 y el precio está por encima de la EMA, y que se haga un vacío cuando el RSI < 50 y el precio está por debajo de la EMA, para evitar falsas rupturas.

Además, la estrategia utiliza la fortaleza y la debilidad de la triple línea media para determinar el cierre de la posición. Cuando las formaciones de la triple línea media son débiles, se elige el punto de salida como el canal de ruptura inversa.

Ventajas estratégicas

  • El uso de MA como línea media múltiple permite suavizar los cambios de precio e identificar la dirección de la tendencia
  • Los negocios basados en la ruptura del canal pueden obtener ganancias en situaciones de crisis
  • En combinación con el RSI y la EMA para el juicio auxiliar, se puede filtrar falsas señales de ruptura
  • Utiliza el estado de la triple línea media para determinar el punto de salida apropiado y evitar la situación de decadencia.

Riesgo estratégico

  • En caso de una gran oscilación, la MA puede producir más brechas falsas.
  • El tiempo de salida del juicio de la Triple Equilibrio puede no ser exacto
  • La configuración incorrecta de los parámetros del RSI puede causar una frecuencia de negociación excesiva

Se puede reducir el riesgo mediante la optimización de los parámetros del ciclo MA, la adaptación de la configuración de la triple media y el uso cuidadoso de los parámetros del RSI.

Dirección de optimización de la estrategia

  • Optimización de los parámetros del ciclo MA para encontrar el ciclo de la línea media principal más adecuado
  • Prueba con diferentes indicadores auxiliares para reemplazar el RSI, como KDJ, MACD, etc.
  • Ajuste el parámetro de la línea media triple para buscar un tiempo de inversión más preciso
  • Añadir estrategias de stop loss para controlar el riesgo de una sola operación

Resumir

Esta estrategia en general es una estrategia de ruptura muy adecuada para situaciones de agitación. La idea central es la construcción de posiciones de ruptura basadas en MA, complementadas con filtros de indicadores de tendencia, para obtener ganancias continuas en situaciones de agitación.

Código Fuente de la Estrategia
/*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')