Estrategia de negociación con indicadores de media móvil


Fecha de creación: 2023-12-06 17:10:00 Última modificación: 2023-12-06 17:10:00
Copiar: 0 Número de Visitas: 605
1
Seguir
1619
Seguidores

Estrategia de negociación con indicadores de media móvil

Descripción general de la estrategia

La estrategia se basa en varios indicadores de media móvil para generar señales de comercio. La estrategia se centra en las medias móviles a corto, mediano y largo plazo para determinar la dirección de la tendencia y generar señales de comercio en función de su intersección.

Nombre de la estrategia

Estrategia de cruce de la media móvil múltiple

Principio de estrategia

La estrategia utiliza un promedio móvil de 3 períodos diferentes al mismo tiempo, incluyendo la línea de 7 días, la línea de 13 días y la línea de 21 días. Su lógica de negociación se basa en:

  1. Cuando la línea de 7 días a corto plazo atraviesa la línea de 13 días a mediano plazo, y la línea de 21 días a largo plazo está en tendencia alcista, se genera una señal de pluriel;
  2. Cuando la línea de 7 días a corto plazo atraviesa la línea de 13 días a mediano plazo y la línea de 21 días a largo plazo está en una tendencia a la baja, se genera una señal de falta.

Al combinar las medias móviles de diferentes períodos de tiempo, se puede juzgar con mayor precisión las tendencias del mercado y evitar errores de negociación.

Ventajas estratégicas

  1. El uso de múltiples grupos de medias móviles permite determinar con mayor precisión el movimiento del mercado y evitar ser engañados por falsas rupturas o fluctuaciones a corto plazo en el mercado.
  2. Las señales se generan solo cuando la tendencia es clara, lo que reduce el número de operaciones innecesarias y, por lo tanto, los costos de las transacciones.
  3. La configuración de los parámetros es flexible y permite ajustar el ciclo de las medias móviles según las preferencias personales, adaptándose a diferentes variedades y entornos de mercado.

Riesgo estratégico

  1. En un mercado con una corrección de la oscilación, las señales erróneas pueden ser frecuentes.
  2. La media móvil es un indicador de seguimiento de tendencias que no permite determinar con exactitud el punto de inflexión.
  3. La media móvil cruzada se retrasa en la identificación de tendencias y puede perder parte de las ganancias.
  4. Se puede reducir el riesgo mediante la introducción de otras señales de verificación de indicadores técnicos y la optimización de los parámetros de la media móvil.

Dirección de optimización de la estrategia

  1. Considere la introducción de indicadores de volatilidad para determinar la intensidad de la tendencia y evite operar en mercados convulsionados.
  2. Intenta utilizar técnicas cuantitativas como el aprendizaje automático para optimizar los parámetros de las medias móviles.
  3. Incrementar las estrategias de detención de pérdidas y detener las pérdidas en el momento en que las pérdidas se expanden.
  4. Considere la posibilidad de utilizar una lista de precios límite para reducir los puntos de deslizamiento al cruzar una media móvil.

Resumir

La estrategia, combinada con promedios móviles de tres períodos de tiempo cortos y largos, juzga las tendencias del mercado en función de su interrelación, y es una estrategia de seguimiento de tendencias relativamente estable y eficiente. Al optimizar los parámetros del indicador, el mecanismo de stop loss y el método de pedido, se puede mejorar aún más la ganancia y la rentabilidad de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 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/
// © Crypto-Oli

//@version=4
strategy("CryptOli 3 MAs long/short Backtest", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=true)

// this is an educational Script - basicly its very simple - you can see how minimal changes impact results, thats why i posted it
// Credits to Quantnomad to publish tons of free educational script
// this Script is based on https://www.tradingview.com/script/0NgUadGr-Ultimate-MA-Cross-Indicator/ Quantnomads Ultimate MA Indicator 
// HA - Option for calcucaltion based on HA-Candles (very famous recently)
// Source Input - Option (Candletype for calculation, close, ohlc4 ect.) --- there are huge differences --- try it by your own

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2015, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2030, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

////////////////////////////////////////////////////////////////////////////////

h = input(false, title = "Signals from Heikin Ashi Candles")

ma_type      = input(title = "MA Type",         type = input.string,  defval = "SMMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
src = input(ohlc4)

short_ma_len = input(title = "Short MA Length", type = input.integer, defval = 7,     minval = 1)
short_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
middle_ma_len  = input(title = "Middle MA Length",  type = input.integer, defval = 13,    minval = 2)
middle_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
long_ma_len  = input(title = "Long MA Length",  type = input.integer, defval = 21,    minval = 2)
long_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close


tick_round(x) => 
    round(x / syminfo.mintick) * syminfo.mintick

// Set initial values to 0
short_ma = 0.0
middle_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    middle_ma := sma(middle_ma_src, middle_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    middle_ma := ema(middle_ma_src, middle_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    middle_ma := wma(middle_ma_src, middle_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    middle_ma := wma(2*wma(middle_ma_src, middle_ma_len/2)-wma(middle_ma_src, middle_ma_len), round(sqrt(middle_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    middle_ma := vwma(middle_ma_src, middle_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)


// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    middle_ma := na(middle_ma[1]) ? sma(middle_ma_src, middle_ma_len) : (middle_ma[1] * (middle_ma_len - 1) + middle_ma_src) / middle_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_middle = ema(middle_ma_src, middle_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    middle_ma := 2 * e1_middle - ema(e1_middle, middle_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

// Plot MAs
plot(short_ma, color = color.green,   linewidth = 1)
plot(middle_ma, color = color.yellow,   linewidth = 1)
plot(long_ma,  color = color.red, linewidth = 1)

if close>long_ma and short_ma>middle_ma and time_cond
    strategy.entry("Long", strategy.long)


if close<long_ma and short_ma<middle_ma and time_cond
    strategy.entry("Short", strategy.short)