La estrategia Take Profit on Trend tiene como objetivo detectar tendencias a largo plazo y retrocesos a corto plazo, tomando posiciones largas durante las tendencias alcistas generales mientras se capturan caídas a corto plazo, con niveles razonables de stop loss y take profit establecidos para seguir la tendencia y obtener ganancias de manera oportuna.
La estrategia utiliza principalmente EMA y RSI para determinar tendencias a largo y corto plazo. Específicamente, utiliza EMA de 50 días y EMA de 200 días para juzgar las tendencias a largo plazo, y RSI para medir la fuerza de la tendencia. Cuando el largo plazo está en una tendencia alcista (EMA de 200 días en aumento) y fuerte (RSI por encima de 50), y el corto plazo ve un retroceso (los últimos 2 velas cerran más bajas), se toma una posición larga.
Después de entrar en una posición, la estrategia establece condiciones de stop loss y take profit. Cuando el precio sube más de 2x unidades BHD por encima del precio de entrada, se obtienen ganancias. Cuando el precio cae más de 3x unidades BHD por debajo del precio de entrada, la posición se detiene. La unidad BHD se calcula en función de la amplitud de las últimas 200 velas.
De este modo, la estrategia tiene plenamente en cuenta las características de tendencia a largo y corto plazo, aumentando las ganancias mientras se controlan los riesgos, siguiendo la tendencia mientras se obtienen ganancias oportunas.
La estrategia tiene las siguientes ventajas:
Considera las tendencias a largo y corto plazo, combinadas con indicadores de fortaleza, evita las entradas ciegas en mercados variados.
Las entradas siguen la dirección de la tendencia, mayor tasa de ganancia.
Los puntos de toma de ganancias y stop loss permiten tomar ganancias y controlar el riesgo a tiempo.
TP y SL son dinámicos basados en la volatilidad, relativamente razonables.
Las pruebas de retroceso muestran buenos rendimientos y estabilidad a través de símbolos y plazos.
Lógica simple y clara, fácil de entender e implementar para todos los niveles de habilidad.
La estrategia también tiene algunos riesgos:
Un error de juicio a corto/largo plazo que conduce a direcciones de entrada equivocadas.
Las caídas de mercado similares a los acantilados pueden penetrar las paradas.
Los parámetros mal configurados afectan negativamente el rendimiento.
El TP está demasiado ajustado, puede salir prematuramente.
Backtest ≠ rendimiento en vivo, se necesita una optimización continua.
Soluciones:
Optimizar los parámetros, ajustar los períodos de admisión, añadir indicadores de validación cruzada.
Paradas más amplias, dimensionamiento de la posición, otros controles de riesgo.
Extensa prueba posterior para evaluar los parámetros.
Optimización dinámica de la TP en función de las condiciones del mercado.
Pruebas en curso, optimización, ajuste en vivo.
La estrategia se puede optimizar aún más mediante:
Ajuste de parámetros, períodos de MA, períodos de unidades BHD, etc.
Añadir indicadores, MACD, KD, etc. para una mejor precisión a corto plazo.
Optimización del TP/SL, tamaño dinámico basado en la volatilidad, etc.
Añadir el tamaño de la posición basado en la fuerza de la tendencia.
Probando robustez en más símbolos y marcos de tiempo.
Añadir filtros como precio de cierre > abierto para evitar trampas.
Incorporar aprendizaje automático para más automatización e inteligencia.
Estos pueden mejorar la tasa de ganancia, el rendimiento, la estabilidad, la adaptabilidad, etc.
En general, la estrategia Take Profit on Trend tiene las ventajas de considerar tendencias largas / cortas, siguiendo tendencias, TP / SL claro. Es un enfoque de seguimiento de tendencias estable y eficiente. Pero existen riesgos, que requieren optimización continua y ajuste en vivo. La lógica es clara y fácil de implementar. Vale la pena estudiar y aplicar para los operadores. Con una optimización adicional, puede convertirse en una estrategia cuantitativa robusta.
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // 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 // @version=5 strategy( shorttitle = 'Take Profit On Trend', title = 'Take Profit On Trend (by BHD_Trade_Bot)', overlay = true, calc_on_every_tick = true, calc_on_order_fills = true, use_bar_magnifier = true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2021) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) is_back_test_time() => true // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // RSI rsi200 = ta.rsi(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 50) hist = emacd - emacd_signal // BHD Unit bhd_unit = ta.rma(high - low, 200) * 2 bhd_upper = ema200 + bhd_unit bhd_lower = ema200 - 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 CONDITIONS // Long-term uptrend entry_condition1 = rsi200 > 51 and hist > 0 // Short-term downtrend entry_condition2 = all_body_decrease(2) ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS and is_back_test_time() strategy.entry('entry', strategy.long) // CLOSE CONDITIONS // Price increase 2 BHD unit take_profit = close > strategy.position_avg_price + bhd_unit * 2 // Price decrease 3 BHD unit stop_loss = close < strategy.position_avg_price - bhd_unit * 3 CLOSE_CONDITIONS = take_profit or stop_loss if CLOSE_CONDITIONS strategy.close('entry') // Draw plot(ema50, color=color.orange, linewidth=2) plot(ema200, color=color.purple, linewidth=2) bhd_upper_line = plot(bhd_upper, color=color.teal) bhd_lower_line = plot(bhd_lower, color=color.teal) fill(bhd_upper_line, bhd_lower_line, color=color.new(color.teal, 90))