Estrategia de seguimiento de tendencia de triple media móvil


Fecha de creación: 2024-02-01 11:02:17 Última modificación: 2024-02-01 11:02:17
Copiar: 2 Número de Visitas: 600
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de triple media móvil

Descripción general

Esta estrategia combina los conceptos de la técnica de las corvas con el análisis de fases de Niko Bakkers, y utiliza tres promedios móviles de diferentes períodos para determinar la dirección de la tendencia y obtener ganancias de seguimiento de la tendencia. Haga más cuando el promedio móvil más rápido cruza el promedio móvil más rápido y los tres promedios móviles están en la misma tendencia ascendente o descendente; y haga vacío cuando el promedio móvil más rápido cruza el promedio móvil más rápido y los tres promedios móviles están en la misma tendencia ascendente o descendente.

Principio de estrategia

  1. Calcule una media móvil de tres períodos diferentes: una media móvil rápida de 8 días, una media móvil de 21 días y una media móvil lenta de 55 días.

  2. Para determinar los requisitos de ingreso: hacer más cuando el promedio móvil rápido atraviesa el promedio móvil medio y los tres promedios móviles están en una tendencia ascendente; hacer vacío cuando el promedio móvil rápido atraviesa el promedio móvil medio y los tres promedios móviles están en una tendencia descendente.

  3. Para juzgar las condiciones de salida: el promedio móvil rápido cruza el promedio móvil rápido de forma inversa y la posición está plana.

  4. Control de posicionamiento: con posicionamiento fijo, cada vez que se abre un almacén. También se puede optar por ajustar la posición de acuerdo con la dinámica de ATR.

Ventajas estratégicas

  1. El uso de tres medias móviles ayuda a determinar la dirección de la tendencia y evitar falsos breaks.

  2. El blog de la empresa, en su versión en inglés, dice:

  3. El promedio móvil es el que permite obtener ganancias estables y retiros relativamente pequeños.

  4. Estrategias controlables de detención de pérdidas para reducir la probabilidad de grandes pérdidas.

Análisis de riesgos

  1. Es fácil generar pequeñas pérdidas repetidas y reducir la rentabilidad.

  2. Los promedios móviles están atrasados y pueden haber perdido el punto de inflexión.

  3. Las posiciones fijas no pueden controlar el riesgo de manera efectiva y pueden explotar en caso de una gran sacudida en el mercado.

  4. La optimización incorrecta de los parámetros puede ocasionar la apertura de posiciones cerradas con demasiada frecuencia, lo que aumenta los gastos de transacción y la pérdida de puntos de deslizamiento.

Dirección de optimización

  1. Optimización de los parámetros periódicos de las medias móviles para que se ajusten mejor a las características de las variedades de negociación.

  2. Aplicación de los indicadores de volatilidad ATR para ajustar posiciones dinámicamente.

  3. Participar en la estrategia de detener los daños.

  4. La fiabilidad de las tendencias en combinación con los indicadores de volumen de transacciones.

Resumir

Esta estrategia integra los indicadores de análisis técnico tradicionales con la filosofía de la negociación de toros, utiliza tres medias móviles para seguir la tendencia y, si los parámetros se optimizan adecuadamente, puede obtener mejores resultados de ganancias. Sin embargo, esta estrategia también tiene ciertos riesgos, que requieren la adición de medidas como el control de pérdidas y la gestión de posiciones para controlar el riesgo y, por lo tanto, obtener una estrategia de negociación cuantitativa de ganancias estables a largo plazo.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan

//@version=4

// 1. Define strategy settings
strategy(title="Triple Moving Average", overlay=true,
     pyramiding=0, initial_capital=1000,
     commission_type=strategy.commission.cash_per_order,
     commission_value=4, slippage=2)
     
fastMALen = input(title="Fast MA Length", type=input.integer, defval=8)
medMALen  = input(title="Medium MA Length", type=input.integer, defval=21)
slowMALen = input(title="Slow MA Length", type=input.integer, defval=55)

//endMonth = input(title="End Month Backtest", type=input.integer, defval=11)
//endYear  = input(title="End Year Backtest", type=input.integer, defval=2019)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 12, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

usePosSize = input(title="Use Position Sizing?", type=input.bool, defval=true)
riskPerc   = input(title="Risk %", type=input.float, defval=0.5, step=0.25)

// 2. Calculate strategy values
fastMA = sma(close, fastMALen)
medMA  = sma(close, medMALen)
slowMA = sma(close, slowMALen)

//Position Sizing
riskEquity  = (riskPerc / 100) * strategy.equity
atrCurrency = (atr(20) * syminfo.pointvalue)
posSize     = usePosSize ? floor(riskEquity / atrCurrency) : 1

//Backtest Window
//tradeWindow = (time <= timestamp(endYear, endMonth, 1, 0, 0))

// 3. Determine long trading conditions
enterLong = crossover(fastMA, medMA) and
     (fastMA > slowMA) and (medMA > slowMA) and
     window() 

exitLong = crossunder(fastMA, medMA)

// 4. Code short trading conditions
enterShort = crossunder(fastMA, medMA) and
     (fastMA < slowMA) and (medMA < slowMA) and
     window() 

exitShort = crossover(fastMA, medMA)

// 5. Output strategy data
plot(series=fastMA, color=color.green, title="Fast MA")
plot(series=medMA, color=color.purple, title="Medium MA")
plot(series=slowMA, color=color.red, title="Slow MA",
     linewidth=2)
     
bgColour =
     enterLong and (strategy.position_size < 1) ? color.green :
     enterShort and (strategy.position_size > -1) ? color.red :
     exitLong and (strategy.position_size > 0) ? color.lime :
     exitShort and (strategy.position_size < 0) ? color.orange :
     na

bgcolor(color=bgColour, transp=85)

// 6. Submit entry orders
if (enterLong)
    strategy.entry(id="EL", long=true, qty=1)

if (enterShort)
    strategy.entry(id="ES", long=false, qty=1)

// 7. Submit exit orders
strategy.close_all(when=exitLong and
     (strategy.position_size > 0))
strategy.close_all(when=exitShort and
     (strategy.position_size < 0))

strategy.close_all(when=not window())

//END