Impulso Línea media móvil suave y estrategia de cruce de la línea media móvil

El autor:¿ Qué pasa?, Fecha: 2023-11-27 17:35:09
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el cruce de la línea de promedio móvil suave de impulso (ALMA) y dos líneas de promedio móvil exponencial (EMA) con diferentes configuraciones de parámetros para generar señales comerciales.

Principio de la estrategia

Línea de impulso ALMA

La estrategia utiliza ALMA como el indicador principal para juzgar la tendencia de los precios. ALMA tiene la función de suavizar los datos de precios y puede filtrar las fluctuaciones aleatorias de los precios. Al ajustar el período, el valor de compensación y los parámetros sigma de ALMA, se puede hacer más sensible o estable. Cuando los precios aumentan, ALMA mostrará verde, y cuando los precios caen, ALMA mostrará rojo.

Cruce de la EMA rápida y lenta

La estrategia utiliza dos líneas EMA con diferentes longitudes. Cuando la línea EMA rápida cruza por encima de la línea EMA lenta, se genera una señal de compra. Cuando la línea EMA rápida cruza por debajo de la EMA lenta, se genera una señal de venta. El cruce EMA tiene una buena capacidad de juicio de tendencia. Los períodos de las EMA rápidas y lentas se pueden ajustar a través de parámetros para adaptarse a diferentes variedades y ciclos de negociación.

RSI estocástico

El papel del indicador de RSI estocástico es evitar la emisión de señales comerciales en áreas sobrecompradas y sobrevendidas. Combina las ventajas de los indicadores RSI y estocásticos, y puede determinar mejor las áreas de pico y mínimo.

Análisis de ventajas

Comercio de acuerdo con las tendencias

La estrategia utiliza plenamente el cruce de la EMA para determinar la dirección de la tendencia de los precios, combinado con el indicador ALMA para localizar las principales oportunidades largas y cortas para implementar el comercio de tendencias.

Parámetros ajustables

Los periodos de los parámetros EMA y ALMA proporcionan un espacio ajustable. Los usuarios pueden optimizar los parámetros de acuerdo con sus necesidades para que la estrategia se adapte mejor a diferentes entornos de mercado.

Mecanismo de detención de pérdidas y obtención de beneficios

La estrategia tiene configuraciones de stop loss y take profit incorporadas.

Análisis de riesgos

Un juicio erróneo sobre la tendencia

En mercados complejos, las líneas EMA y ALMA pueden emitir señales erróneas.

Configuración incorrecta de los parámetros

Si los parámetros se establecen incorrectamente, las líneas EMA y ALMA no pueden funcionar correctamente, lo que aumentará los riesgos comerciales.

Optimización de la estrategia

  1. Prueba y optimiza los parámetros de EMA y ALMA para seleccionar los parámetros óptimos.

  2. Incorpore otros indicadores para filtrar las señales y evitar las pérdidas causadas por señales incorrectas, como MACD, KDJ, etc.

  3. Optimizar la magnitud de la pérdida de parada para encontrar un equilibrio entre el control del riesgo y la rentabilidad.

  4. Prueba diferentes variedades y parámetros de ciclo para aplicar la estrategia a más mercados.

Resumen de las actividades

En general, esta es una estrategia de seguimiento de tendencias simple y práctica. Utiliza el cruce EMA para determinar la dirección de la tendencia, el indicador ALMA para localizar puntos adicionales, el RSI estocástico para evitar los riesgos de sobrecompra y sobreventa, mientras establece stop loss y take profit para controlar los riesgos. A través del ajuste de parámetros y la optimización del indicador, esta estrategia puede lograr buenos resultados. Es fácil de entender y usar, y también tiene una cierta adaptabilidad.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

////Arranged by @ClassicScott
//Strategy Created by @CheatCode1


strategy('ALMA/EMA Strategy', shorttitle='ALMA/EMA Strategy', overlay=true )



////Source Selection & ALMA Variables

//Dominant Momentum ALMA
dsource = input.source(close, title='Source', group='Dominant ALMA')
dperiod = input.int(title='Period', defval=130, group='Dominant ALMA')
doffset = input.float(title='Offset', step=0.025, defval=0.775, group='Dominant ALMA')
dsigma = input.float(title='Sigma', step=0.5, defval=4.5, group='Dominant ALMA')

dalma = ta.alma(dsource, dperiod, doffset, dsigma)

dalma_up_color = input.color(#66bb6a, 'Going Up!', group='Dominant ALMA', inline = '1')
dalma_down_color = input.color(#ef5350, 'Going Down :(', group='Dominant ALMA', inline = '1')
dcolor = close[1] > dalma ? dalma_up_color : dalma_down_color

////ALMA Plots
plot(dalma, color=dcolor, style=plot.style_stepline, linewidth=2, title='Dominant Momentum MA')



//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

//Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1 //Strategy by @CheatCode1

cheatcode = input.bool(true, '-----------CHEATC0DE1------------', group = 'Strategy Inputs', confirm = true)

//Variable Declerations/Plot Assingments

inp1 = input.int(49, 'Slow Ema Length', 1, 100, group = 'Strategy Inputs', confirm = true)
inp2 = input.int(9, 'Fast Ema Length', 1, 200, group = 'Strategy Inputs', confirm = true)
inp3 = int(200)
sma1 = ta.sma(close, inp3)
ema1 = ta.ema(close, inp1)
ema2 = ta.ema(close, inp2)

eplot1 = plot(ema1, 'Slow Ema', color.aqua, 1,  plot.style_linebr)
eplot2 = plot(ema2, 'Fast Ema', color.yellow, 1,  plot.style_linebr)
splot1 = plot(sma1, 'Long MA', close[1] < sma1 ? color.red:color.green, 1, plot.style_line, display = display.none)

cross1 = ta.crossover(ema1, ema2)
cross2 = ta.crossunder(ema1, ema2)

plotchar(cross1, '', '↑', location.belowbar,  close[1] > dalma and dalma > sma1 ? na:color.green, size = size.normal, editable = false)
plotchar(cross2, '', '↓', location.abovebar, close[1] < dalma and dalma < sma1 ? na:color.red, size = size.normal, editable = false)
bgcolor(cross1 and close[1] > dalma ? color.new(color.green, 80):cross2 and close[1] < dalma ? color.new(color.red, 80):na)

valueL = ta.valuewhen(cross1 and close[1] > dalma, close, 0)
valueS = ta.valuewhen(cross2 and close[1] < dalma, close, 0)

//Entries

if cross1 and close[2] > dalma[2] and close[1] > dalma[1]
    strategy.entry('Long', strategy.long)
if cross2 and close[2] < dalma[2] and close[1] < dalma[1]
    strategy.entry('Short', strategy.short)
    
//StochRsi
    
smoothK = input.int(3, "K", minval=1)
smoothD = input.int(15, "D", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(8, "Stochastic Length", minval=1)
src = input(close, title="RSI Source")
rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

//Cancellations

if k > 75
    strategy.cancel('Long')
if k < 25
    strategy.cancel('Short')
    
//Closures

if ta.crossunder(k, d) and k > 92
    strategy.close('Long')
if ta.crossover(k,d) and k < 8
    strategy.close('Short')

//Exit Percents

takeP = input.float(3, title='Take Profit', group = 'Take Profit and Stop Loss') / 100
stopL = input.float(5.49, title = 'Stop Loss', group = 'Take Profit and Stop Loss')/100
// Pre Directionality

Stop_L = strategy.position_avg_price * (1 - stopL)

Stop_S = strategy.position_avg_price * (1 + stopL)

Take_S= strategy.position_avg_price * (1 - takeP)

Take_L = strategy.position_avg_price * (1 + takeP)
     
     
//Post Excecution
if strategy.position_size > 0
    strategy.exit("Flat", limit=Take_L, stop = Stop_L)

if strategy.position_size < 0
    strategy.exit("Flat", limit=Take_S, stop = Stop_S)


Más.