Estrategia de trading de reversión de media móvil


Fecha de creación: 2023-10-25 10:58:02 Última modificación: 2023-10-25 10:58:02
Copiar: 0 Número de Visitas: 1191
1
Seguir
1617
Seguidores

Estrategia de trading de reversión de media móvil

Descripción general

La estrategia de negociación de regresión mediana determina las señales de compra y venta mediante el cálculo de la línea de regresión lineal y el cruce de la línea mediana del precio de las acciones. La estrategia combina el análisis de regresión mediana y lineal, que considera la tendencia del precio de las acciones y las características estadísticas, para determinar eficazmente el punto de inflexión del precio de las acciones y lograr una venta baja.

Principio de estrategia

La estrategia comienza por calcular una línea de regresión lineal para el precio de la acción en días n y una línea media diaria en días m. La línea de regresión lineal refleja la tendencia estadística a largo plazo del precio de la acción y la línea media refleja el movimiento a corto plazo del precio de la acción.

Cuando la línea de regresión lineal atraviesa la media, indica que el precio de las acciones ha aumentado, lo que genera una señal de compra. Cuando la línea de regresión lineal atraviesa la media, indica que el precio de las acciones ha disminuido, lo que genera una señal de venta.

En concreto, la estrategia determina las señales de comercio a través de los siguientes pasos:

  1. Cálculo de la línea de regresión lineal del precio de la acción en n días

  2. Calcula el promedio móvil simple de m días de la línea de regresión lineal LRMA

  3. Calcula el índice de m-días del precio de las acciones

  4. Cuando el ema pasa el LRMA, genera una señal de compra de longEntry

  5. Cuando el ema pasa por el LRMA, genera una señal de salida larga

  6. Al mismo tiempo, en combinación con el juicio de las grandes bolsas, solo se debe considerar una señal de compra cuando las grandes bolsas son un mercado alcista.

  7. Ejecución de las operaciones de compra y venta en función de la señal

Mediante el cruce de la línea de mediana y la línea de regresión, se puede determinar el momento de compra y venta, filtrar eficazmente las falsificaciones y capturar los puntos de inflexión, para lograr una compra baja y una venta alta.

Ventajas estratégicas

  • La línea de retorno refleja la tendencia a largo plazo, la línea media refleja el movimiento a corto plazo, y la combinación de dos indicadores permite determinar con precisión el punto de compra y venta
  • El cálculo de la línea de regresión es simple y fácil de implementar
  • El uso de la discernimiento del mercado para filtrar las señales de negociación inadecuadas
  • Parámetros personalizables para ajustar la estrategia de compra y venta
  • En la actualidad, el mercado de la moda es más grande que el de la moda, con una venta baja y una venta alta.

Riesgo estratégico

  • Las líneas de avance y regreso se cruzan con frecuencia cuando los precios de las acciones fluctúan fuertemente y pueden generar señales erróneas
  • Cuando el pronóstico del mercado es inexacto, también se puede equivocar en el momento de comprar y vender.
  • La configuración incorrecta de los parámetros también puede afectar la eficacia de la política
  • Las transacciones son frecuentes y costosas.

Los parámetros a los que hay que prestar atención son los siguientes: ajuste de parámetros, aumento adecuado de los parámetros del ciclo de la línea media y de la línea de regresión, reducción de la frecuencia de las operaciones.

Optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de indicadores de medias: prueba diferentes tipos de medias, como medias móviles ponderadas, para encontrar la mejor media para la acción.

  2. Optimización de la línea de regresión: ajustar el ciclo de cálculo de la línea de regresión para encontrar el parámetro de ciclo que mejor refleje la tendencia a largo plazo de la acción.

  3. Optimización del juicio de las grandes apuestas: prueba diferentes indicadores de juicio de las grandes apuestas para encontrar la señal de las grandes apuestas más adecuada para la estrategia.

  4. Optimización de parámetros: se busca la configuración óptima de los parámetros mediante la repetición de diferentes combinaciones de parámetros.

  5. Optimización de las estrategias de detención de pérdidas: prueba diferentes métodos de detención de pérdidas y establece la lógica de detención de pérdidas óptima para controlar el riesgo.

  6. Optimización de los costos de transacción: ajuste la frecuencia de las transacciones para reducir los costos de transacción de acuerdo con los diferentes modelos de comisiones de transacción.

La optimización de los puntos anteriores puede mejorar aún más la estabilidad y la rentabilidad de la estrategia.

Resumir

Esta estrategia de negociación de regresión lineal integra el análisis lineal y el análisis de regresión lineal, lo que permite identificar con eficacia los puntos de inflexión en el precio de las acciones y orientar las compras y ventas bajas. La estrategia es más simple y confiable, y es adecuada para el comercio de opciones de acciones de línea media y larga.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © lazy_capitalist

//@version=5
strategy('Linear Regression MA', overlay=true, initial_capital=10000)
datesGroup = "Date Info"
startMonth = input.int(defval = 1,    title = "Start Month",  minval = 1, maxval = 12,  group=datesGroup)
startDay   = input.int(defval = 1,    title = "Start Day",    minval = 1, maxval = 31,  group=datesGroup)
startYear  = input.int(defval = 2022, title = "Start Year",   minval = 1970,            group=datesGroup)

averagesGroup = "Averages"
lrLineInput     = input.int(title="Linear Regression Line",   defval=55, minval = 1, group=averagesGroup)
lrMAInput       = input.int(title="Linear Regression MA",     defval=55, minval = 1, group=averagesGroup)
emaInput        = input.int(title="EMA Length",               defval=55, minval = 1, group=averagesGroup)


tradesGroup = "Execute Trades"
executeLongInput    = input.bool(title="Execute Long Trades",       defval=true)
executeShortInput   = input.bool(title="Execute Short Trades",      defval=true)
executeStopLoss     = input.bool(title="Execute Stop Loss",         defval=true)

fourHrSMAExpr       = ta.sma(close, 200)
fourHrMA            = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr)

bullish             = close > fourHrMA ? true : false


maxProfitInput              = input.float(  title="Max Profit (%)",         defval=10.0,    minval=0.0)   * 0.01
stopLossPercentageInput     = input.float(  title="Stop Loss (%)",          defval=1.75,    minval=0.0)   * 0.01

start       = timestamp(startYear, startMonth, startDay, 00, 00)            // backtest start  window
window()    => time >= start ? true : false                              // create function "within window of time"
showDate    = input(defval = true, title = "Show Date Range")

lrLine = ta.linreg(close, lrLineInput, 0)
lrMA   = ta.sma(lrLine, lrMAInput)
ema     = ta.ema(close, emaInput)

longEntry   = ema   < lrMA
longExit    = lrMA  < ema

shortEntry  = lrMA  < ema
shortExit   = ema   < lrMA


maxProfitLong   = strategy.opentrades.entry_price(0) * (1 + maxProfitInput)
maxProfitShort  = strategy.opentrades.entry_price(0) * (1 - maxProfitInput)

stopLossPriceShort  = strategy.position_avg_price * (1 + stopLossPercentageInput)
stopLossPriceLong   = strategy.position_avg_price * (1 - stopLossPercentageInput)

if(executeLongInput and bullish)
    strategy.entry( id="long_entry", direction=strategy.long,   when=longEntry and window(),    qty=10,  comment="long_entry")
    strategy.close( id="long_entry", when=longExit,     comment="long_exit")
    // strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp")
    
if(executeShortInput and not bullish)
    strategy.entry( id="short_entry", direction=strategy.short,   when=shortEntry and window(),    qty=10,  comment="short_entry")
    strategy.close( id="short_entry", when=shortExit,     comment="short_exit")
    // strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp")

if(strategy.position_size > 0 and executeStopLoss)
    strategy.exit(  id="long_entry",        stop=stopLossPriceLong,             comment="exit_long_SL")
    strategy.exit(  id="short_entry",       stop=stopLossPriceShort,            comment="exit_short_SL")
    
// plot(series=lrLine,     color=color.green)
plot(series=lrMA,       color=color.red)
plot(series=ema,        color=color.blue)