Estrategia de seguimiento de tendencias basada en la media móvil EMA


Fecha de creación: 2024-02-05 14:21:18 Última modificación: 2024-02-05 14:21:18
Copiar: 0 Número de Visitas: 629
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en la media móvil EMA

Descripción general

La estrategia se basa en el promedio de EMA de 3 períodos diferentes para determinar la dirección de la tendencia actual al determinar si el precio está por encima del promedio de EMA. Se genera una señal de compra cuando la línea de EMA corta atraviesa la línea de EMA larga y se genera una señal de venta cuando la línea de EMA corta atraviesa la línea de EMA larga. La estrategia sigue la tendencia y se cierra en el momento en que la tendencia se vuelve.

Principio de estrategia

La estrategia utiliza tres promedios de EMA, las líneas de 10 días, 20 días y 50 días respectivamente. Su regla de juicio es:

  1. Se define como una tendencia al alza cuando la línea 10 y la línea 20 están a la vez por encima de la línea 50

  2. Se define como una tendencia a la baja cuando la línea EMA de 10 y la línea EMA de 20 están a la vez por debajo de la línea EMA de 50;

  3. La señal de compra se genera cuando la línea de corto plazo de la EMA (la línea de 10 y 20 días) se cruza con la línea de largo plazo de la EMA (la línea de 50 días);

  4. La señal de venta se genera cuando la línea de corto plazo de la EMA (la línea de 10 y 20 días) atraviesa la línea de largo plazo de la EMA (la línea de 50 días);

  5. Las posiciones de más cabeza en tendencias al alza y las posiciones de más cabeza en tendencias a la baja;

  6. Cuando la tendencia cambia, las posiciones de la dirección de la señal actual se aplanan (la línea corta de la EMA se interpone con la línea larga).

La estrategia de capture profit es una estrategia de captura de ganancias, que consiste en tomar turnos para operar en el mercado de divisas a través de la captura de ganancias.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Las reglas son simples, claras, fáciles de entender y aplicar.
  2. Utiliza el promedio de la EMA para determinar la dirección de la tendencia y evitar ser perturbado por las fluctuaciones de corto plazo del mercado.
  3. La tendencia es que los inversores de las empresas de seguros de vida y de los bancos de seguros de vida y de las empresas de seguros de vida y de las empresas de seguros de vida y de las empresas de seguros de vida y de las empresas de seguros de vida.
  4. No es necesario predecir la dirección de la situación, seguir la tendencia y tener una alta tasa de éxito.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. En el momento de la liquidación del mercado, las penetraciones entre las medias de las EMA son frecuentes y pueden generar costos de negociación al abrir posiciones cerradas con frecuencia.
  2. El efecto de la tendencia de la evaluación de la EMA después del salto de la operación se verá afectado, y es posible que se pierda una buena oportunidad para abrir posiciones.

Los riesgos mencionados pueden ser optimizados de la siguiente manera:

  1. La flexibilidad de las reglas de apertura de posiciones en EMAs más pequeñas es adecuada para evitar operaciones demasiado frecuentes;
  2. En combinación con otros indicadores para determinar tendencias, evitar que la EMA juzgue ineficaz.

Dirección de optimización

La estrategia puede ser optimizada en las siguientes direcciones:

  1. Optimización de parámetros. Se pueden probar combinaciones de parámetros de diferentes períodos de EMA para encontrar el mejor parámetro.

  2. Optimización de los costos de transacción. Optimización adecuada de las reglas de apertura de posición para reducir la frecuencia innecesaria de las transacciones.

  3. Optimización de la estrategia de stop loss. Establecer un nivel de stop loss razonable para controlar las pérdidas individuales.

  4. En combinación con otros indicadores. Utiliza otros indicadores como MACD, KDJ y otros para ayudar a juzgar y optimizar el tiempo de ingreso.

Resumir

La estrategia en general es simple y práctica. Utiliza la EMA para determinar la dirección de la tendencia, con una estrategia de stop loss adecuada para controlar el riesgo de manera efectiva. Al mismo tiempo, existe un espacio de optimización, si se combina con la optimización de parámetros, la estrategia de stop loss y otros indicadores, etc., la eficacia de la estrategia también tiene un gran espacio de mejora.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-28 00:00:00
end: 2024-01-31 04:00:00
period: 45m
basePeriod: 5m
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/
// © mattehalen

//@version=4
//study("EMA 10,20 59",overlay=true)
strategy("EMA 10,20 59",overlay=true)
infoBox     = input(true, title="infoBox", type=input.bool)
infoBox2    = input(false, title="infoBox2", type=input.bool)
BuySellSignal_Bool = input(false, title="Buy & SellSignal", type=input.bool)
infoBoxSize = input(title="infoBoxSize", defval=size.large, options=[size.auto, size.tiny, size.small, size.normal, size.large, size.huge])
ema1Value   = input(10)
ema2Value   = input(20)
ema3Value   = input(59)
maxLoss = input(3000)
ema1        = ema(close,ema1Value)
ema2        = ema(close,ema2Value)
ema3        = ema(close,ema3Value)
objcnt      = 0
buyTitle    = tostring(close[1])
myProfit    = float(0)

plot(ema1,title="ema1",color=color.red,linewidth=2)
plot(ema2,title="ema2",color=color.green,linewidth=2)
plot(ema3,title="ema3",color=color.black,linewidth=2)

Buytrend = (ema1 and ema2 > ema3) and (ema1[1] and ema2[1] > ema3[1])
BarssinceBuyTrend = barssince(Buytrend)
BarssinceSellTrend = barssince(not Buytrend)
closeAtBuyTrend = close[1]
bgcolor(Buytrend ? color.green : color.red,transp=70)

BuySignal = Buytrend and not Buytrend[1] and BuySellSignal_Bool

BuySignalOut = Buytrend and (crossunder(ema1,ema2)) and BuySellSignal_Bool
BarssinceBuy = barssince(BuySignal)
bgcolor(BuySignal ? color.green : na , transp=30)
bgcolor(BuySignalOut ? color.black : na , transp=30)
plot(BarssinceBuy,title="BarssinceBuy",display=display.none)


SellSignal = not Buytrend and Buytrend[1] and BuySellSignal_Bool
SellSignalOut = not Buytrend and (crossover(ema1,ema2)) and BuySellSignal_Bool
BarssinceSell = barssince(SellSignal)
bgcolor(SellSignal ? color.red : na , transp=30)
bgcolor(SellSignalOut ? color.black : na , transp=30)
plot(BarssinceSell,title="BarssinceSell",display=display.none)


buyProfit   = float(0)
cntBuy      =0
sellProfit  = float(0)
cntSell     =0
buyProfit   := Buytrend and not Buytrend[1]? nz(buyProfit[1]) + (close[BarssinceBuyTrend[1]]-close) : nz(buyProfit[1])
cntBuy      := Buytrend and not Buytrend[1]? nz(cntBuy[1]) + 1: nz(cntBuy[1])
sellProfit  := not Buytrend and Buytrend[1]? nz(sellProfit[1]) + (close-close[BarssinceSellTrend[1]]) : nz(sellProfit[1])
cntSell     := not Buytrend and Buytrend[1]? nz(cntSell[1]) + 1 : nz(cntSell[1])
totalProfit = buyProfit + sellProfit

// if (Buytrend and not Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceBuyTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuyTrend[1]]) + "\n" + "Profit = "+tostring(close[BarssinceBuyTrend[1]]-close) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.red,size=infoBoxSize)
// if (not Buytrend and Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceSellTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSellTrend[1]]) + "\n" + "Profit = "+tostring(close-close[BarssinceSellTrend[1]]) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.green,size=infoBoxSize)

// if (BuySignalOut and not BuySignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceBuy[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.purple,size=infoBoxSize
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.lime,size=infoBoxSize)
// if (SellSignalOut and not SellSignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceSell[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.purple,size=infoBoxSize)
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.fuchsia,size=infoBoxSize)


// l2 = label.new(bar_index, na, 'buyProfit in pip = '+tostring(buyProfit)+"\n"+  'cntBuy = '+tostring(cntBuy) +"\n"+  'sellProfit in pip = '+tostring(sellProfit)+"\n"+  'cntSell = '+tostring(cntSell) +"\n"+  'totalProfit in pip = '+tostring(totalProfit)     , 
//   color=totalProfit>0 ? color.green : color.red, 
//   textcolor=color.white,
//   style=label.style_labeldown, yloc=yloc.abovebar,
//   size=size.large)

// label.delete(l2[1])



//--------------------------------------------------
//--------------------------------------------------
if (Buytrend)
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

//if BuySignalOut
   // strategy.close("long", comment = "Exit Long")
if (not Buytrend)
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
//if SellSignalOut
    // Force trade exit.
    //strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------