La estrategia bilateral para romper el canal de fluctuación de la línea K

El autor:¿ Qué pasa?, Fecha: 2024-01-31 10:24:00
Las etiquetas:

双边突破K线波动通道策略

Resumen

La estrategia de ruptura bilateral del canal de fluctuación de la línea K tiene como objetivo principal determinar la dirección y la intensidad del mercado mediante el cálculo de la trayectoria media, ascendente y descendente del canal, combinando indicadores de tendencia y indicadores de precio cuantitativos, y establecer señales de ruptura en ambos lados del canal al mismo tiempo, para lograr el objetivo principal de comprar y vender bajo.

Principios estratégicos

El indicador central de la estrategia es el canal de fluctuación de la línea K, basado en estadísticas. El canal utiliza un algoritmo de media línea, el canal de subida y bajada utiliza un método de cálculo de la amplitud de onda real promedio, capaz de capturar dinámicamente los límites de la fluctuación de los precios. Al mismo tiempo, la estrategia incorpora DMI y reglas de juicio del volumen de transacción para evitar que las falsas rupturas lleven a pérdidas.

En concreto, cuando el precio rompe el canal desde abajo, la línea +DI del DMI excede la línea -DI y la línea de referencia ADX establecida, y produce una señal de compra cuando el volumen de transacciones se amplía. Por el contrario, cuando el precio rompe el canal desde arriba hacia abajo, las reglas de juicio son opuestas a las anteriores y producen una señal de venta.

Análisis de ventajas

La mayor ventaja de esta estrategia es la captura de las principales direcciones de ruptura de los precios, y el uso de un juicio de ruptura bilateral puede evitar eficazmente el mercado de liquidación y convulsiones, reduciendo el número de pérdidas de parada. El juicio de ruptura del canal K es más adaptable a las fluctuaciones de los precios en comparación con la simple estrategia de la media móvil.

Además, la introducción de indicadores auxiliares como DMI y volumen de transacciones también sirven como un buen filtro para evitar señales falsas. 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 la estrategia de ruptura bilateral es la incapacidad de juzgar el cambio de mercado, y si el mercado se invierten tipo V, el punto de stop puede ser fácilmente activado. Además, la configuración inadecuada 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 la magnitud de las pérdidas. Por supuesto, los sistemas de negociación nunca pueden 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. Optimización de parámetros como la longitud DI y ADX del DMI, el ciclo del canal K y la configuración de múltiplos

  2. Aumentar las condiciones de filtración, como combinar con otros indicadores como el MACD para evitar falsos avances

  3. Implementar el seguimiento automático de los daños y pérdidas para controlar aún más el riesgo

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

Resumen

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


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



Más contenido