Estrategia de inversión de media móvil doble


Fecha de creación: 2023-12-25 13:24:14 Última modificación: 2023-12-25 13:24:14
Copiar: 1 Número de Visitas: 575
1
Seguir
1621
Seguidores

Estrategia de inversión de media móvil doble

Descripción general

La estrategia de doble movimiento promedio de reversión es una estrategia de comercio cuantitativa que utiliza dos promedios móviles para identificar tendencias a corto y largo plazo. La estrategia combina el promedio móvil simple de 10 días y el promedio móvil simple de 200 días para capturar oportunidades de compra de reversión a corto plazo bajo una gran tendencia a largo plazo.

Principio de estrategia

La estrategia de inversión de la media móvil doble se basa principalmente en las siguientes hipótesis:

  1. El promedio móvil simple de 200 días es capaz de identificar la dirección de la tendencia a largo plazo del mercado. Cuando el precio está por encima de la línea de 200 días, representa que la bolsa está en una tendencia a la baja a largo plazo.

  2. Los promedios móviles simples de 10 días son capaces de identificar un retorno a corto plazo del mercado. Cuando el precio está por debajo de la línea de 10 días, representa un retorno a corto plazo.

  3. Bajo una tendencia a largo plazo hacia la oscuridad, cualquier retracción a corto plazo puede considerarse una oportunidad de baja absorción que puede ser capturada de manera eficiente.

Basado en la suposición anterior, la lógica de generación de señales de negociación de la estrategia es:

  1. Cuando el precio de cierre cruza la línea de 200 días y cruza la línea de 10 días al mismo tiempo, representa una tendencia bajista a largo plazo y una corrección a corto plazo, por lo que genera una señal de compra.

  2. Cuando se mantiene la posición, si el precio de cierre de la liquidación cruza de nuevo la línea de 10 días, lo que representa una reversión de la tendencia a corto plazo, se debe detener inmediatamente la pérdida. Además, si el precio de la acción tiene una caída más importante que causa pérdidas que alcanzan la línea de pérdida preestablecida, también se detendrá activamente.

  3. Cuando la bolsa en general cae más, puede ser una oportunidad de baja absorción, a través de un límite de caída preestablecido para determinar el momento de comprar.

Con este diseño, se puede hacer un seguimiento de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja de la tendencia baja.

Ventajas estratégicas

La estrategia de inversión de las medias móviles dobles tiene las siguientes ventajas:

  1. La estrategia es clara y simple, fácil de entender y de implementar.
  2. El uso de filtros de doble media móvil permite identificar con eficacia las tendencias a largo y corto plazo de las grandes carteras y las acciones individuales.
  3. Tiene una mejor eficiencia en el tiempo. Al capturar inversiones a corto plazo, se obtiene una mayor eficiencia en el uso de fondos.
  4. El mecanismo de detención de pérdidas incorporado permite un buen control de la pérdida de posiciones individuales.
  5. Los parámetros se pueden configurar de forma flexible y se aplican a los índices de mercado masivo y a las acciones populares.

Riesgo estratégico

A pesar de las evidentes ventajas de la estrategia de inversión de las medias móviles dobles, también existen algunos riesgos:

  1. Cuando el dólar se encuentra en un balance largo, es fácil generar señales erróneas, lo que afecta el rendimiento de la estrategia. En este momento, la estrategia debe suspenderse y esperar a que se active una tendencia clara.
  2. Si solo se basa en las medias móviles para determinar tendencias y generar señales, se pueden perder otras características efectivas. Se puede considerar la introducción de más indicadores para la optimización de la combinación.
  3. Una única forma de detener el daño puede ser demasiado rígida para probar diferentes tipos de mecanismos de detener el daño.
  4. Los parámetros de la estrategia necesitan ser ajustados y optimizados para los diferentes parámetros, de lo contrario afectan la estabilidad.

Dirección de optimización de la estrategia

La estrategia de inversión de las medias móviles dobles tiene varias direcciones de optimización:

  1. Prueba combinaciones de promedios móviles de diferentes longitudes para encontrar el parámetro óptimo.
  2. Añadir otros indicadores auxiliares para formar una señal más estable, como el volumen de tráfico, el indicador de convulsiones, etc.
  3. Prueba diferentes tipos de pérdidas, como pérdidas de seguimiento, pérdidas de tiempo, etc.
  4. Optimizar los parámetros de compra y pérdida para adaptarse a las cambiantes condiciones del mercado.
  5. Aumentar los algoritmos de aprendizaje automático para optimizar los parámetros con más datos históricos.

Resumir

La estrategia de inversión de doble media móvil es una estrategia cuantitativa muy práctica en general. Aprovecha los beneficios de las medias móviles para obtener un alto rendimiento en una sola ronda con una baja absorción y pérdida en el caso de operaciones con múltiples cabezas en líneas largas. También tiene cierta capacidad de identificación de grandes marcas y control de riesgos.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-24 00:00:00
end: 2023-12-24 00:00:00
period: 1h
basePeriod: 15m
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/
// © Gold_D_Roger
//note: spreading 1 statement over multiple lines needs 1 apce + 1 tab | multi line function is 1 tab
//Recommended tickers: SPY (D), QQQ (D) and big indexes, AAPL (4H)

//@version=5
strategy("Davin's 10/200MA Pullback on SPY Strategy v2.0",
     overlay=true,
     initial_capital=10000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=10, // 10% of equity on each trade
     commission_type=strategy.commission.cash_per_contract, 
     commission_value=0.1) //Insert your broker's rate, IB is 0.005USD or tiered

//Best parameters
// SPY D
// Stop loss 0.15
// commission of 0.005 USD using Interactive brokers
// Exit on lower close 
// Buy more when x% down --> 14%
// DO NOT include stop condition using MA crossover

// Get User Input
i_ma1           = input.int(title="MA Length 1", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA 200")
i_ma2           = input.int(title="MA Length 2", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA 10")
i_ma3           = input.int(title="MA Length 3", defval=50, step=1, group="Strategy Parameters", tooltip="MA for crossover signals`")
i_stopPercent   = input.float(title="Stop Loss Percent", defval=0.15, step=0.01, group="Strategy Parameters", tooltip="Hard stop loss of 10%")
i_startTime     = input(title="Start filter", defval=timestamp("01 Jan 2013 13:30 +0000"), group="Time filter", tooltip="Start date and time to begin")
i_endTime       = input(title="End filter", defval=timestamp("01 Jan 2099 19:30 +0000"), group="Time filter", tooltip="End date and time to stop")
i_lowerClose    = input.bool(title="Exit on lower close", defval=true, group="Strategy Parameters", tooltip="Wait for lower close after above 10SMA before exiting") // optimise exit strat, boolean type creates tickbox type inputs
i_contrarianBuyTheDip = input.bool(title="Buy whenever more than x% drawdown", defval=true, group="Strategy Parameters", tooltip="Buy the dip! Whenever x% or more drawdown on SPY")
i_contrarianTrigger = input.int(title="Trigger % drop to buy the dip", defval=14, step=1, group="Strategy Parameters", tooltip="% drop to trigger contrarian Buy the Dip!") 
//14% to be best for SPY 1D
//20% best for AMZN 1D
i_stopByCrossover_MA2_3 = input.bool(title="Include stop condition using MA crossover", defval=false, group="Strategy Parameters", tooltip="Sell when crossover of MA2/1 happens")

// Get indicator values
ma1 = ta.sma(close,i_ma1) //param 1
ma2 = ta.sma(close,i_ma2) //param 2
ma3 = ta.sma(close,i_ma3) //param 3
ma_9 = ta.ema(close,9) //param 2
ma_20 = ta.ema(close,20) //param 3

// Check filter(s)
f_dateFilter = true //make sure date entries are within acceptable range

// Highest price of the prev 52 days: https://www.tradingcode.net/tradingview/largest-maximum-value/#:~:text=()%20versus%20ta.-,highest(),max()%20and%20ta.
highest52 = ta.highest(high,52)
overall_change = ((highest52 - close[0]) / highest52) * 100

// Check buy/sell conditions
var float buyPrice = 0 //intialise buyPrice, this will change when we enter a trade ; float = decimal number data type 0.0
buyCondition  = (close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter) or (strategy.position_size == 0 and i_contrarianBuyTheDip==true and overall_change > i_contrarianTrigger and f_dateFilter) // higher than 200sma, lower than short term ma (pullback) + avoid pyramiding positions
sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1])  //check if we already in trade + close above 10MA; 
// third condition: EITHER i_lowerClose not turned on OR closing price has to be < previous candle's LOW [1]

stopDistance  = strategy.position_size > 0 ? ((buyPrice - close)/close) : na // check if in trade > calc % drop dist from entry, if not na
stopPrice     = strategy.position_size > 0 ? (buyPrice - (buyPrice * i_stopPercent)) : na // calc SL price if in trade, if not, na
stopCondition = (strategy.position_size > 0 and stopDistance > i_stopPercent) or (strategy.position_size > 0 and (i_stopByCrossover_MA2_3==true and ma3 < ma1))


// Enter positions
if buyCondition 
    strategy.entry(id="Long", direction=strategy.long) //long only

    
if buyCondition[1] // if buyCondition is true prev candle
    buyPrice := open // entry price = current bar opening price

// Exit position
if sellCondition or stopCondition 
    strategy.close(id="Long", comment = "Exit" + (stopCondition ? "Stop loss=true" : "")) // if condition? "Value for true" : "value for false"
    buyPrice := na //reset buyPrice

// Plot
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset = -1)
plot(ma1, color=color.blue) //defval=200
plot(ma2, color=color.white) //defval=10
plot(ma3, color=color.yellow) // defval=50