Estrategia de canal Keltner basada en tendencias


Fecha de creación: 2023-11-03 16:59:39 Última modificación: 2023-11-03 16:59:39
Copiar: 0 Número de Visitas: 795
1
Seguir
1621
Seguidores

Estrategia de canal Keltner basada en tendencias

Descripción general

La estrategia se basa en tres indicadores principales: el indicador de tendencia, el canal de Keltner y el indicador DM.

El indicador de tendencia se compone de SMA y EMA. Cuando la EMA atraviesa la SMA, se confirma la entrada en la tendencia. El canal Keltner se utiliza para determinar los precios de apertura y cierre de Candle. El indicador DM se utiliza para determinar la dirección de la pluralidad.

Se puede hacer más si se cumplen los siguientes requisitos de ingreso:

  1. El EMA sube por encima del SMA y confirma la tendencia alcista
  2. El precio de apertura de la vela está en la parte superior de la parte superior, el precio de cierre está en el interior del canal
  3. Indicador DM mayor que la línea de referencia establecida

La estrategia consiste en establecer dos paradas y una parada. Se puede considerar el uso de paradas de seguimiento para obtener más ganancias.

Principio de estrategia

Juzgar las tendencias

La dirección de la tendencia se determina a través de la EMA y la SMA. El parámetro EMA es 46, el parámetro SMA es 46. Cuando el EMA cruza la SMA, indica que está en una tendencia alcista.

El paso de Keltner

El canal de Keltner contiene tres líneas: la línea media, la línea superior y la línea inferior. La línea media es el SMA del precio de cierre, con una longitud de 81. La línea superior y la línea inferior se encuentran por encima y por debajo de la línea media respectivamente.

Los canales Keltner son usados principalmente para determinar si los precios están dentro de los canales, y si los precios están cruzando los canales.

Indicadores de DM

El indicador DM contiene tres líneas: ADX, +DI y -DI. +DI mide la fuerza ascendente, -DI mide la fuerza descendente. ADX representa un indicador de tendencia promedio, que refleja la fuerza de la tendencia.

Aquí el parámetro ADX es 10, el parámetro DI es 19. Cuando se usa la línea de referencia establecida en la línea +DI (el parámetro predeterminado es el 27), se indica que la tendencia es fuerte y es adecuada para hacer más.

Análisis de las ventajas

La estrategia combina tendencias, canales y indicadores de fuerza y debilidad para determinar el movimiento de los precios y la dirección de la pluralidad. Tiene las siguientes ventajas:

  1. El análisis de tendencias es relativamente preciso, lo que evita operaciones de contrarreloj.

  2. El canal de Keltner es claramente visible, formando puntos de apoyo y presión.

  3. El indicador DM puede medir la fuerza de sobrevuelo para asegurar que la dirección de sobrevuelo es correcta.

  4. Las condiciones de la estrategia son rigurosas y pueden filtrar efectivamente las falsas rupturas de rebote.

  5. Establezca un punto de parada y pérdida para aprovechar las oportunidades de ganancias.

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. La tendencia puede cambiar, la EMA puede bajar por debajo de la SMA y hay que tener cuidado de salir a tiempo.

  2. En condiciones de fuerza, el canal puede fallar y no puede ser considerado como un punto de presión de soporte estricto.

  3. El indicador DM puede emitir una señal errónea, que debe ser juzgada en combinación con la tendencia de los precios.

  4. La falsa brecha puede desencadenar una entrada, pero pronto vuelve a caer, y se debe establecer un stop loss razonable.

  5. Los puntos de parada y pérdida necesitan ser optimizados continuamente para adaptarse a los cambios en el mercado.

Dirección de optimización

Se puede optimizar aún más en los siguientes aspectos:

  1. Ajustar los parámetros y probar la eficacia de los diferentes métodos para determinar las tendencias.

  2. Optimización de los parámetros del canal para acercarlo al rango de fluctuación real.

  3. Prueba diferentes combinaciones de parámetros de DM para elegir el mejor.

  4. Configuración de diferentes condiciones de entrada, como un filtro de volumen de transacciones combinado.

  5. Optimización de las estrategias de stop loss, como el seguimiento de las pérdidas para obtener más ganancias.

  6. Seleccionar la mejor combinación de parámetros para las diferentes variedades.

Resumir

La estrategia utiliza una combinación de indicadores para determinar la dirección de la tendencia, los niveles de presión de soporte y la fuerza de los polos, lo que permite capturar la tendencia y controlar el riesgo. Sin embargo, se debe prestar atención al riesgo y optimizar los parámetros para adaptarse a los cambios en el mercado. En general, la estrategia tiene una gran utilidad.

Código Fuente de la Estrategia
/*backtest
start: 2022-10-27 00:00:00
end: 2023-11-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Original Idea by: Wunderbit Trading

//@version=4
strategy("Keltner Channel ETH/USDT 1H", overlay=true, initial_capital=1000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.07)


/// TREND
ribbon_period = input(46, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

// p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)

//Upward Trend
UT=leadLine2 < leadLine1
DT=leadLine2>leadLine1

///////////////////////////////////////INDICATORS

// KELTNER //
source       = close
useTrueRange = input(true)
length       = input(81, step=1, minval=1)
mult         = input(2.5, step=0.1)

// Calculate Keltner Channel
ma      = sma(source, length)
range   = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult

plot(ma, title="Middle", color=color.orange)
p1=plot(upper, title="Upper", color=color.orange)
p2=plot(lower, title="Lower", color=color.orange)
fill(p1,p2)


// DMI INDICATOR //
adxlen = 10 // input(10, title="ADX Smoothing")
dilen = input(19, title="DI Length")
keyLevel = 23// input(23, title="key level for ADX")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)

benchmark=input(title="DMI Benchmark", defval=27, minval=1,step=1)

// plot(sig, color=color.red, title="ADX")
// plot(up, style=plot.style_histogram, color=color.green, title="+DI")
// plot(down, style=plot.style_histogram, color=color.red, title="-DI")
// plot(keyLevel, color=color.white, title="Key Level")

///////////////////////////////////////////////////////////


////////////////////////////////////////////////////Component Code Start

testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
///// Component Code Stop //////////////////////////////////////////

//////////////// STRATEGY EXECUTION //////////////////////////

//LONG SET UP
// Take Profit / Stop Loss
long_tp1_inp = input(4.5, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(15, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(20, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(100, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)

long_sl_inp = input(4, title='Long Stop Loss %', step=0.1)/100
long_stop_level = strategy.position_avg_price * (1 - long_sl_inp)


// STRATEGY CONDITION
// LONG
entry_long = ((open > lower and open < upper) and close > upper) and up > down and up > benchmark //  and volume[0] > volume[1]
entry_price_long=valuewhen(entry_long,close,0)
SL_long = entry_price_long * (1 - long_sl_inp)
exit_long = (close < lower) or low < SL_long


// STRATEGY EXECUTION
if testPeriod()

    // LONG
    if UT
        strategy.entry(id="Long", long=true, when=entry_long, comment = "INSERT ENTER LONG COMMAND")
    strategy.exit("TP1","Long", qty_percent=long_tp1_qty, limit=long_take_level_1) // PLACE TAKE PROFIT IN WBT BOT SETTINGS 
    strategy.exit("TP2","Long", qty_percent=long_tp2_qty, limit=long_take_level_2) // PLACE TAKE PROFIT IN WBT BOT SETTINGS
    strategy.close(id="Long", when=exit_long, comment= "INSERT EXIT LONG COMMAND")


//PLOT FIXED SLTP LINE
// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")