Estrategia de tendencia de cruce de medias móviles dobles


Fecha de creación: 2023-12-06 11:52:10 Última modificación: 2023-12-06 11:52:20
Copiar: 0 Número de Visitas: 384
1
Seguir
1166
Seguidores

Estrategia de tendencia de cruce de medias móviles dobles

Descripción general

La estrategia de tendencia de cruce de doble línea es una estrategia de negociación basada en promedios móviles. Utiliza el cruce de la línea rápida EMA y la línea lenta SMA como una señal de compra y venta, y se combina con el desvío del indicador MACD para filtrar las señales. La estrategia considera al mismo tiempo varios factores, como el precio, la tendencia y la dinámica, para formar un sistema de negociación relativamente completo.

Principio de estrategia

La estrategia utiliza dos medias móviles EMA y SMA. La EMA tiene una duración de 200 días y la SMA tiene una duración de 100 días. Se genera una señal de compra cuando el precio sube por encima de las dos medias y se genera una señal de venta cuando el precio baja por encima de las dos medias.

Para mejorar aún más la fiabilidad de la señal, la estrategia también introdujo el indicador MACD. Cuando el precio rompe la EMA y la SMA forman una señal, se requiere que la línea rápida del MACD rompa la línea lenta desde abajo, y que el gráfico de la columna MACD esté sobre el eje 0, para que se genere una verdadera señal de compra. Por el contrario, la línea rápida del MACD rompe la línea lenta desde arriba, y el gráfico de la columna MACD está debajo del eje 0, para que se genere una verdadera señal de venta.

Además, la estrategia también establece paradas y paradas. Una vez que la estrategia abre una posición, se calcula y establece un punto de parada y paradas en función de la proporción establecida por el usuario. Esto permite controlar el riesgo de una sola operación.

En general, la estrategia tiene en cuenta una serie de indicadores, establece estrictas condiciones de filtración para las señales de compra y venta y administra el riesgo de los estancamientos para crear un sistema de negociación relativamente riguroso y completo.

Análisis de las ventajas

Las estrategias de tendencia de doble equilátero cruzado tienen las siguientes ventajas:

  1. La combinación de múltiples indicadores, la consideración integral de precios, tendencias y dinámicas, establece condiciones de filtrado estrictas para la señal, lo que puede evitar de manera efectiva las señales falsas y mejorar la fiabilidad de la señal.

  2. El uso de dos promedios móviles de diferentes parámetros permite identificar mejor las tendencias del mercado y filtrar las situaciones de volatilidad. La línea EMA rápida se utiliza para seguir los cambios en los precios en tiempo real; la línea SMA lenta se utiliza para determinar las tendencias a largo plazo. La combinación de las dos líneas uniformes es más eficaz.

  3. La introducción de MACD en el indicador permite ajustar los parámetros de acuerdo con las características de los diferentes mercados, y tiene una gran flexibilidad. La configuración de MACD asegura que las señales de negociación reciban al mismo tiempo el apoyo de precios, tendencias y dinámicas, por lo que tienen un gran valor de aplicación.

  4. Establezca un límite de stop loss para controlar al máximo las pérdidas de una sola transacción y evitar SIZE_MATHFUNC Riesgo excesivo de pérdidas individuales. La configuración razonable de los límites puede bloquear parte de las ganancias y reducir la exposición al riesgo de mercado después de las ganancias.

  5. Los parámetros de la estrategia se pueden configurar de manera flexible y se pueden ajustar a la estrategia según los resultados de la optimización, lo que es muy práctico. Hay un gran espacio de optimización para probar diferentes mercados y parámetros.

Análisis de riesgos

Las estrategias de tendencia de doble equilátero cruzado también presentan algunos riesgos, que se centran principalmente en los siguientes aspectos:

  1. Cuando los precios de las acciones muestran una gran oscilación, la EMA y la SMA pueden tener múltiples cruces erróneos, lo que provoca la apertura y cierre frecuentes de las señales de negociación. Esto aumentará la frecuencia de negociación y el gasto en comisiones.

  2. Los indicadores MACD pueden presentar falsas rupturas, especialmente cuando el momento de la oscilación aún no está claro. En este caso, la señal no es confiable y puede causar pérdidas innecesarias.

  3. La ubicación y proporción de la configuración de stop loss tiene un gran impacto en los resultados de ganancias y pérdidas. Si la configuración de stop loss es demasiado pequeña, existe el riesgo de cobertura; y si la configuración de stop loss es demasiado grande, la pérdida individual puede ser excesiva. Esto requiere una prueba adecuada para encontrar el mejor parámetro.

  4. Los promedios móviles son indicadores de seguimiento de tendencias, y su utilidad como indicador se restringe cuando los precios se revierten rápidamente. La estrategia puede no llegar a su punto de parada y ser golpeada por el cambio de precio, lo que genera una mayor pérdida.

La solución es la siguiente:

  1. Para una situación de gran volatilidad, los parámetros de los promedios móviles se pueden ajustar adecuadamente, utilizando EMA y SMA de bajos parámetros para reducir el número de cruces.

  2. Aumentar las condiciones de filtración de las rupturas arriba y abajo del eje cero del MACD puede reducir en cierta medida las falsas rupturas. También se puede considerar la inclusión de otros indicadores para la combinación, como KDJ, BOLL, etc.

  3. La configuración de la posición y la proporción de la parada de pérdidas requiere un buen análisis y optimización para encontrar los parámetros óptimos. Sobre esta base, también se debe considerar la supervisión continua y el ajuste dinámico.

  4. Se puede configurar un mecanismo de identificación de la reversión rápida de los precios. Cuando se detecte una reversión anormal, se toman medidas de emergencia para reducir la posición o suspender la estrategia de negociación para controlar la brecha de riesgo.

Dirección de optimización

La estrategia de tendencia de doble equilátero cruzado tiene espacio para una optimización adicional, que se centra en los siguientes aspectos:

  1. Probar más indicadores para combinarlos y buscar mejores parámetros. Por ejemplo, introducir el canal BOLL, considerar el impacto de la volatilidad, etc.

  2. Optimización de la longitud de los parámetros de las medias móviles para encontrar la combinación óptima de parámetros en diferentes condiciones de mercado. Optimización de parámetros de rotación también es una opción.

  3. Establecer estrategias de stop loss más científicas y razonables, como la introducción de stop loss de seguimiento o el establecimiento de un índice de riesgo-retorno dinámico basado en los resultados estadísticos históricos, puede mejorar aún más la estabilidad de la estrategia.

  4. Establecer mecanismos automáticos de identificación y emergencia de inversiones anormales en los precios. En situaciones extremas, reducir activamente las posiciones o suspender la estrategia para evitar grandes pérdidas.

  5. Extensión de la variedad de transacción, como divisas, monedas digitales y otras variedades. Prueba de la solidez de los parámetros de las diferentes variedades, ampliación del alcance de la aplicación de la estrategia.

  6. Las estrategias de gestión de fondos para optimizar las estrategias, como el comercio cuantitativo, la proporción de posiciones fijas, etc. Controlar el riesgo de pérdidas individuales, para que la curva de fondos en general sea más plana.

Resumir

La estrategia de tendencia de cruce de dos líneas equiláteros tiene en cuenta múltiples factores, y la emisión de señales de negociación requiere el apoyo de varios indicadores de precio, tendencia y dinámica, para garantizar la fiabilidad de la señal. La estrategia también utiliza un stop loss móvil, que puede controlar eficazmente el riesgo de una sola operación. La configuración de los parámetros de la estrategia es flexible, práctica y adecuada para la automatización de la negociación.

Sin embargo, ninguna estrategia puede ser perfecta. Esta estrategia también puede tener algunas dificultades en la aplicación, como el comercio frecuente, los falsos avances y la configuración de posiciones de parada. Esto requiere que empecemos en muchos aspectos, como la optimización de la combinación de parámetros, la introducción de una nueva combinación de indicadores técnicos y la mejora de los mecanismos de parada, para mejorar aún más la estabilidad y la rentabilidad de la estrategia.

En general, la estrategia de tendencia de doble equilátero cruzado forma un sistema de negociación relativamente completo y riguroso. En el estudio y la aplicación posteriores, la estrategia espera mostrar un mayor valor de batalla real a través de la optimización y la mejora continuas.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Hi,
// This is my first strategy made by myself(except for the MACD indicator). I'm publishing this to get myself out there and for some newer people to see how a basic strategy works. All credits go to Zen&TheArtofTrading, for teaching me almost everything I know about Pinescript
// The strategy is basically an MACD crossover trend strategy. If the MACD line crosses the signal line upward, above the zero point of the histogram, while the price is above 200 EMA and 100 SMA it's a buy signal
// If the MACD line crosses the signal line downward, while below zero point of the histogram, as well as the price being below 200 EMA and 100 SMA it's a sell signal
// I used the 200 EMA and 100 SMA because I wanted to filter weak signals as much as possible when the market is ranging, if you have any suggestions to go around this better, please let me know, still learning everyday

// If you have any suggestions, tips or tricks please let me know. I'm still new to Pinescript, but having a lot of fun trying stuff out. If you see something in my code that you don't understand, feel free to ask, I'll try to answer as best as I can

// I opened the strategy with predetermined backtesting pyramiding, currency etc. This made the progress of backtesting multiple TP and SL easier. Also the commission value is from Binance Futures, I just left it in there for anyone who wants to just copy this strategy
strategy("MACD Crossover Trend Strategy Template", overlay = true )

// Determining inputs and values, I just copied the built-in MACD strategy and removed everything I didn't need, just needed the barebone indicator and added EMA + SMA inputs
fast_length = input(title = "Fast Length", type = input.integer, defval = 12, group = "MACD Values")
slow_length = input(title = "Slow Length", type = input.integer, defval = 26, group = "MACD Values")
src = input(title = "Source", type = input.source, defval = close, group = "MACD Values")
signal_length = input(title = "Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group = "MACD Values")
sma_source = input(title = "Simple MA (Oscillator)", type = input.bool, defval = false, group = "MACD Values")
sma_signal = input(title = "Simple MA (Signal Line)", type = input.bool, defval = false, group = "MACD Values")
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
emaLength = input(title = "EMA", type = input.integer, defval = 200, step = 10, group = "Moving Averages")
smaLength = input(title = "SMA", type = input.integer, defval = 100, step = 10, group = "Moving Averages")

// Input backtest range, you can adjust this here or in the input options
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
fromYear  = input(defval = 2000, title = "From Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
thruYear  = input(defval = 2099, title = "Thru Year",       type = input.integer, minval = 1970, group = "Backtest Date Range")

// Inputs for EMA, SMA and to adjust your take profit and stop losses in the input options while backtesting, it's result of your input is calculated back to percentages
ema = ema(close, emaLength)
sma = sma(close, smaLength)
profitlong = input(title = "Profit Long %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
losslong = input(title = "Loss Long %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
profitshort = input(title = "Profit Short %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
lossshort = input(title = "Loss Short %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01

// Check EMA and SMA also check the backtest range. inDataRange is a true or false statement, true if the date right now is between the parameters that's filled at the corresponding inputs
// (for example 1-1-2020 till 12-12-2020, if that specific bar is between these dates, statement is true and trade will be executed)
// If the date is not in between the given parameters, statement turns to false and it won't allow new trades and closes all current trades as seen with the strategy.close_all function
inDataRange = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0))
long = close > ema and close > sma and inDataRange
short = close < ema and close < sma and inDataRange

// Entry and exit signals + checking backtest date range, what the signals are supposed to do is noted at the beginning of the code
// I want a way to filter out weak signals that are ranging around the zero point of the histogram. 
// So far couldn't think of a decent way to do this over multiple symbols since the range of the histogram changes with every symbol, sometimes ranging between 0 and 1 or sometimes ranging between 0 and 1000
// I could probably use a cofficiency or something, but that's beyond my grasp at the moment
// Also I wanted a way to let my strategy determine a stop loss based on the pullback and having a 1.5 risk/reward TP on top of that. Couldn't really figure out a way to determine the pullback
if (crossover(macd, signal) and macd > 0)
    strategy.entry("Long", long = strategy.long,
     comment = "Long Buy",
     when = long)

strategy.exit("Exit Long", "Long", profit = close * profitlong / syminfo.mintick, loss = close * losslong / syminfo.mintick)


if (crossunder(macd, signal) and macd < 0)
    strategy.entry("Short", long = strategy.short,
     comment = "Short Buy",
     when = short)

strategy.exit("Exit Short", "Short", profit = close * profitshort / syminfo.mintick, loss = close * lossshort / syminfo.mintick)

// To make sure the backtesting doesn't leave a position open beyond, or before, our applied dates
if (not inDataRange)
    strategy.close_all()

// plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)