Estrategia de cruce de medias móviles y medias móviles suavizadas por impulso


Fecha de creación: 2023-11-27 17:35:09 Última modificación: 2023-11-27 17:35:09
Copiar: 0 Número de Visitas: 673
1
Seguir
1617
Seguidores

Estrategia de cruce de medias móviles y medias móviles suavizadas por impulso

Descripción general

La estrategia utiliza el movimiento de las medias de movimiento de la dinámica (ALMA) y el cruce de dos diferentes parámetros de la medias de movimiento del índice (EMA) para generar una señal de comercio. La estrategia también combina el movimiento de las medias de movimiento de los índices aleatorios (RSI estocástico) para evitar la compra y venta excesiva.

Principio de estrategia

Línea de potencia ALMA

La estrategia utiliza ALMA como el indicador principal para determinar 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.

Las líneas de la EMA se cruzan.

La estrategia utiliza dos líneas de EMA de diferentes longitudes. Cuando la línea de EMA rápida sube por encima de la línea de EMA lenta, genera una señal de compra; cuando la línea de EMA rápida baja por encima de la línea de EMA lenta, genera una señal de venta.

Stochastic RSI

La función del indicador RSI estocástico es evitar la emisión de señales de negociación en las zonas de sobreventa y sobreventa. Combina las ventajas de los dos indicadores RSI y estocástico, para determinar mejor las zonas de pico y valle. Cuando el indicador RSI estocástico está sobreventa o sobreventa, la estrategia cancela los pedidos originales de más o vacío.

Análisis de las ventajas estratégicas

Operación de flujo, captura de tendencias

La estrategia aprovecha las ventajas de los EMA para determinar la dirección de la tendencia de los precios, en combinación con el indicador ALMA para identificar las principales oportunidades de ventajas y desventajas, para lograr una negociación positiva.

Parámetros ajustables y adaptables

Los ciclos EMA, los parámetros ALMA, etc. ofrecen un espacio ajustable, donde el usuario puede optimizar los parámetros según sus propias necesidades, para que las estrategias se adapten mejor a los diferentes entornos del mercado.

El mecanismo de suspensión de pérdidas

La estrategia tiene un parón de pérdidas incorporado. La adopción de un parón flotante reduce la probabilidad de que el parón sea perseguido; La configuración de ganancias puede bloquear las ganancias y evitar que las ganancias se vayan.

Análisis de riesgos

El error de juicio de las tendencias

En situaciones complejas, las líneas EMA y ALMA pueden emitir señales erróneas. En este caso, se debe confiar en el stop loss para controlar las pérdidas.

Parámetros incorrectos

Si los parámetros están mal configurados, las líneas EMA y ALMA no funcionan correctamente, lo que aumenta el riesgo de negociación. Se necesita prueba y optimización para seleccionar la combinación de parámetros óptima.

Dirección de optimización de la estrategia

  1. Prueba de optimización de la configuración de los parámetros de EMA y ALMA, seleccionando los parámetros óptimos.

  2. En combinación con otros indicadores de filtración de señales, evitará que las señales erróneas causen pérdidas. Por ejemplo, MACD, KDJ, etc.

  3. Optimizar el Stop Loss y encontrar un equilibrio entre el control del riesgo y la ganancia.

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

Resumir

La estrategia en su conjunto es una estrategia de seguimiento de tendencias sencilla y práctica. Utiliza el cruce de EMA para determinar la dirección de la tendencia, el indicador ALMA para ubicar los puntos de subida y el RSI estocástico para evitar el riesgo de sobreventa, mientras que establece paros y paradas para controlar el riesgo. La estrategia obtiene mejores resultados mediante el ajuste de parámetros y la optimización de indicadores.

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