A estratégia Joker Trailing Take Profit é uma estratégia de seguimento de tendências baseada em médias móveis.
A estratégia usa médias móveis rápidas e lentas para identificar a tendência geral.
A estratégia primeiro calcula um preço inicial de take profit com base na porcentagem configurada após a abertura de uma posição.
Quando a direção da posição coincide com o sinal, uma ordem de limite é usada para tirar lucro se o trailing estiver desativado.
As médias móveis filtram o ruído do mercado e evitam falsos sinais.
O trailing take profit ajusta o nível do take profit dinamicamente com base na ação do preço.
O trailing take profit bloqueia mais lucros e reduz a chance de devolver os ganhos.
A função stop loss permite que a estratégia saia mais cedo quando a tendência se inverter.
As médias móveis podem gerar sinais falsos ou atrasos durante grandes oscilações de preços. Isso pode causar perdas de negociações erradas. A otimização dos parâmetros MA e a adição de filtros podem ajudar.
A redução do rácio reduz esse risco.
Um passo traseiro definido muito pequeno causa atualizações de pedidos excessivas e aumenta as taxas e o deslizamento.
O TP de trail movimenta-se apenas para cima e não considera drawdowns. Isto pode causar um desvio entre o preço de take profit real e esperado.
Considerar o ajustamento dinâmico dos parâmetros de MA com base na volatilidade: períodos mais longos em que a volatilidade aumenta e períodos mais curtos em que a volatilidade diminui.
Pesquisa de proporções de lucro ótimas para diferentes produtos e mercados para minimizar o risco de desvio.
Explore o mecanismo de tração bidirecional para traçar tanto para cima como para baixo.
Incorporar indicadores de força da tendência para reduzir a taxa de lucro nas tendências fracas e aumentar a taxa nas tendências fortes.
Combinar com modelos de aprendizagem de máquina para definir dinamicamente os rácios de lucro com base nas faixas de preços previstas.
A estratégia Joker Trailing Take Profit tem uma estrutura clara e usa médias móveis para definir a direção da tendência e trailing para bloquear os lucros. Ele combina as vantagens de trailing stops e trailing take profits para seguir as tendências sem problemas, controlando os riscos.
/*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)