Estrategia de seguimiento de tendencia de canal de triple media móvil


Fecha de creación: 2023-11-06 16:58:57 Última modificación: 2023-11-06 16:58:57
Copiar: 0 Número de Visitas: 746
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia de canal de triple media móvil

Descripción general

La estrategia utiliza una combinación de tres medias móviles para determinar la dirección de la tendencia en función de la relación secuencial de las medias móviles y realizar el seguimiento de la tendencia. Cuando las medias móviles rápidas, medias móviles y medias móviles lentas se ordenan, haga más; cuando las medias móviles lentas, medias móviles y medias móviles rápidas se ordenan, haga vacío.

El principio de estrategia

La estrategia utiliza tres promedios móviles de diferentes períodos, que incluyen promedios móviles rápidos, promedios móviles medios y promedios móviles lentos.

Condiciones de entrada:

  1. Haga más: cuando el promedio móvil rápido > promedio móvil medio > promedio móvil lento, considere que la situación está en una tendencia alcista, haga más.
  2. Hacer un descuento: cuando el promedio móvil lento < promedio móvil medio < promedio móvil rápido, se considera que el mercado está en una tendencia a la baja, hacer un descuento.

Condiciones de juego:

  1. Aparición de la media móvil: la posición se estabiliza cuando se invierte la secuencia de tres medias móviles.
  2. La salida de stop-loss: establece un punto de stop-loss fijo, como un stop-loss del 12% y un stop-loss del 1% después de alcanzar el precio de stop-loss o stop-loss.

La estrategia es sencilla y directa, utiliza tres medias móviles para determinar la dirección de la tendencia del mercado y permite realizar operaciones de seguimiento de tendencias para mercados con una tendencia más fuerte.

Análisis de ventajas

  • Utiliza tres medias móviles para juzgar tendencias, filtrar el ruido del mercado e identificar la dirección de las tendencias.
  • El uso de diferentes medias móviles periódicas permite determinar con mayor precisión el punto de inflexión de la tendencia.
  • La combinación de un indicador de media móvil y un stop-loss fijo para administrar el riesgo de los fondos.
  • La estrategia es simple, intuitiva y fácil de entender.
  • Puede optimizar los parámetros de los ciclos de las medias móviles para adaptarse a diferentes situaciones de ciclo.

Riesgos y mejoras

  • En un escenario de grandes ciclos, las medias móviles pueden producir más errores de cálculo y causar pérdidas innecesarias.
  • Se puede considerar la inclusión de otros indicadores o condiciones de filtración para aumentar la tasa de ganancias.
  • La combinación de parámetros periódicos de la media móvil se puede optimizar para adaptarse a una situación de mercado más amplia.
  • El indicador de tendencia fuerte puede combinarse con el indicador de tendencia débil para evitar la caída de la cima.
  • Se puede agregar un alto automático para evitar la expansión de las pérdidas.

Conclusión

La triple media móvil sigue una estrategia clara y fácil de entender, utiliza una media móvil para determinar la dirección de la tendencia y realizar un comercio sencillo de seguimiento de la tendencia. La ventaja de la estrategia es que es fácil de implementar y puede adaptarse a diferentes situaciones de ciclo mediante el ajuste de los parámetros del ciclo de la media móvil.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © Jompatan

//@version=5
strategy('Strategy Triple Moving Average', overlay=true, initial_capital = 1000, commission_value=0.04, max_labels_count=200)

//INPUTS
mov_ave = input.string(defval="EMA", title='Moving Average type:', options= ["EMA", "SMA"])

period_1 = input.int(9,  title='Period 1', inline="1", group= "============== Moving Average Inputs ==============")
period_2 = input.int(21, title='Period 2', inline="2", group= "============== Moving Average Inputs ==============")
period_3 = input.int(50, title='Period 3', inline="3", group= "============== Moving Average Inputs ==============")

source_1 = input.source(close, title='Source 1', inline="1", group= "============== Moving Average Inputs ==============")
source_2 = input.source(close, title='Source 2', inline="2", group= "============== Moving Average Inputs ==============")
source_3 = input.source(close, title='Source 3', inline="3", group= "============== Moving Average Inputs ==============")


//EXIT CONDITIONS
exit_ma   = input.bool(true, title= "Exit by Moving average condition", group="================ EXIT CONDITIONS ================")
exit_TPSL = input.bool(false, title= "Exit by Take Profit and StopLoss", group="================ EXIT CONDITIONS ================")
TP        = input.int(12, title='Take Profit', step=1, group="================ EXIT CONDITIONS ================")
SL        = input.int(1, title='Stop Loss', step=1, group="================ EXIT CONDITIONS ================")
plot_TPSL = input.bool(false, title='Show TP/SL lines', group="================ EXIT CONDITIONS ================")


//Date filters
desde = input(defval= timestamp("01 Jan 2023 00:00 -3000"), title="From", inline="12", group= "============= DATE FILTERS =============")
hasta = input(defval= timestamp("01 Oct 2099 00:00 -3000"), title="To  ", inline="13", group= "============= DATE FILTERS =============")
enRango = true

//COMMENTS
//entry_long_comment  = input.string(defval=" ", title="Entry Long comment: ", inline="14", group="============= COMMENTS =============")
//exit_long_comment   = input.string(defval=" ", title="Exit Long comment:  ", inline="15", group="============= COMMENTS =============")
//entry_short_comment = input.string(defval=" ", title="Entry Short comment:", inline="16", group="============= COMMENTS =============")
//exit_short_comment  = input.string(defval=" ", title="Exit Short comment: ", inline="17", group="============= COMMENTS =============")

//============================================================

//Selecting Moving average type
ma1 = mov_ave == "EMA" ? ta.ema(source_1, period_1) : ta.sma(source_1, period_1)
ma2 = mov_ave == "EMA" ? ta.ema(source_2, period_2) : ta.sma(source_2, period_2)
ma3 = mov_ave == "EMA" ? ta.ema(source_3, period_3) : ta.sma(source_3, period_3)

//============================================================
//Entry Long condition: Grouped Moving average from: (ma fast > ma middle > ma slow)
long_condition = (ma1 > ma2) and (ma2 > ma3)

//Entry Short condition: Grouped Moving average from: (ma fast < ma middle < ma slow)
short_condition = (ma1 < ma2) and (ma2 < ma3)

//============================================================

cantidad       = strategy.equity / close
comprado_long  = strategy.position_size > 0
comprado_short = strategy.position_size < 0

var long_profit_price  = 0.0
var long_stop_price    = 0.0
var short_profit_price = 0.0
var short_stop_price   = 0.0

//============================================================

//ENTRY LONG
if not comprado_long and not comprado_short and long_condition and not long_condition[1] and enRango
    strategy.entry('Long', strategy.long, qty=cantidad, comment= "Entry Long")
    if exit_TPSL
        long_profit_price := close * (1 + TP/100)
        long_stop_price   := close * (1 - SL/100)
    else
        long_profit_price := na
        long_stop_price   := na
//============================================================


//ENTRY SHORT
if not comprado_long and not comprado_short and short_condition and not short_condition[1] and enRango
    strategy.entry('Short', strategy.short, qty=cantidad, comment= "Entry Short")
    if exit_TPSL
        short_profit_price := close * (1 - TP/100)
        short_stop_price   := close * (1 + SL/100)
    else
        short_profit_price := na
        short_stop_price   := na
//============================================================


//EXIT LONG 
if comprado_long and exit_ma and long_condition[1] and not long_condition
    strategy.close('Long', comment='Exit-Long(MA)')
if comprado_long and exit_TPSL
    strategy.exit('Long', limit=long_profit_price, stop=long_stop_price, comment='Exit-Long(TP/SL)')
//============================================================


//EXIT SHORT 
if comprado_short and exit_ma and short_condition[1] and not short_condition
    strategy.close('Short', comment='Exit-Short(MA)')
if comprado_short and exit_TPSL
    strategy.exit('Short', limit=short_profit_price, stop=short_stop_price, comment='Exit-Short(TP/SL)')
//============================================================



//PLOTS
plot(ma1, linewidth=2, color=color.rgb(255, 255, 255))
plot(ma2, linewidth=2, color=color.rgb(144, 255, 252))
plot(ma3, linewidth=2, color=color.rgb(49, 167, 255))
//Plot Take Profit line
plot(plot_TPSL ? comprado_long  ? long_profit_price : comprado_short ? short_profit_price : na : na, color=color.new(color.lime, 30), style= plot.style_linebr)
//Plot StopLoss line
plot(plot_TPSL ? comprado_long ? long_stop_price : comprado_short ? short_stop_price : na : na, color=color.new(color.red, 30), style= plot.style_linebr)