
La estrategia de seguimiento de tendencia de stop-loss dinámica tiene como objetivo capturar la tendencia de alza mediante la detección de tendencias a largo plazo y reajustes a corto plazo. La estrategia utiliza al mismo tiempo unidades de fluctuación para detectar el tamaño de las ganancias y pérdidas, lo que la hace aplicable a todas las monedas sin preocuparse por el cambio porcentual.
La lógica de la compra de esta estrategia es: comprar y abrir una posición cuando se produce una tendencia al alza a largo plazo (un aumento de la EMA de 200 días, un RSI de más de 51 días) y una corrección bajista a corto plazo (una caída en el precio de liquidación de las últimas 2 líneas K).
La lógica de selling es: parar cuando el precio sube más de 1 unidad de fluctuación; parar cuando el precio baja más de 2 unidades de fluctuación.
La unidad de fluctuación se calcula como: 2 veces la diferencia estándar del precio de cierre en 50 días como la unidad de fluctuación básica. De esta manera, se puede detectar la fluctuación de las diferentes monedas sin necesidad de establecer un porcentaje.
La mayor ventaja de esta estrategia es que se puede detectar dinámicamente el tamaño de las fluctuaciones de las diferentes monedas, de acuerdo con la volatilidad de la propia moneda de la configuración de la unidad de parada y pérdida. Esto evita el problema de la fijación del porcentaje de parada fija, se puede adaptar automáticamente a más monedas.
Otra ventaja es la combinación de un juicio largo y corto plazo, que puede filtrar eficazmente las brechas falsas. Utiliza la tendencia a largo plazo para determinar la moneda que podría subir en el futuro, y luego combina la señal de retorno a corto plazo, que puede evitar eficazmente las señales falsas como el squeeze de la banda de Brin.
El mayor riesgo de esta estrategia reside en la configuración de las unidades de stop loss. Si la oscilación es demasiado grande, la distancia de parada puede ser demasiado cercana y no se puede seguir; si la oscilación es demasiado pequeña, la pérdida puede ser demasiado rápida. Esto requiere un EMA de ciclo más largo como auxiliar para evitar errores de juicio de las unidades de oscilación.
Otro riesgo es la dependencia de la estrategia en el juicio de la tendencia a corto plazo. Si se produce un aumento a largo plazo pero no se corrige en el corto plazo, se perderá el momento de entrada. Esto puede requerir la adición de otros indicadores de juicio auxiliares.
La estrategia puede ser optimizada en las siguientes direcciones:
Aumentar los juicios de EMA de períodos más largos para evitar errores en las unidades de fluctuación
Aumentar los indicadores de tendencias, como el volumen de transacciones, y reducir la dependencia de la línea k corta
Optimización de las condiciones de apertura y negociación, estableciendo reglas de entrada más estrictas
Combinación de algoritmos de aprendizaje automático para determinar la dirección de la tendencia y lograr una mayor tasa de éxito
La idea general de la estrategia de seguimiento de tendencias de repetición dinámica es clara, y el núcleo está en la configuración de unidades de fluctuación dinámica. La estrategia puede adaptarse automáticamente a las unidades de ganancias y pérdidas de diferentes monedas, sin necesidad de establecer porcentajes manualmente.
/*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)