Dinámica toma de ganancias siguiendo la estrategia de tendencia

El autor:¿ Qué pasa?, Fecha: 2023-12-29 16:06:54
Las etiquetas:

img

Resumen general

La estrategia Dynamic Take Profit Following Trend detecta tendencias a largo plazo y retrocesos a corto plazo para lograr compras bajas y ventas altas, con el objetivo de perseguir tendencias alcistas.

Estrategia lógica

La lógica de compra de esta estrategia es: cuando aparece una tendencia alcista a largo plazo (la EMA de 200 días sube, el RSI de 200 días es mayor que 51) y se produce un retroceso a corto plazo (los últimos 2 candeleros muestran precios de cierre reducidos), se abren posiciones largas.

La lógica de venta es: obtener ganancias cuando el precio aumenta más de 1 unidad de volatilidad; detener la pérdida cuando el precio disminuye más de 2 unidades de volatilidad.

La unidad de volatilidad se calcula como: 2 veces la desviación estándar de los precios de cierre en los últimos 50 días.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede detectar dinámicamente los tamaños de volatilidad de diferentes monedas y establecer los niveles de stop loss / take profit en consecuencia.

Otra ventaja es que la combinación de juicios a largo plazo y a corto plazo puede filtrar eficazmente las fallas.

Análisis de riesgos

El mayor riesgo de esta estrategia es la configuración de la unidad de stop loss / take profit. Si la volatilidad es demasiado alta, las distancias de take profit pueden estar demasiado cerca para seguir persiguiendo la tendencia alcista; si la volatilidad es demasiado baja, la stop loss puede desencadenarse demasiado rápido. Esto requiere EMAs de período más largo como ayuda para evitar errores en los juicios de la unidad de volatilidad.

En el caso de las empresas, la tendencia de crecimiento a corto plazo es la más probable, ya que la tendencia de crecimiento a corto plazo es la más probable, y la tendencia de crecimiento a largo plazo es la más probable.

Direcciones de optimización

La estrategia se puede optimizar en las siguientes direcciones:

  1. Añadir juicios de la EMA a más largo plazo para evitar errores unitarios de volatilidad

  2. Añadir indicadores como los volúmenes de negociación para juzgar las tendencias, reducir la dependencia de los candelabros a corto plazo

  3. Optimizar las condiciones de entrada y salida, establecer normas de entrada más estrictas

  4. Combinar algoritmos de aprendizaje automático para determinar la dirección de la tendencia, lograr una mayor tasa de ganancia

Conclusión

La estrategia tiene una lógica clara en su núcleo: establecer dinámicamente las unidades de stop loss / take profit. Esta estrategia puede adaptar automáticamente las configuraciones a través de monedas sin necesidad de entradas porcentuales manuales. Mientras tanto, combinar la doble confirmación de tendencias a largo y corto plazo puede filtrar eficazmente las señales falsas. Con nuevas optimizaciones, esta estrategia puede convertirse en una estrategia de persecución de tendencias altamente eficiente.


/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © BHD_Trade_Bot

strategy(shorttitle='Take Profit On Trend',
 title='Take Profit On Trend (by BHD_Trade_Bot)',
 overlay=true,
 initial_capital = 15,
 default_qty_type = strategy.cash,
 default_qty_value = 15,
 commission_type=strategy.commission.percent,
 commission_value=0.1)



//Backtest Time
start_day = 1
start_month = 1
start_year = 2021
end_day = 1
end_month = 1
end_year = 2050
start_time = timestamp(start_year, start_month, start_day, 00, 00)
end_time = timestamp(end_year, end_month, end_day, 23, 59)
is_back_test_time() =>
    time >= start_time and time <= end_time ? true : false

// Last bar
h1_last_bar = (timenow - time)/1000/60/60 < 2



// EMA
ema50 = ema(close, 50)
ema200 = ema(close, 200)

// RSI length 200
rsi200 = rsi(close, 200)

// Bollinger Bands length 50
bb50 = 2 * stdev(close, 50)

// BHD Unit
bhd_unit = sma(bb50, 100)
bb50_upper = ema50 + bhd_unit
bb50_lower = ema50 - bhd_unit



// All n candles is going down
all_body_decrease(n) =>
    isValid = true
    for i = 0 to (n - 1)
        if (close[i] > close[i + 1])
            isValid := false
            break
    isValid



// ENTRY

// Long-term uptrend
entry_condition1 = rsi200 > 51 

// Short-term downtrend
entry_condition2 = all_body_decrease(2) 

ENTRY_CONDITION = entry_condition1 and entry_condition2

if (ENTRY_CONDITION and is_back_test_time())
    strategy.entry("entry", strategy.long)



// CLOSE CONDITIONS

// Price increase 1 BHD unit
TAKE_PROFIT = close > strategy.position_avg_price + bhd_unit

// Price decrease 2 BHD unit
STOP_LOSS = close < strategy.position_avg_price - bhd_unit * 2

CLOSE_CONDITION = TAKE_PROFIT or STOP_LOSS

if (CLOSE_CONDITION or h1_last_bar)
    strategy.close("entry")



// Draw
plot(ema50)
plot(ema200, color=color.yellow)
plot(bb50_upper)
plot(bb50_lower)


Más.