Tendencia siguiendo la estrategia basada en las líneas de la EMA

El autor:¿ Qué pasa?, Fecha: 2024-02-05 14:21:18
Las etiquetas:

img

Resumen general

Esta estrategia se basa en 3 líneas EMA de diferentes períodos. Juzga la dirección de la tendencia actual por si el precio está por encima de las líneas EMA. Cuando la línea EMA a corto plazo cruza por encima de la línea EMA a largo plazo, se genera una señal de compra. Cuando la línea EMA a corto plazo cruza por debajo de la línea EMA a largo plazo, se genera una señal de venta. Esta estrategia sigue la tendencia y cierra posiciones a tiempo cuando la tendencia se invierte.

Estrategia lógica

La estrategia utiliza 3 líneas EMA, que son de 10 días, 20 días y 50 días respectivamente.

  1. Cuando tanto la EMA de 10 días como la EMA de 20 días están por encima de la EMA de 50 días, se define como una tendencia alcista;

  2. Cuando tanto la EMA de 10 días como la EMA de 20 días están por debajo de la EMA de 50 días, se define como tendencia bajista;

  3. Cuando las líneas de EMA a corto plazo (10 días y 20 días) cruzan por encima de la línea de EMA a largo plazo (50 días), se genera una señal de compra;

  4. Cuando las líneas de EMA a corto plazo (10 días y 20 días) cruzan por debajo de la línea de EMA a largo plazo (50 días), se genera una señal de venta;

  5. Mantener una posición larga durante la tendencia alcista y mantener una posición corta durante la tendencia bajista;

  6. Cerrar la posición direccional actual cuando la tendencia se invierta (la EMA a corto plazo cruza la EMA a largo plazo).

La estrategia captura ganancias cerrando las posiciones a tiempo para obtener ganancias y alternando posiciones largas y cortas.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. Las normas son simples y claras, fáciles de entender y aplicar;
  2. El uso de líneas de EMA para determinar la tendencia evita la interferencia de las fluctuaciones a corto plazo del mercado;
  3. El cierre oportuno de las posiciones para seguir la tendencia evita la expansión de las pérdidas;
  4. No hay necesidad de predecir la dirección del mercado con una alta tasa de ganancia siguiendo las tendencias.

Análisis de riesgos

Esta estrategia también presenta algunos riesgos:

  1. Durante los mercados de rango limitado, las líneas de la EMA pueden cruzarse con frecuencia, lo que resulta en altos costes de negociación por la apertura y cierre frecuentes de posiciones;

  2. La determinación de la tendencia por parte de la EMA puede fallar después de la brecha de precios, perdiendo buenas oportunidades de entrada.

Para optimizar los riesgos, se pueden utilizar algunos métodos:

  1. Las reglas de posición abierta pueden flexibilizarse adecuadamente cuando las EMA están cerca para evitar una sobre-negociación;

  2. Determinar la tendencia combinando otros indicadores para evitar el fracaso de la EMA.

Direcciones de optimización

La estrategia se puede optimizar a partir de los siguientes aspectos:

  1. Optimización de parámetros: probar diferentes combinaciones de periodos de EMA para encontrar los parámetros óptimos;

  2. Optimización de los costes de negociación: optimizar adecuadamente las reglas de posición abierta para reducir las operaciones frecuentes innecesarias;

  3. Optimización de la estrategia de stop loss: establecer un nivel de stop loss razonable para controlar una sola pérdida;

  4. Combinar otros indicadores: utilizar el MACD, el KDJ y otros indicadores para ayudar a determinar el momento óptimo de entrada.

Resumen de las actividades

En general, esta estrategia es bastante simple y práctica. Utiliza la EMA para determinar la dirección de la tendencia con una estrategia de stop loss adecuada para controlar eficazmente los riesgos. También hay espacios para la optimización. Al combinar la optimización de parámetros, la estrategia de stop loss y otros indicadores, el rendimiento de esta estrategia puede mejorarse aún más.


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



Más.