Estrategia de canal de fluctuación de línea K de avance bilateral


Fecha de creación: 2024-01-31 10:24:00 Última modificación: 2024-01-31 10:24:00
Copiar: 1 Número de Visitas: 568
1
Seguir
1617
Seguidores

Estrategia de canal de fluctuación de línea K de avance bilateral

Descripción general

La estrategia de canal de fluctuación de la línea K de ruptura bilateral determina la dirección y la intensidad de la situación mediante el cálculo de la vía media, la vía superior y la vía inferior, en combinación con los indicadores de tendencia y los indicadores de precio de medida, y establece señales de ruptura simultáneamente en ambos lados de la vía para lograr el objetivo principal de la compra y venta baja.

Principio de estrategia

El indicador central de la estrategia es el canal de fluctuación de la línea K basado en la estadística. El medio de la vía utiliza un algoritmo de medias, y la vía ascendente y descendente utiliza un método de cálculo de la amplitud de onda real promedio, capaz de capturar dinámicamente los límites de las fluctuaciones de los precios. Al mismo tiempo, la estrategia agrega las reglas de juicio del DMI y el volumen de transacciones, para evitar que las falsas rupturas traigan pérdidas.

Concretamente, cuando el precio entra en el canal desde el tren inferior, la línea +DI de DMI supera la línea -DI y la línea de referencia ADX establecida, y genera una señal de compra cuando el volumen de transacción se amplifica. Por el contrario, cuando el precio entra en el canal desde el tren superior hacia el tren inferior, la regla de juicio es la contraria a la anterior y genera una señal de venta.

Análisis de las ventajas

La mayor ventaja de esta estrategia es la captura de la dirección de las principales rupturas en los precios. El uso de un juicio de ruptura bilateral puede evitar de manera efectiva la corrección y la oscilación del mercado, reduciendo el número de paros. En comparación con la estrategia de media móvil simple, el juicio de ruptura de canal K es más adaptable a la fluctuación de los precios.

Además, la introducción de indicadores auxiliares como el DMI y el volumen de transacciones también tienen un buen efecto de filtración para evitar falsas señales. Por lo tanto, la estrategia tiene ciertas ventajas desde el punto de vista de la tasa de ganancias y pérdidas.

Análisis de riesgos

El mayor riesgo de una estrategia de ruptura bilateral es no poder juzgar la reversión de la tendencia, y si la tendencia se invierte en forma de V, el punto de parada puede ser fácilmente activado. Además, la configuración incorrecta de los parámetros también puede tener un impacto negativo en el sistema de negociación.

En cuanto al riesgo, podemos reducir el riesgo optimizando aún más los parámetros del indicador y reduciendo el stop loss. Por supuesto, el sistema de negociación nunca puede evitar completamente las pérdidas, la clave es controlar el riesgo.

Dirección de optimización

La estrategia también tiene un gran potencial de optimización, principalmente en los siguientes aspectos:

  1. Parámetros de optimización, como la longitud de DI y ADX de DMI, la configuración de la frecuencia y el múltiplo del canal K

  2. Aumentar las condiciones de filtración, como la combinación de MACD y otros indicadores para evitar falsas brechas

  3. Implementación de un seguimiento automático de stop loss para controlar aún más el riesgo

  4. Optimización de la configuración de parámetros y reglas de filtrado para diferentes variedades

Resumir

La estrategia de canal de fluctuación de la línea K de ruptura bilateral es en general un sistema de ruptura eficaz. Puede determinar con eficacia la dirección y la intensidad de las principales tendencias, y también tiene un gran potencial de optimización y control de riesgos. Si se mejora y optimiza sistemáticamente, la estrategia puede estabilizar los beneficios a largo plazo.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Original Idea by: Wunderbit Trading

//@version=5
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.int(46, 'Period', step=1)

leadLine1 = ta.ema(close, ribbon_period)
leadLine2 = ta.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.int(81, step=1, minval=1)
mult = input.float(2.5, step=0.1)

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

plot(ma, title='Middle', color=color.new(color.orange, 0))
p1 = plot(upper, title='Upper', color=color.new(color.orange, 0))
p2 = plot(lower, title='Lower', color=color.new(color.orange, 0))
fill(p1, p2, transp=90)


// 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 = ta.change(high)
    down = -ta.change(low)
    truerange = ta.rma(ta.tr, len)
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

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

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

benchmark = input.int(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.float(4.5, title='Long Take Profit 1 %', step=0.1) / 100
long_tp1_qty = input.int(15, title='Long Take Profit 1 Qty', step=1)

long_tp2_inp = input.float(20, title='Long Take Profit 2%', step=0.1) / 100
long_tp2_qty = input.int(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.float(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 = ta.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', direction=strategy.long, 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.new(color.green, 0), linewidth=1, title='1st Long Take Profit')
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.new(color.green, 0), linewidth=1, title='2nd Long Take Profit')
plot(strategy.position_size > 0 ? long_stop_level : na, style=plot.style_linebr, color=color.new(color.red, 0), linewidth=1, title='Long Stop Loss')