Estrategia de marcos de tiempo múltiples

El autor:¿ Qué pasa?, Fecha: 2024-02-19 11:13:22
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el acuerdo de indicadores en múltiples marcos de tiempo para rastrear las tendencias.

Estrategia lógica

La estrategia juzga la dirección de la tendencia utilizando cuatro marcos de tiempo: diarios, de 10 días, de 15 días y de 30 días. Cuando los precios de cierre son más altos que los precios de apertura en los cuatro marcos de tiempo, indica una señal alcista. Cuando los precios de cierre son más bajos que los precios de apertura en los cuatro marcos de tiempo, indica una señal bajista.

Cuando la señal es alcista, va largo. Cuando la señal es bajista, va corto. Después de entrar, el canal KC se utiliza para el stop loss dinámico.

Específicamente, la estrategia compara los precios de apertura y cierre en diferentes marcos de tiempo para determinar la dirección de la tendencia. Si el precio de cierre es mayor que el precio de apertura, el marco de tiempo se considera alcista y se muestra en verde. Si el precio de cierre es menor que el precio de apertura, el marco de tiempo se considera bajista y se muestra en rojo.

Cuando los cuatro marcos de tiempo están de acuerdo en una señal alcista, la estrategia abrirá una posición larga. Cuando los cuatro marcos de tiempo están de acuerdo en una señal bajista, la estrategia abrirá una posición corta. Saldrá cuando alcance el stop loss o la tendencia se invierta.

Ventajas

  1. El uso de múltiples marcos de tiempo para confirmar las tendencias puede filtrar eficazmente las fallas y determinar la dirección de la tendencia.

  2. El stop loss dinámico puede maximizar la protección del capital.

  3. Los criterios de entrada estrictos reducen las operaciones innecesarias y los costes de deslizamiento.

  4. La combinación de múltiples marcos de tiempo equilibra la velocidad de ganancia y la estabilidad.

Los riesgos

  1. Los criterios de admisión pueden ser demasiado estrictos, perdiendo algunas oportunidades.

  2. La configuración incorrecta del stop loss puede ser demasiado agresiva o conservadora.

  3. Es posible que las selecciones de plazos inadecuadas no se alineen con las tendencias a más o menos largo plazo.

  4. Las inversiones repentinas de los eventos pueden no activar el stop loss.

Áreas de mejora

  1. Optimizar las selecciones de plazos para equilibrar la velocidad y la estabilidad de las ganancias.

  2. Prueba diferentes configuraciones de parámetros para optimizar los niveles de stop loss.

  3. Añadir algoritmos de aprendizaje automático para ayudar a juzgar los puntos de inversión.

  4. Supervisar los acontecimientos significativos para evitar pérdidas por reversiones repentinas.

Resumen de las actividades

Esta estrategia integra juicios a través de múltiples marcos de tiempo, con criterios de entrada estrictos y paradas dinámicas, con el objetivo de obtener rendimientos constantes.


/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("[RichG] Easy MTF Strategy v1.1", overlay=false)

TF_1_time = input("D", "Timeframe 1")
TF_2_time = input("10D", "Timeframe 2")
TF_3_time = input("15D", "Timeframe 3")
TF_4_time = input("30D", "Timeframe 4")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
lengthBB=input(20, title="BB Length")
transaction_size = input(1, "Contract/Share Amount")

src = close, len = 20


out = sma(src, len)
width = 5
upcolor = green
downcolor = red
neutralcolor = blue
linestyle = line


kc() =>
    ma = sma(close, lengthKC)
    range = tr
    rangema = sma(range, lengthKC)
    upperKC = ma + rangema * multKC
    lowerKC = ma - rangema * multKC
    [lowerKC, upperKC] 

 
bb() =>
    source = close 
    basis = sma(source, lengthBB)
    dev = multKC * stdev(source, lengthBB)
    upperBB = basis + dev
    lowerBB = basis - dev
    [upperBB, lowerBB]

TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false
TF_1_color = TF_1 ? upcolor:downcolor

TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false
TF_2_color = TF_2 ? upcolor:downcolor

TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false
TF_3_color = TF_3 ? upcolor:downcolor


TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false
TF_4_color = TF_4 ? upcolor:downcolor

TF_global = TF_1 and TF_2 and TF_3 and TF_4 
TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false
TF_global_color = TF_global ? green : TF_global_bear ? red : white
TF_trigger_width = TF_global ? 6 : width

plot(1, style=linestyle, linewidth=width, color=TF_1_color)
plot(5, style=linestyle, linewidth=width, color=TF_2_color)
plot(10, style=linestyle, linewidth=width, color=TF_3_color)
plot(15, style=linestyle, linewidth=width, color=TF_4_color)
plot(25, style=linestyle, linewidth=4, color=TF_global_color)    

exitCondition_Long = TF_global_bear 
exitCondition_Short = TF_global

longCondition = TF_global
if (longCondition)
    strategy.entry("MTF_Long", strategy.long, qty=transaction_size)

shortCondition = TF_global_bear
if (shortCondition)
    strategy.entry("MTF_Short", strategy.short, qty=transaction_size)

[kc_lower,kc_upper] = kc()

strategy.close("MTF_Long", when=close < kc_upper)
strategy.close("MTF_Short", when=close > kc_lower)


Más.