Esta é uma estratégia muito simples. Consiste apenas de um stop loss de trailing. Quando o stop loss é acionado, a posição é invertida e um stop loss de trailing é definido para a nova posição.
A estratégia é construída com base em um dos três tipos de stop loss: stop loss percentual, stop loss ATR, stop loss absoluto.
Especificamente, a estratégia primeiro calcula o valor de stop loss com base no tipo de stop loss escolhido. Em seguida, verifica os sinais de entrada, indo longo quando alto está acima do preço de stop loss anterior e indo curto quando baixo está abaixo do preço de stop loss anterior. Depois de entrar, ele continua atualizando o preço de stop loss para seguir as mudanças de preço. O preço de stop loss longo é baixo menos o valor de stop loss, o preço de stop loss curto é alto mais o valor de stop loss.
A maior vantagem desta estratégia é a sua simplicidade, exigindo o acompanhamento de apenas uma perda de parada sem a necessidade de considerar as seleções de pontos de entrada e saída.
Em comparação com o stop loss fixo, o trailing stop loss empregado pode bloquear lucros maiores, reduzindo também a probabilidade de o stop loss ser atingido.
Os principais riscos desta estratégia podem vir da configuração inadequada do valor de stop loss. O valor de stop loss muito grande pode levar a perdas aumentadas, enquanto o valor muito pequeno pode causar o gatilho de stop loss frequente. Isso requer otimização adaptativa com base nas condições do mercado.
Outro risco é o julgamento direcional impreciso após o gatilho de stop loss ao reverter as posições, perdendo assim chances de reversão de preço ou aumentando as perdas.
A estratégia pode ser otimizada nos seguintes aspectos:
A estratégia realiza lucros por meio de um mecanismo de stop loss simples e é fácil de entender para iniciantes. Em comparação com as estratégias tradicionais de stop loss, ela adiciona posições de reversão de gatilho de pós-stop loss para adquirir ganhos adicionais. Com testes e otimização contínuos, pode se tornar um programa quantitativo muito prático.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Trailing SL Strategy [QuantNomad]", shorttitle = "TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50) //////////// // Inputs // sl_type = input("%", options = ["%", "ATR", "Absolute"]) sl_perc = input(4, title = "% SL", type = input.float) atr_length = input(10, title = "ATR Length") atr_mult = input(2, title = "ATR Mult", type = input.float) sl_absol = input(10, title = "Absolute SL", type = input.float) // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2016, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2100, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate ////////////////// // CALCULATIONS // // SL values sl_val = sl_type == "ATR" ? atr_mult * atr(atr_length) : sl_type == "Absolute" ? sl_absol : close * sl_perc / 100 // Init Variables pos = 0 trailing_sl = 0.0 // Signals long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1]) short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1]) // Calculate SL trailing_sl := short_signal ? high + sl_val : long_signal ? low - sl_val : nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1]) // Position var pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1]) ////////////// // PLOTINGS // plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red) ////////////// // STRATEGY // if (time_cond and pos != 1) strategy.entry("long", true, stop = trailing_sl) if (time_cond and pos != -1) strategy.entry("short", false, stop = trailing_sl)