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.
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.
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.
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.
Tamaño de posición: utilizar el tamaño de posición fijo, abrir 1 contrato cada vez.
El uso de tres promedios móviles ayuda a determinar la dirección de la tendencia y evitar errores.
Seguimiento de la tendencia para el potencial de ganancia.
El uso de promedios móviles da como resultado ganancias estables y reducciones relativamente pequeñas.
La estrategia de stop loss controlada reduce la probabilidad de pérdidas enormes.
Propenso a múltiples pequeñas pérdidas, disminuyendo la eficiencia de las ganancias.
Las medias móviles se retrasan y pueden perder los puntos de inversión de tendencia.
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.
La optimización inadecuada de los parámetros conduce a un exceso de negociación, aumentando los costos de negociación y el deslizamiento.
Optimizar los períodos de media móvil para adaptarse a las características del instrumento de negociación.
Utilice ATR para ajustar dinámicamente el tamaño de la posición.
Agregue la estrategia de stop loss.
Incorporar indicadores de volumen de operaciones para determinar la fiabilidad de las tendencias.
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