Estrategia de inversión de BTC de seguimiento inteligente de líneas de tendencia duales

El autor:¿ Qué pasa?, Fecha: 2023-11-22 15:18:53
Las etiquetas:

img

Resumen general

Esta estrategia se utiliza principalmente para la inversión automatizada a largo plazo en BTC. Utiliza el cruce de EMA y LSMA duales para determinar la dirección de la tendencia y utiliza el indicador ATR para calcular un stop loss dinámico para rastrear efectivamente la tendencia alcista de BTC.

Estrategia lógica

  1. Utiliza la EMA de 25 períodos y la LSMA de 100 períodos para formar una media móvil dual. Su cruce se utiliza para determinar la tendencia del mercado. La EMA responde rápidamente a los cambios de precios mientras que la LSMA filtra las fallas falsas.

  2. Cuando la EMA rápida cruza por encima de la LSMA lenta, se determina que la tendencia alcista sigue intacta y se toman posiciones largas.

  3. Después de tomar posiciones largas, el stop loss dinámico calculado utilizando el indicador ATR sigue ajustándose para rastrear efectivamente la tendencia alcista de BTC. Específicamente, el punto inicial de la línea de stop loss es el precio de entrada. Después de eso, cada ajuste aumentará en un porcentaje fijo de la amplitud de ATR.

  4. La línea de stop loss puede bloquear efectivamente la ganancia flotante traída por la tendencia alcista de BTC, al tiempo que evita que el punto de stop loss se acerque demasiado al último precio para evitar la pérdida de stop frecuente.

Análisis de ventajas

  1. El uso de medias móviles duales para determinar la tendencia es más confiable y puede prevenir eficazmente las falsas señales.

  2. El sistema ATR puede bloquear la mayoría de las ganancias evitando frecuentes pequeñas pérdidas de parada.

  3. No importa si la tendencia alcista termina o no, siempre y cuando el promedio móvil emita una señal de salida, la posición se detendrá para controlar los riesgos.

  4. La estrategia tiene un alto grado de automatización sin intervención manual, por lo que es adecuada para operaciones en vivo a largo plazo.

Análisis de riesgos

  1. Todavía hay que prestar atención a las grandes noticias repentinas para evitar grandes pérdidas de deslizamiento.

  2. Aunque la combinación de dos medias móviles puede reducir las señales falsas, es todavía difícil evitarlas por completo en los mercados de rango.

  3. Los ajustes incorrectos de los parámetros del ATR también pueden afectar al efecto de stop loss.

  4. Los períodos de media móvil no razonables o la falta de actualización a tiempo pueden provocar un retraso de la señal.

  5. Asegurar la estabilidad del servidor para evitar caídas anormales que interrumpan el comercio automatizado.

Direcciones de optimización

  1. Se pueden añadir más indicadores como bandas de Bollinger para determinar la tendencia.

  2. El método de cálculo del stop loss dinámico ATR también se puede ajustar y optimizar para que el stop loss sea más suave.

  3. Se pueden añadir mecanismos de alerta basados en el volumen de operaciones y funciones de rotación intradiaria para protegerse contra los impactos de las principales noticias.

  4. Los parámetros varían para las diferentes monedas.

Resumen de las actividades

En general, este es un programa de inversión automatizado de BTC muy práctico. El uso de EMAs duales para determinar la tendencia principal es muy confiable. Con ATR detrás de la parada de pérdida, puede lograr ganancias decentes y el período de validez puede ser muy largo. A medida que los parámetros continúan siendo optimizados, todavía hay mucho margen de mejora en el rendimiento de esta estrategia. Vale la pena verificar el comercio en vivo.


// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading

//@version=4
strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100,  commission_type=strategy.commission.percent,commission_value=0.1)

////////////  Functions

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

//TEMA
TEMA(series, length) =>
    if (length > 0)
        ema1 = ema(series, length)
        ema2 = ema(ema1, length)
        ema3 = ema(ema2, length)
        (3 * ema1) - (3 * ema2) + ema3
    else
        na
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

///////////////////////////////////////////////////
/// INDICATORS
source=close

/// TREND
trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])
trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"])

trend_type1_length=input(25, "Length of the First Trend Line")
trend_type2_length=input(100, "Length of the Second Trend Line")

leadLine1 = if trend_type1=="LSMA"
    linreg(close, trend_type1_length, 0)
else if trend_type1=="TEMA"
    TEMA(close,trend_type1_length)
else if trend_type1 =="EMA"
    ema(close,trend_type1_length)
else
    sma(close,trend_type1_length)

leadLine2 = if trend_type2=="LSMA"
    linreg(close, trend_type2_length, 0)
else if trend_type2=="TEMA"
    TEMA(close,trend_type2_length)
else if trend_type2 =="EMA"
    ema(close,trend_type2_length)
else
    sma(close,trend_type2_length)

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=crossover(leadLine1,leadLine2)
DT=crossunder(leadLine1,leadLine2)

// TP/ SL/  FOR LONG
// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(20, 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_input = input(5, title='stop loss in %', step=0.1)/100
long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input)

// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(8,"ATR period", minval=1, step=1)

// Strategy
//LONG STRATEGY CONDITION

SC = input(close, "Source", input.source)
SL1 = multiplier * Atr(ATR_period)  // Stop Loss
Trail1 = 0.0
Trail1 :=  iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))
Trail1_high=highest(Trail1,50)

// iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1),

entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close
exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level

///// BACKTEST PERIOD ///////
testStartYear = input(2016, "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() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    if tradeType=="LONG" or tradeType=="BOTH"
        if strategy.position_size == 0 or strategy.position_size > 0
            strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long)
            strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1)
            strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2)
            strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" )


// LONG POSITION

plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")

Más.