Donchian Channel y Larry Williams Estrategia de índice de comercio grande

El autor:¿ Qué pasa?, Fecha: 2024-04-12 17:27:25
Las etiquetas:

img

Resumen general

Esta estrategia combina tres indicadores - Canal de Donchian, Larry Williams Large Trade Index (LWTI) y Volume Moving Average para generar señales comerciales. Ingresa en una posición larga cuando el precio se rompe por encima de la banda superior del Canal de Donchian, LWTI es verde y el volumen es mayor que el promedio móvil. Ingresa en una posición corta cuando el precio se rompe por debajo de la banda inferior del Canal de Donchian, LWTI es rojo y el volumen es mayor que el promedio móvil. La estrategia sale de las posiciones cuando el precio alcanza los niveles de stop loss o take profit, o cuando el precio regresa a la banda media del Canal de Donchian.

Principio de la estrategia

  1. Canal de Donchian: Una señal larga se genera cuando el precio se rompe por encima de la banda superior, y una señal corta se genera cuando el precio se rompe por debajo de la banda inferior.
  2. Larry Williams Large Trade Index: Las posiciones largas solo están permitidas cuando el color LWTI es verde, y las posiciones cortas solo están permitidas cuando es rojo.
  3. Volumen: Las entradas solo están permitidas cuando el volumen actual es mayor que la media móvil del volumen.
  4. Contador comercial: Para evitar entradas repetidas en la misma dirección de tendencia, solo se permiten nuevas entradas después de que el precio cruce la banda media del Canal de Donchian.
  5. Las operaciones de venta y venta de los activos de la entidad que no sean objeto de una operación de inversión se consideran operaciones de venta y venta de activos de la entidad que no sean objeto de una operación de venta y venta.

Ventajas estratégicas

  1. La combinación de múltiples indicadores para confirmar las señales de negociación puede filtrar eficazmente las señales falsas y mejorar la calidad de la señal.
  2. La estrategia se basa en los resultados obtenidos por los inversores y los inversores.
  3. El contador de operaciones evita las entradas repetidas en la misma tendencia, controlando la frecuencia de operaciones.
  4. La tasa de riesgo-recompensación basada en el beneficio obtenido - El establecimiento del nivel de beneficio obtenido basado en una tasa de riesgo-recompensación predeterminada permite que el potencial de ganancia supere el riesgo.

Riesgos estratégicos

  1. Riesgo de parámetros - El rendimiento de la estrategia se ve muy afectado por diferentes configuraciones de parámetros, lo que requiere una optimización basada en diferentes características y plazos del mercado.
  2. Riesgo de mercado inestable - En condiciones de mercado inestable, las frecuentes fluctuaciones pueden hacer que la estrategia entre y salga de posiciones con frecuencia, lo que resulta en un bajo rendimiento.
  3. El riesgo de tendencia - Si la tendencia carece de persistencia, pueden producirse entradas y salidas frecuentes, lo que conduce a mayores pérdidas.
  4. Riesgo de cisne negro - En condiciones extremas de mercado, los indicadores pueden fallar, lo que resulta en un bajo rendimiento de la estrategia.

Direcciones para la optimización de la estrategia

  1. Optimizar los parámetros para diferentes instrumentos y plazos para encontrar las mejores combinaciones de parámetros.
  2. Añadir condiciones de filtrado de tendencias, como el uso de medias móviles o indicadores de impulso, para ingresar solo posiciones cuando la tendencia sea clara, reduciendo el número de operaciones en entornos agitados.
  3. Considere el uso de estrategias de ruptura de rango para condiciones de mercado agitadas.
  4. Optimizar la lógica de stop loss y take profit mediante la introducción de trailing stops u otros métodos.
  5. Para las condiciones extremas del mercado, considere la introducción de una gestión de fondos fijos y límites máximos de extracción.

Resumen de las actividades

La estrategia Donchian Channel y Larry Williams Large Trade Index es una estrategia de trading clásica de seguimiento de tendencias. Captura la dirección de tendencia utilizando el canal Donchian, filtra las señales utilizando LWTI, volumen y otros indicadores, y emplea stop loss dinámico y take profit con un estricto control de riesgos. En general, es un marco de estrategia con el potencial de rendimientos constantes. Sin embargo, es importante señalar que la estrategia es sensible a los parámetros y funciona mal en condiciones de mercado agitadas. Se recomienda para su uso en mercados de tendencia. En la aplicación práctica, es necesaria una mayor optimización de los parámetros y la lógica basada en los instrumentos comerciales y las características del mercado, junto con una estricta gestión del dinero, para lograr buenos y estables rendimientos.


/*backtest
start: 2024-04-04 00:00:00
end: 2024-04-11 00:00:00
period: 1m
basePeriod: 1m
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/
// © DillonGrech
//
//This is a Donchian Channel Trading Strategy which was found through the 
//YouTube channel TradingLab. 
//
//This Strategy uses the Donchian Channel, Larry Williams Large Trade Index,
//and Volume with Moving Average indicators for long and short trades.
//
//Strategy will enter based off indicator entry conditions and will not
//re-enter a trade until the price crosses through the Donchian Channel
//basis line (to prevent re-entering trades in same trend). Strategy will
//exit at stop loss or take profit, or when price crosses donchian basis.
//
//The strategy has been coded by Dillon Grech as part of his YouTube channel
//and a detailed video can be found on his channel at:
//https://www.youtube.com/c/DillonGrech
//https://www.youtube.com/watch?v=5IFe2Vjf61Y
//Source code and template files can be found on his GitHub at:
//https://github.com/Dillon-Grech
//==============================================================================
//@version=5
strategy("Donchian Channel Strategy [DillonGrech]", overlay=true, margin_long=100, margin_short=100)

//==============================================================================
//DONCHIAN CHANNEL
//==============================================================================
//Allow user to select whether they would like to use indicator
Don_Input = input(true, title='Use Donchian Channel?', group = "Donchian Settings")

//Indicator
don_length = input.int(96, minval = 1, group = "Donchian Settings")
don_lower  = ta.lowest(don_length)
don_upper  = ta.highest(don_length)
don_basis  = math.avg(don_upper, don_lower)
plot(don_basis,     "Don Basis", color = #FF6D00)
u = plot(don_upper, "Don Upper", color = #2962FF)
l = plot(don_lower, "Don Lower", color = #2962FF)
fill(u, l, color = color.rgb(33, 150, 243, 95), title = "Background")

//Conditions - Enter trades when there is a cross of price and previous donchian channel value
Ind_1_L = Don_Input == false ? false : ta.crossover(close,don_upper[1])
Ind_1_S = Don_Input == false ? false : ta.crossunder(close,don_lower[1])

//==============================================================================
//LARRY WILLIAMS LARGE TRADE INDEX (LWTI) - LOXX
//==============================================================================
//Allow user to select whether they would like to use indicator
LWTI_Input = input(true, title='Use LWTI?', group = "LWTI Settings")

//Indicator
greencolor = #2DD204
redcolor = #D2042D 

variant(type, src, len) =>
    sig = 0.0
    if type == "SMA"
        sig := ta.sma(src, len) 
    else if type == "EMA"
        sig := ta.ema(src, len) 
    else if type == "WMA"
        sig := ta.wma(src, len)   
    else if type == "RMA"
        sig := ta.rma(src, len)  
    sig
    
LWTI_per = input.int(25, "Period", group = "LWTI Settings")
LWTI_smthit = input.bool(false, "Smooth LWPI?", group = "LWTI Settings")
LWTI_type = input.string("SMA", "Smoothing Type", options = ["EMA", "WMA", "RMA", "SMA"], group = "LWTI Settings")
LWTI_smthper = input.int(20, "Smoothing Period", group = "LWTI Settings")

LWTI_ma = ta.sma(close - nz(close[LWTI_per]), LWTI_per)
LWTI_atr = ta.atr(LWTI_per)
LWTI_out = LWTI_ma/LWTI_atr * 50 + 50
LWTI_out := LWTI_smthit ? variant(LWTI_type, LWTI_out, LWTI_smthper) : LWTI_out

LWTI_colorout = LWTI_out > 50 ? greencolor : redcolor

//Conditions - Enter on color of indicator
Ind_2_L = LWTI_Input == false ? true : LWTI_colorout == greencolor
Ind_2_S = LWTI_Input == false ? true : LWTI_colorout == redcolor

//==============================================================================
//VOLUME INDICATOR
//==============================================================================
//Allow user to select whether they would like to use indicator
Vol_Input = input(true, title='Use Volume?', group = "Volume Settings")

//Indicator
Vol_Ma_Period = input.int(30,"Volume MA Period", group = "Volume Settings")
Vol_Ma = ta.sma(volume,Vol_Ma_Period)

//Conditions - Enter when volume is greater than moving average
Ind_3_L = Vol_Input == false ? true : volume > Vol_Ma
Ind_3_S = Vol_Input == false ? true : volume > Vol_Ma

//==============================================================================
//DONCHIAN CHANNEL TRADE COUNTER
//==============================================================================
//Stores whether a trade has been taken, and resets when there is a cross of price and donchain basis
Trade_Counter = float(0)
Don_Basis_Cross = ta.cross(don_basis[1], close)
if strategy.position_size!=0
    Trade_Counter := 1
else if Don_Basis_Cross
    Trade_Counter := 0
else 
    Trade_Counter := Trade_Counter[1]

Plot_Trade_Counter = input.bool(false, "Plot Trade Position Counter?", group = "Plot Settings")
plotchar(Plot_Trade_Counter and Trade_Counter == 0 ? true : false, color = na, text = '0')
plotchar(Plot_Trade_Counter and Trade_Counter == 1 ? true : false, color = na, text = '1')

//==============================================================================
//ENTRY CONDITIONS
//==============================================================================
entry_long  = strategy.position_size<=0 and Ind_1_L and Ind_2_L and Ind_3_L and Trade_Counter[1] == 0
entry_short = strategy.position_size>=0 and Ind_1_S and Ind_2_S and Ind_3_S and Trade_Counter[1] == 0

if(entry_long)
    strategy.entry("Long Entry", strategy.long)
if(entry_short)
    strategy.entry("Short Entry", strategy.short)

//==============================================================================
// TAKE PROFIT AND STOP LOSS CONDITIONS
//==============================================================================
Stop_Input   = input(true, title='Use Stop Loss?', group = "Risk Settings")
Profit_Input = input(true, title='Use Take Profit?', group = "Risk Settings")
Profit_RR = input.float(2.0,"Risk Reward Profit Target", group = "Risk Settings")

//Store Price on new entry signal
Entry_Price = strategy.opentrades.entry_price(strategy.opentrades - 1)

//Store Donchain Channel Basis value on new entry signal
Entry_Don_Basis = float(0.0)
if strategy.position_size == 0 or entry_long or entry_short
    Entry_Don_Basis := don_basis
else
    Entry_Don_Basis := Entry_Don_Basis[1]

//Get stop loss distance
Stop_Distance = math.abs(Entry_Price - Entry_Don_Basis)*1.02

//For Long Trades, find the stop loss level
Stop_L = float(0.0)
if Stop_Input == true
    Stop_L := Entry_Price - Stop_Distance
else
    na

//For Long Trades, find the profit level
Profit_L = float(0.0)
if Profit_Input == true
    Profit_L := Entry_Price + Stop_Distance*Profit_RR
else
    na

//For Short Trades, find the stop loss level
Stop_S = float(0.0)
if Stop_Input == true
    Stop_S   := Entry_Price + Stop_Distance
else
    na

//For Short Trades, find the profit level
Profit_S = float(0.0)
if Profit_Input == true
    Profit_S := Entry_Price - Stop_Distance*Profit_RR
else
    na

//Plot profit and stop loss levels for long and short trades
plot(strategy.position_size > 0 ? Profit_L : na, color=color.lime, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size > 0 ? Stop_L : na,   color=color.red,  style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? Profit_S : na, color=color.lime, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? Stop_S : na,   color=color.red,  style=plot.style_linebr, linewidth=2)

//==============================================================================
//EXIT ORDERS
//==============================================================================
//Exit long trades
if Stop_Input
    strategy.exit(id = 'Exit Long', from_entry ='Long Entry', comment='Long Stop',  stop = Stop_L)

if Profit_Input
    strategy.exit(id = 'Exit Long', from_entry ='Long Entry', comment='Long Profit', limit = Profit_L)

//Exit short trades
if Stop_Input
    strategy.exit(id = 'Exit Short', from_entry ='Short Entry', comment='Short Stop', stop = Stop_S)

if Profit_Input
    strategy.exit(id = 'Exit Short', from_entry ='Short Entry', comment='Short Profit', limit = Profit_S)

//==============================================================================
//CLOSE ORDERS
//==============================================================================
exit_long  = close < don_basis
exit_short = close > don_basis

if(exit_long)
    strategy.close("Long Entry", comment='Long Close', qty_percent=100)
if(exit_short)
    strategy.close("Short Entry", comment='Short Close', qty_percent=100)

Más.