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.
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.
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.
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.
La estrategia se puede optimizar en las siguientes direcciones:
Añadir juicios de la EMA a más largo plazo para evitar errores unitarios de volatilidad
Añadir indicadores como los volúmenes de negociación para juzgar las tendencias, reducir la dependencia de los candelabros a corto plazo
Optimizar las condiciones de entrada y salida, establecer normas de entrada más estrictas
Combinar algoritmos de aprendizaje automático para determinar la dirección de la tendencia, lograr una mayor tasa de ganancia
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)