La estrategia Joker Trailing Take Profit es una estrategia de seguimiento de tendencias basada en promedios móviles.
La estrategia utiliza promedios móviles rápidos y lentos para identificar la tendencia general.
La estrategia primero calcula un precio inicial de take profit basado en el porcentaje configurado después de abrir una posición.
Cuando la dirección de la posición coincide con la señal, se utiliza una orden límite para obtener ganancias si el seguimiento está desactivado.
Las medias móviles filtran el ruido del mercado y evitan señales falsas.
El trailing take profit ajusta el nivel de take profit dinámicamente en función de la acción del precio.
El retraso en la toma de ganancias bloquea más ganancias y reduce la posibilidad de devolver ganancias. También evita salir demasiado pronto con un nivel de toma de ganancias fijo.
La función stop loss permite que la estrategia salga temprano cuando la tendencia se invierte.
Los promedios móviles pueden generar señales falsas o retraso durante grandes fluctuaciones de precios. Esto puede causar pérdidas por operaciones equivocadas.
Una tasa de rentabilidad demasiado elevada aumenta el período de retención y la desviación entre el precio de rentabilidad real y el esperado.
Un paso de seguimiento demasiado pequeño provoca actualizaciones de pedidos excesivas y aumenta las tarifas y el deslizamiento.
El TP de seguimiento solo se mueve hacia arriba y no tiene en cuenta las reducciones. Esto puede causar una desviación entre el precio de toma de ganancias real y esperado.
Considere el ajuste dinámico de los parámetros de MA en función de la volatilidad: períodos más largos en los que la volatilidad aumenta y períodos más cortos en los que la volatilidad disminuye.
Investigación óptima de las proporciones de ganancias para diferentes productos y mercados para minimizar el riesgo de desviación.
Explore el mecanismo de seguimiento bidireccional para seguir tanto hacia arriba como hacia abajo.
Incorporar indicadores de la fuerza de la tendencia para reducir la tasa de beneficios en tendencias débiles y aumentar la tasa en tendencias fuertes.
Combinar con modelos de aprendizaje automático para establecer dinámicamente los ratios de ganancias basados en los rangos de precios previstos.
La estrategia Joker Trailing Take Profit tiene una estructura clara y utiliza promedios móviles para definir la dirección de la tendencia y el trailing para bloquear las ganancias. Combina las ventajas de los trailing stops y trailing take profits para seguir las tendencias sin problemas mientras controla los riesgos. Se pueden hacer mejoras adicionales a través de la optimización de parámetros y la mejora del mecanismo de take profit para adaptarse a entornos de mercado más complejos.
/*backtest start: 2023-08-23 00:00:00 end: 2023-09-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='Joker Trailing TP Bot', shorttitle='Joker TTP Bot', overlay=true, pyramiding=0, process_orders_on_close=false, close_entries_rule='ANY', calc_on_every_tick=false, calc_on_order_fills=false, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD) //, max_labels_count=500) fromDate = input(timestamp('01 Jan 2021 00:00 UTC'), 'From Date') toDate = input(timestamp('31 Dec 2121 23:59 UTC'), 'To Date') fastMALen = input.int(23, 'Fast SMA Length') slowMALen = input.int(50, 'Slow SMA Length') longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01 shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01 enableTrailing = input.bool(true, 'Enable Trailing') trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01 float fastMA = ta.sma(close, fastMALen) float slowMA = ta.sma(close, slowMALen) bool isWithinPeriod = true bool openLongPosition = isWithinPeriod and ta.crossover(fastMA, slowMA) bool openShortPosition = isWithinPeriod and ta.crossunder(fastMA, slowMA) bool longIsActive = openLongPosition or strategy.position_size > 0 bool shortIsActive = openShortPosition or strategy.position_size < 0 float longTakeProfitPrice = na longTakeProfitPrice := if longIsActive if openLongPosition and not (strategy.position_size > 0) close * (1 + longTakeProfitPerc) else nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc)) else na float shortTakeProfitPrice = na shortTakeProfitPrice := if shortIsActive if openShortPosition and not (strategy.position_size < 0) close * (1 - shortTakeProfitPerc) else nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPrice)) else na float longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick float shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick strategy.entry(id = 'Long Entry', direction = strategy.long, when = openLongPosition, alert_message = 'Long(' + syminfo.ticker + '): Started') strategy.entry(id = 'Short Entry', direction = strategy.short, when = openShortPosition, alert_message = 'Short(' + syminfo.ticker + '): Started') strategy.exit(id = 'Long Take Profit', from_entry = 'Long Entry', limit = enableTrailing ? na : longTakeProfitPrice, trail_price = enableTrailing ? longTakeProfitPrice : na, trail_offset = enableTrailing ? longTrailingTakeProfitStepTicks : na, when = longIsActive, alert_message = 'Long(' + syminfo.ticker + '): Take Profit activated') strategy.exit(id = 'Short Take Profit', from_entry = 'Short Entry', limit = enableTrailing ? na : shortTakeProfitPrice, trail_price = enableTrailing ? shortTakeProfitPrice : na, trail_offset = enableTrailing ? shortTrailingTakeProfitStepTicks : na, when = shortIsActive, alert_message = 'Short(' + syminfo.ticker + '): Take Profit activated') plot(series = fastMA, title='Fast SMA', color = color.blue, linewidth = 1, style = plot.style_line) plot(series = slowMA, title='Slow SMA', color = color.orange, linewidth = 1, style = plot.style_line) plot(series = longTakeProfitPrice, title='Long Take Profit', color = color.green, linewidth = 1, style = plot.style_cross, offset = 1) plot(series = shortTakeProfitPrice, title='Short Take Profit', color = color.red, linewidth = 1, style = plot.style_cross, offset = 1) plot(series = strategy.position_avg_price, title='Position', color = color.white, linewidth = 1, style = plot.style_linebr)