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.
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.
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.
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.
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.
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.
La estrategia tiene configuraciones de stop loss y take profit incorporadas.
En mercados complejos, las líneas EMA y ALMA pueden emitir señales erróneas.
Si los parámetros se establecen incorrectamente, las líneas EMA y ALMA no pueden funcionar correctamente, lo que aumentará los riesgos comerciales.
Prueba y optimiza los parámetros de EMA y ALMA para seleccionar los parámetros óptimos.
Incorpore otros indicadores para filtrar las señales y evitar las pérdidas causadas por señales incorrectas, como MACD, KDJ, etc.
Optimizar la magnitud de la pérdida de parada para encontrar un equilibrio entre el control del riesgo y la rentabilidad.
Prueba diferentes variedades y parámetros de ciclo para aplicar la estrategia a más mercados.
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)