Tendencia de la media móvil triple siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2024-02-01 11:02:17
Las etiquetas:

img

Resumen general

Esta estrategia combina el concepto de comercio de tortuga con el análisis de fase de Niko Bakker, utilizando tres promedios móviles de diferentes ciclos para determinar la dirección de la tendencia para seguir la tendencia.

Estrategia lógica

  1. Calcule tres promedios móviles de diferentes ciclos: el período promedio móvil rápido es de 8 días, el período promedio móvil medio es de 21 días y el período promedio móvil lento es de 55 días.

  2. Determinar las condiciones de entrada: cuando la media móvil rápida cruce por encima de la media móvil media y las tres medias móviles están en tendencia al alza, pasar a largo; cuando la media móvil rápida cruza por debajo de la media móvil media y las tres medias móviles están en tendencia a la baja, pasar a corto.

  3. Determinar las condiciones de salida: cierre de posiciones cuando la media móvil rápida cruza la media móvil media en la dirección opuesta.

  4. Tamaño de posición: utilizar el tamaño de posición fijo, abrir 1 contrato cada vez.

Análisis de ventajas

  1. El uso de tres promedios móviles ayuda a determinar la dirección de la tendencia y evitar errores.

  2. Seguimiento de la tendencia para el potencial de ganancia.

  3. El uso de promedios móviles da como resultado ganancias estables y reducciones relativamente pequeñas.

  4. La estrategia de stop loss controlada reduce la probabilidad de pérdidas enormes.

Análisis de riesgos

  1. Propenso a múltiples pequeñas pérdidas, disminuyendo la eficiencia de las ganancias.

  2. Las medias móviles se retrasan y pueden perder los puntos de inversión de tendencia.

  3. El dimensionamiento de las posiciones fijas no puede controlar los riesgos de manera efectiva y puede provocar una llamada de margen durante fluctuaciones significativas del mercado.

  4. La optimización inadecuada de los parámetros conduce a un exceso de negociación, aumentando los costos de negociación y el deslizamiento.

Optimización

  1. Optimizar los períodos de media móvil para adaptarse a las características del instrumento de negociación.

  2. Utilice ATR para ajustar dinámicamente el tamaño de la posición.

  3. Agregue la estrategia de stop loss.

  4. Incorporar indicadores de volumen de operaciones para determinar la fiabilidad de las tendencias.

Resumen de las actividades

Esta estrategia integra los indicadores técnicos tradicionales y la filosofía del comercio de tortugas, utilizando tres promedios móviles para rastrear las tendencias. Con la optimización adecuada de los parámetros, puede lograr una buena rentabilidad. Pero también tiene algunos riesgos.


/*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

Más.