Tendencia oscilante Estrategia de promedio móvil

El autor:¿ Qué pasa?, Fecha: 2024-02-04 15:44:54
Las etiquetas:

img

Resumen general

La estrategia de promedio móvil de tendencia oscilante es un sistema de seguimiento de tendencias que utiliza un promedio móvil a largo plazo para identificar la dirección de la tendencia combinado con el rango verdadero de la media para filtrar las falsificaciones y limitar las reducciones generales.

Estrategia lógica

La estrategia se basa en los siguientes principios:

  1. Utilice una media móvil exponencial para determinar la dirección general de la tendencia.
  2. Calcula el rango verdadero promedio de los últimos 10 bares.
  3. Cuando el precio de cierre está por encima de Medio móvil + Rango verdadero promedio, se determina como una tendencia alcista.
  4. Cuando el precio de cierre está por debajo de Medio móvil - Rango verdadero promedio, se determina como una tendencia bajista.
  5. Ir largo en una tendencia alcista y ir corto en una tendencia bajista.
  6. Por defecto, el promedio móvil se utiliza como la línea de stop loss. También puede elegir usar Moving Average ± Average True Range como la línea de stop loss.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de una media móvil para determinar la tendencia principal puede filtrar eficazmente el ruido del mercado a corto plazo.
  2. La adición de un rango verdadero promedio como condición de filtro evita la generación de señales comerciales en mercados de rango, reduciendo así las pérdidas innecesarias.
  3. La línea de stop loss está cerca de la media móvil o de su rango inverso, lo que permite que las pérdidas de stop rápidas reduzcan el aprovechamiento máximo.
  4. La configuración de parámetros sencillos hace que sea fácil de entender y optimizar.

Análisis de riesgos

La estrategia también tiene algunos riesgos potenciales:

  1. La inversión de tendencia suele conducir a un cierto grado de reducción en un sistema de promedios móviles.
  2. Los parámetros de la media móvil y el rango verdadero promedio pueden tener un gran impacto en el rendimiento de la estrategia.
  3. La estrategia en sí misma no tiene en cuenta la relación entre precio y volumen.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Pruebe diferentes tipos de promedios móviles para encontrar el más adecuado para existencias o productos específicos.
  2. Optimizar el parámetro de la media móvil del período para que sea más adecuado a las características de las acciones o productos negociados.
  3. Optimizar el parámetro de rango verdadero promedio para encontrar la mejor combinación para filtrar los mercados de rango sin perder tendencias.
  4. Añadir reglas de volumen para evitar interrupciones no válidas.
  5. Prueba y compara diferentes métodos de stop loss para determinar la solución óptima.

Conclusión

En general, la estrategia de movimiento promedio de tendencia oscilante es una estrategia de seguimiento de tendencia muy simple y práctica. También tiene un buen control de riesgos. Aunque la estrategia no toma en cuenta muchos factores, todavía se requieren pruebas detalladas y optimización de parámetros y métodos de stop loss. Sin embargo, su lógica de negociación simple y configuración de parámetros la hacen ampliamente aplicable a diferentes productos, especialmente adecuada para el comercio de criptomonedas como Bitcoin.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 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/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



Más.