Estrategia de consolidación de la media móvil de impulso

El autor:¿ Qué pasa?, fecha: 2024-01-25 11:39:00
Las etiquetas:

img

Resumen general

Esta estrategia utiliza principalmente la consolidación formada por las líneas de promedio móvil HMA y EMA para determinar el momento de compra.

La estrategia también combina el indicador RSI para detectar condiciones de sobrecompra y sobreventa.

Principio de la estrategia

Esta estrategia utiliza un sistema de promedio móvil construido con EMA y HMA de 200 períodos. Entre ellos, el indicador HMA es un indicador de promedio móvil más sensible diseñado sobre la base de EMA. Cuando HMA cruza por encima de EMA, significa que la etapa de consolidación ha terminado y el precio de las acciones comienza a subir. En este momento, si el indicador RSI no muestra sobrecompra, se genera una señal de compra.

En el caso de una posición existente, si el precio de las acciones vuelve a caer y el HMA vuelve a cruzar por debajo de la EMA, lo que indica el comienzo de una nueva consolidación, toda la posición se cerrará.

La lógica de transacción de esta estrategia es bastante simple, basándose principalmente en los cruces largos y cortos de HMA y EMA, combinados con los máximos y mínimos del RSI, para formar una estrategia de negociación relativamente robusta.

Análisis de ventajas

La mayor ventaja de esta estrategia es que mediante la utilización del patrón de negociación de consolidación de EMA y HMA, la mayoría de las False Breaks se pueden filtrar, mejorando así la tasa de ganancia. Al mismo tiempo, el auxiliar del indicador RSI también puede controlar los riesgos de manera efectiva. La combinación de los dos hace que esta estrategia sea muy adecuada para mercados de consolidación y volatilidad.

Además, esta estrategia sólo utiliza 3 indicadores y la lógica es simple, lo que facilita la optimización de parámetros y backtest, lo que favorece la verificación y mejora de las estrategias.

Análisis de riesgos

Aunque esta estrategia tiene algunas ventajas, todavía hay algunos riesgos a tener en cuenta. Por ejemplo, el tiempo de retención puede ser relativamente largo, requiriendo fondos suficientes para apoyar. Si se encuentra con un período de consolidación lateral, no puede salir rápidamente con un stop loss, lo que fácilmente conduce a la situación de pérdidas en expansión.

Además, esta estrategia se basa principalmente en indicadores de promedio móvil. Si hay un avance anormal en los precios, las medidas de stop-loss pueden no poder tener efecto, lo que traerá mayores riesgos. Además, los ajustes de parámetros también afectarán el rendimiento de la estrategia y requerirán pruebas extensas para encontrar parámetros óptimos.

Direcciones de optimización

Teniendo en cuenta los riesgos anteriores, esta estrategia puede optimizarse en los siguientes aspectos:

  1. Combinar indicadores de volatilidad para ajustar dinámicamente las posiciones en función de la volatilidad del mercado.

  2. Aumentar los juicios de los indicadores de tendencia para evitar operaciones innecesarias de reversión.

  3. Optimizar los parámetros de la media móvil para acercarlos a las características actuales del mercado.

  4. Utilice paradas de tiempo para evitar pérdidas individuales de gran tamaño.

Resumen de las actividades

En general, se trata de una estrategia de consolidación y volatilidad relativamente clásica y simple. Se utiliza principalmente para el comercio a corto y mediano plazo de índices bursátiles y acciones calientes, y puede obtener valores alfa relativamente estables.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © mohanee

//@version=4
strategy(title="EMA_HMA_RSI_Strategy", overlay=true, pyramiding=2,     default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed, 

//longCondition = crossover(sma(close, 14), sma(close, 28))
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = crossunder(sma(close, 14), sma(close, 28))
//if (shortCondition)
  //  strategy.entry("My Short Entry Id", strategy.short)

//HMA
HMA(src1, length1) =>  wma(2 * wma(src1, length1/2) - wma(src1, length1), round(sqrt(length1)))

var stopLossVal=0.00

//variables BEGIN
length=input(200,title="EMA and HMA Length")   //square root of 13

rsiLength=input(13, title="RSI Length")

takePartialProfits = input(true, title="Take Partial Profits (if this selected, RSI 13 higher reading over 80 is considered for partial closing ) ")

stopLoss = input(title="Stop Loss%", defval=8, minval=1)
//variables  END

//RSI 
rsi13=rsi(close,rsiLength)


ema200=ema(close,length)
hma200=HMA(close,length)

//exitOnAroonOscCrossingDown = input(true, title="Exit when Aroon Osc cross down zero ")


// Drawings

//Aroon oscillator

arronUpper = 100 * (highestbars(high, length+1) + length)/length
aroonLower = 100 * (lowestbars(low, length+1) + length)/length

aroonOsc  = arronUpper - aroonLower

aroonMidpoint = 0
//oscPlot = plot(aroonOsc, color=color.green)
//midLine= plot(aroonMidpoint, color=color.green)
//topLine = plot(90,style=plot.style_circles, color=color.green)
//bottomLine = plot(-90,style=plot.style_circles, color=color.red)

//fill(oscPlot, midLine, color=aroonOsc>0?color.green:color.red, transp=50)
//fill(topLine,bottomLine, color=color.blue)
//fill(topLine,oscPlot, color=aroonOsc>90?color.purple:na, transp=25)


// RSI 
//plot(rsi13, title="RSI", linewidth=2, color=color.purple)
//hline(50, title="Middle Line", linestyle=hline.style_dotted)
//obLevel = hline(80, title="Overbought", linestyle=hline.style_dotted)
//osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
//fill(obLevel, osLevel, title="Background", color=rsi13 >=30 ? color.green:color.purple, transp=65)  // longTermRSI >=50

hullColor = hma200 > hma200[2] ? #00ff00 : #ff0000

plot(hma200, title="HULL 200", color=hullColor,  transp=25)
plot(ema200, title="EMA 200", color=color.orange)

//Entry--
strategy.initial_capital = 50000
strategy.entry(id="Long Entry", comment="LE", qty=(strategy.initial_capital * 0.10)/close, long=true,  when=strategy.position_size<1 and hma200 < ema200   and  hma200 > hma200[2]  and rsi13<70 )     //  // aroonOsc<0

//Add
if(strategy.position_size>=1 and  close < strategy.position_avg_price and  ( crossover(rsi13,30) or  crossover(rsi13,40) ) )   // hma200 < ema200   and  hma200 > hma200[2]   and hma200[2] < hma200[3] )  //and crossover(rsi13,30)  aroonOsc<0    //and hma200 > hma200[2]  and hma200[2] <= hma200[3]  //crossover(rsi13,30)
    qty1=(strategy.initial_capital * 0.10)/close
    //stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
    strategy.entry(id="Long Entry", comment="Add", qty=qty1, long=true )     //crossover(close,ema34)  //and close>ema34  //crossover(rsi5Val,rsiBuyLine)  --   SL="+tostring(stopLossVal, "####.##")


//stopLossVal:= abs(strategy.position_size)>1 ? strategy.position_avg_price*(1-0.5) : 0.00 

stopLossVal:= abs(strategy.position_size)>1 ?  ( (close > close[1] and close > open and close>strategy.position_avg_price) ? close[1]*(1-stopLoss*0.01) : stopLossVal ) : 0.00 
//stopLossVal:= abs(strategy.position_size)>1 ?  strategy.position_avg_price*(1-stopLoss*0.01) :  0.00

barcolor(color=strategy.position_size>=1? rsi13>80 ? color.purple: color.blue:na)

//close partial
if(takePartialProfits==true)
    strategy.close(id="Long Entry", comment="Partial X  points="+tostring(close - strategy.position_avg_price, "####.##"),  qty_percent=20 , when=abs(strategy.position_size)>=1 and crossunder(rsi13, 80)  and close > strategy.position_avg_price  )   //close<ema55 and rsi5Val<20 //ema34<ema55



//close All
//if(exitOnAroonOscCrossingDown)
  //  strategy.close(id="Long Entry", comment="Exit All points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and crossunder(aroonOsc, 0) )   //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

//close All on stop loss
strategy.close(id="Long Entry", comment="Stoploss X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close < stopLossVal  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89

strategy.close(id="Long Entry", comment="hmaXema X points="+tostring(close - strategy.position_avg_price, "####.##"),  when=abs(strategy.position_size)>=1 and close > strategy.position_avg_price  and  crossunder(hma200,ema200)  )  //close<ema55 and rsi5Val<20 //ema34<ema55  //close<ema89
    

Más.