Estrategia de seguimiento de tendencias en múltiples marcos temporales


Fecha de creación: 2024-01-26 15:54:45 Última modificación: 2024-01-26 15:54:45
Copiar: 0 Número de Visitas: 614
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias en múltiples marcos temporales

Descripción general

La estrategia forma los principales canales de precios, que representan la dirección de la tendencia a largo plazo, calculando los precios máximos y mínimos en diferentes períodos de tiempo ((50 bar y 200 bar)). La estrategia determina la dirección de la tendencia a corto plazo combinando las líneas de señal rápida y la línea de señal lenta. La estrategia sugiere la entrada cuando la dirección de la tendencia a largo plazo coincide.

Principio de estrategia

En primer lugar, mediante el cálculo de los máximos y mínimos de los últimos 50 bares, y los máximos y mínimos de los últimos 200 bares, se forman dos canales de precios que representan la dirección de la tendencia a largo plazo.

En segundo lugar, calcular los precios máximos y mínimos de los últimos 7 bares para determinar la tendencia a corto plazo de las vías de señales rápidas; calcular los precios máximos y mínimos de los últimos 20 bares para determinar la tendencia a corto plazo de las vías de señales lentas.

Finalmente, cuando las direcciones de los canales de señales rápidas, lentas y de los canales de precios a largo plazo coinciden, se sugiere una señal de entrada. Por ejemplo, si todos los canales están en tendencia alcista, se sugiere comprar; si todos los canales están en tendencia bajista, se sugiere vender.

Análisis de las ventajas

La mayor ventaja de esta estrategia reside en la capacidad de identificar la dirección de una tendencia unificada a largo plazo. Con la confirmación de canales de precios en diferentes períodos de tiempo, se puede evitar de manera efectiva ser confundido por el ruido del mercado a corto plazo.

Además, la estrategia utiliza un juicio de múltiples marcos de tiempo, que no cambia fácilmente la señal incluso si se produce una reversión de precios a corto plazo, lo que garantiza la estabilidad de la señal.

Análisis de riesgos

El principal riesgo de esta estrategia es que cuando la tendencia a largo plazo se invierte, la generación de señales se retrasa debido a la necesidad de confirmar varias vías de ciclo de tiempo. En este caso, el seguimiento ciego puede causar la expansión de las pérdidas.

Además, no es amigable con las operaciones de alta frecuencia y no puede reaccionar rápidamente a las fluctuaciones de precios a corto plazo. Si se encuentra en una situación de agitación, la configuración inadecuada de las condiciones de parada puede causar grandes pérdidas.

Dirección de optimización

Se puede considerar la inclusión de una estrategia de stop loss dinámica de adaptación, que puede controlar el riesgo de manera efectiva cuando el precio rompe una cierta proporción en la dirección negativa.

Además, se pueden añadir más canales de precios de diferentes longitudes para que la votación decida la señal final, lo que mejora la precisión de los juicios.

O bien, los algoritmos de aprendizaje automático optimizan los parámetros de cada canal para que se ajusten mejor al entorno actual del mercado.

Resumir

La idea general de la estrategia es clara y fácil de entender, a través de un canal de precios de marco de tiempo múltiple para juzgar la tendencia del mercado, puede eliminar el ruido del mercado a corto plazo. Sin embargo, el manejo de la inversión y el control del riesgo deben ser reforzados. Si se combina con la estrategia de parada de pérdidas y la optimización de los parámetros, se puede aumentar aún más la estabilidad de la estrategia y la eficacia en la batalla.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © ZoomerXeus

//@version=4
strategy("Swing High Low Price Channel V.1", overlay=true)

//========================= variable =================================//
dead_channel_source = input(title="Main swing channel source", defval="H/L", options=["H/L"])
fast_signal_length = input(title="Fast Slow Length", type=input.integer, defval=7, maxval=49, minval=1)
slow_signal_length = input(title="Slow Slow Length", type=input.integer, defval=20, maxval=49, minval=1)
is_show_only_dead_channel = input(title="Show main channel only", defval=true)
main_channel_width = input(title="Main line width", defval=2, minval=1)
signal_channel_width = input(title="Signal line width", defval=1, minval=1)

//========================= indicator function =================================//
dead_cross_high_50 = highest(high, 50) 
dead_cross_high_200 = highest(high, 200) 
//========================================
dead_cross_low_50 = lowest(low, 50) 
dead_cross_low_200 = lowest(low, 200) 
//========================================
medain_dead_cross_50 = ((dead_cross_high_50-dead_cross_low_50)*0.5)+dead_cross_low_50
medain_dead_cross_200 = ((dead_cross_high_200-dead_cross_low_200)*0.5)+dead_cross_low_200


//========================================
fasthighest = highest(high, fast_signal_length)
fastlowest = lowest(low, fast_signal_length)
//========================================
slowhighest = highest(high, slow_signal_length)
slowlowest = lowest(low, slow_signal_length)
//========================================

    
//========================= plot =================================//
plot(dead_channel_source == "H/L" ? dead_cross_high_50 : na,title="50 bar highest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_high_200 : na,title="200 bar highest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_50 : na,title="50 bar lowest", color=color.red, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? dead_cross_low_200 : na,title="200 bar lowest", color=color.aqua, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_200 : na,title="200 bar middle lowest", color=color.orange, linewidth=main_channel_width)
plot(dead_channel_source == "H/L" ? medain_dead_cross_50 : na,title="50 bar middle lowest", color=color.lime, linewidth=main_channel_width)
//===========================================
plot(is_show_only_dead_channel == false ? fasthighest : na,title="fast signal highest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? fastlowest : na,title="fast signal lowest", color=#ff00f9, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowhighest : na,title="slow signal highest", color=color.white, linewidth=signal_channel_width)
plot(is_show_only_dead_channel == false ? slowlowest : na,title="slow signal lowest", color=color.white, linewidth=signal_channel_width)
//===========================================
plot(crossover(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross buy plot", style=plot.style_circles, linewidth=6, color=color.lime)
plot(crossunder(medain_dead_cross_50, medain_dead_cross_200) ? medain_dead_cross_200 : na, title="Dead cross sell plot", style=plot.style_circles, linewidth=6, color=color.red)
plot(is_show_only_dead_channel and (medain_dead_cross_50 < medain_dead_cross_200) and high == slowhighest ? high : na, title="Follow trend short term  sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and (medain_dead_cross_50 > medain_dead_cross_200) and low == slowlowest ? low : na, title="Follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)
plot(is_show_only_dead_channel and high == slowhighest and (high == dead_cross_high_200) ? high : na, title="Not follow trend short term  sell plot zone", style=plot.style_circles, linewidth=3, color=color.orange)
plot(is_show_only_dead_channel and low == slowlowest and (low == dead_cross_low_200) ? low : na, title="Not follow trend short term buy plot zone", style=plot.style_circles, linewidth=3, color=color.green)

//===================== open close order condition =========================================================//
strategy.entry("strong buy", true, 1, when=low == dead_cross_low_200)
strategy.exit("close strong buy 50%", "strong buy", qty_percent=50, when=high==slowhighest)
strategy.entry("strong sell", false, 1, when=high == dead_cross_high_200)
strategy.exit("close strong sell 50%", "strong sell", qty_percent=50, when=low==slowlowest)