Estrategia de inversión con seguimiento inteligente de media móvil de doble tendencia


Fecha de creación: 2023-11-22 15:18:53 Última modificación: 2023-11-22 15:18:53
Copiar: 0 Número de Visitas: 621
1
Seguir
1617
Seguidores

Estrategia de inversión con seguimiento inteligente de media móvil de doble tendencia

Descripción general

La estrategia se utiliza principalmente para automatizar la inversión de líneas largas en BTC. La dirección de la tendencia se determina mediante el cruce de dos EMA y LSMA, y el indicador ATR se utiliza para calcular el stop loss dinámico, lo que permite un seguimiento eficaz de la tendencia de BTC.

Principio de estrategia

  1. El EMA de 25 días y el LSMA de 100 días forman dos líneas medias, cuyos cruces se utilizan para determinar la tendencia del mercado. El EMA responde rápidamente a los cambios en los precios, el LSMA filtra falsos breaks.

  2. Cuando el EMA rápido atraviesa el LSMA lento y se considera que sigue en una tendencia alcista, se hace más; por el contrario, cuando el EMA rápido atraviesa el LSMA lento y se considera que entra en una posición vacante, se hace un equilibrio.

  3. Después de entrar en el mercado, el stop loss dinámico calculado con el indicador ATR se ajusta constantemente para lograr un seguimiento efectivo de la tendencia alcista de BTC. En concreto, la línea de stop loss comienza con el precio de entrada, y luego cada ajuste se desplaza hacia arriba en la amplitud ATR de proporción fija.

  4. La línea de parada es capaz de bloquear eficazmente las fluctuaciones causadas por la subida de BTC, al tiempo que evita que los puntos de parada estén demasiado cerca del precio más reciente y causen paros frecuentes. Además, la estrategia también establece dos paradas móviles en diferentes proporciones para bloquear más ganancias.

Análisis de las ventajas

  1. El uso de dos líneas equilibradas para determinar tendencias es más fiable y puede prevenir la generación de señales falsas.

  2. ATR traza los stop loss dinámicamente, lo que permite bloquear la mayor parte de las ganancias y evitar los pequeños y frecuentes stop loss.

  3. Independientemente de si la operación de múltiples cabezas ha terminado o no, la pérdida del nudo se detendrá cuando se emita la señal de salida de la línea media, y el riesgo estará controlado.

  4. El alto grado de automatización, sin necesidad de intervención humana, facilita el funcionamiento del disco duro durante mucho tiempo.

Análisis de riesgos

  1. La gente sigue atenta a las noticias importantes, para evitar grandes pérdidas de puntos.

  2. Aunque la combinación de dos líneas equiláteras reduce la posibilidad de falsos señales, es difícil evitarlas por completo en situaciones de temblor.

  3. La configuración incorrecta de los parámetros de ATR también puede afectar el efecto de deterioro, que debe ajustarse según la variedad.

  4. La falta de un ciclo de medición razonable o la falta de actualización a tiempo también puede causar un retraso en la señal.

  5. Garantizar la estabilidad del servidor y evitar que las fallas anormales causen interrupciones automáticas de las transacciones.

Dirección de optimización

  1. Se puede intentar agregar más indicadores para juzgar tendencias, como las bandas de Brin. O usar modelos de aprendizaje automático para predecir precios.

  2. El método de cálculo de la pérdida dinámica de ATR también se puede ajustar y optimizar para hacer que la pérdida se detenga más suavemente.

  3. Se puede agregar un mecanismo de alerta basado en el volumen de transacciones y el movimiento diario de FEATURE para evitar impactos de noticias importantes.

  4. Los parámetros de las diferentes monedas son diferentes y se pueden entrenar parámetros personalizados con más datos históricos.

Resumir

En general, esta estrategia es un programa de inversión automática de BTC muy práctico. El uso de dos EMA para determinar la gran tendencia es muy confiable, complementado con el seguimiento de ATR para detener los pérdidas, puede obtener una buena ganancia y una duración muy larga.

Código Fuente de la Estrategia
// 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")