Estrategia de negociación de ruptura del canal de Donchian

El autor:¿ Qué pasa?, Fecha: 2023-11-08 12:31:56
Las etiquetas:

img

Resumen general

La estrategia de negociación de ruptura de canal Donchian juzga las tendencias de precios actuales calculando el canal de precios más altos y más bajos durante un cierto período y las operaciones largas y cortas basadas en las rupturas de canal.

Estrategia lógica

Esta estrategia construye un canal calculando el precio más alto pmax y el precio más bajo pmin en los últimos períodos históricos.

En el caso de los vehículos de las categorías M1, M2 y M3, el valor de las emisiones de CO2 se calculará en función de las emisiones de CO2 de los vehículos de las categorías M2 y M3.

El valor de las emisiones de CO2 de los vehículos de las categorías M1 y N2 será el valor de las emisiones de CO2 de los vehículos de las categorías M2 y N3.

donde %Dev es predeterminado para 13.

Una señal larga se genera cuando el precio rompe el rieles superior. Una señal corta se genera cuando el precio rompe el rieles inferior.

La lógica específica para generar señales comerciales es:

  1. boundup = high > yh para determinar si el carril superior está roto

  2. bounddn = low < yl para determinar si el carril inferior está roto

  3. upsign = sma(bounddn, 2) == 1 utiliza sma de bounddn para determinar la ruptura persistente del carril inferior

  4. dnsign = sma(boundup, 2) == 1 utiliza sma de boundup para determinar la ruptura persistente del carril superior

  5. Exitup = dnsign ruptura del carril superior genera la señal de salida

  6. salidadn = ruptura de la señal superior del carril inferior genera la señal de salida

  7. si la ruptura de la señal superior del carril inferior genera una señal larga

  8. si la ruptura de la señal del carril superior genera una señal corta

La estrategia también establece los horarios de inicio y finalización de las operaciones para evitar posiciones overnight innecesarias.

Ventajas de la estrategia

  1. Utiliza el canal Donchian para determinar tendencias, buenos resultados de backtest

  2. Tiene señales largas y cortas, permite el comercio bidireccional

  3. Utiliza SMA para filtrar señales y evitar malas operaciones

  4. Las pérdidas de suspensión opcionales para controlar los riesgos

  5. Establecer los horarios de inicio y de finalización de las operaciones para evitar los riesgos durante la noche

Riesgos de la estrategia

  1. Sensible a los parámetros de historial y percentDev, necesita optimización para diferentes productos

  2. Puede generar señales falsas en mercados de rango

  3. No tiene en cuenta la gestión de pedidos, puede afectar a la rentabilidad en el comercio en vivo

  4. No tiene en cuenta el tamaño de las posiciones, los riesgos de posiciones de gran tamaño

  5. No tiene en cuenta la gestión del dinero, necesita un capital comercial razonable

Ideas para mejorar

  1. Optimice los parámetros de historial y percentDev para diferentes productos

  2. Añadir filtros para evitar señales falsas en los mercados variados

  3. Añadir módulo de dimensionamiento de posición para controlar el tamaño de posición única

  4. Añadir módulo de gestión de dinero para limitar el tamaño total de la posición

  5. Añadir gestión de pedidos para una ejecución óptima de pedidos

Conclusión

La estrategia de ruptura de canal Donchian utiliza rupturas de canal para determinar tendencias y señales comerciales, con buenos resultados de backtest y capacidad para operar tanto largo como corto. Sin embargo, existen riesgos con respecto a la optimización de parámetros, filtros, tamaño de posición, administración de dinero, administración de pedidos, etc. Se necesitan mejoras adecuadas en estas áreas antes de una negociación estable en vivo. En general, es una estrategia tradicional de seguimiento de tendencias, y con optimizaciones puede convertirse en una estrategia comercial cuantitativa confiable.


/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////
//  Copyright by AlexInc v1.0 02/07/2018  @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to 
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)

needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")


fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

bodymin = min( open, close)
bodymax = max(open, close)

pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)

yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin

plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)

//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)


exitup = dnsign
exitdn = upsign

lot = strategy.equity / close * capital / 100


xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na

stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])

stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])

pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
    stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
    stop_level_short = strategy.position_avg_price + nLoss
if pos == 0    
    stop_level_long = bodymin - nLoss
    stop_level_short = bodymax + nLoss

//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)

if upsign
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dnsign
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

if true
    strategy.close_all()


//if strategy.position_size != 0
//    strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
//    strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)

Más.