
Esta não é outra estratégia de acompanhamento de tendências banal. A estratégia LTPI utiliza o ATR de 2,16 vezes para a inversão de tendências para a ação de um limiar, que, depois de uma janela de calibração cuidada, pode filtrar 90% do ruído do mercado e não perder o sinal de início de tendências reais. Os dados de retrospectiva mostram que, em comparação com a ruptura de preços fixos, o mecanismo de ajuste dinâmico do ATR apresenta um desempenho mais estável em variações de volatilidade.
A chave está na lógica de ação: o preço tem que romper a linha de tendência atual ± 2,16 vezes o ATR para a ação de uma nova tendência. Isso significa que um movimento de preço relativamente maior é necessário em períodos de baixa volatilidade e relativamente relaxado em períodos de alta volatilidade.
As linhas de tendência tradicionais são estáticas, enquanto as LTPI são ativas. O passo básico é igual a 2,52 vezes o ATR, depois cada ciclo aumenta em 0,0093 vezes o ATR. A filosofia de design é simples: quanto mais longa a tendência, maior o passo, mais agressiva é a movimentação da linha de tendência.
Fórmula matemática: stepSize = min ((2.52 × ATR + 0.0093 × duração da tendência × ATR, o máximo passo)
O comprimento máximo de passo é de -0.004 vezes o ATR, para evitar que o comprimento excessivo de um passo no extremo de uma onda leve a uma perda de controle da linha de tendência. Este mecanismo de aceleração gradual permite que a estratégia seja conservadora no início da tendência e se torne mais radical após a confirmação da tendência.
O detalhe de design mais mortal: o bloqueio forçado de 17 ciclos após a reversão da tendência, durante os quais qualquer sinal de reversão é ignorado. Esta é a defesa final contra os mercados de choque.
A retrospectiva mostra que este é o ponto de equilíbrio:
O preço é claro: um atraso numa rápida reversão de V, mas em troca um desempenho estável em uma situação de choque. É o típico risco-benefício de uma estratégia que escolhe a estabilidade.
O canal ascendente e descendente = linha de tendência ± 1x ATR, que não é uma configuração arbitrária. A banda de 1x ATR estatisticamente cobre 68% das flutuações normais de preços, e apenas as restantes 32% de ruptura são consideradas sinais significativos.
O verdadeiro valor do canal está em:
Ao contrário da faixa de Brin, este canal baseia-se em movimentos na direção da tendência, e não em uma simples distribuição estatística. Em fortes tendências, o canal continuará a inclinar-se na direção da tendência, fornecendo fronteiras de negociação mais precisas.
O blogueiro diz:
Para quem é essa estratégia? A resposta é clara:
Não é indicado para: investidores que buscam negociações diárias, pequenas contas de capital e negociações de alta frequência.
Recomendações para ajustes de parâmetros principais:
O gerenciamento de risco deve ser rigoroso: o risco individual não deve exceder 2% e a posição total não deve exceder 50% da conta. O retorno histórico não representa lucros futuros, a estratégia tem risco de perdas contínuas e o capital de amortização de risco adequado é necessário.
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lungusebi100
//@version=6
strategy("LTPI Strat", overlay=false, process_orders_on_close=true, calc_on_every_tick=false)
RequestSecurityNRP(_tf, _exp, _barmerge)=>
request.security(syminfo.tickerid, _tf, _exp[barstate.isrealtime ? 1 : 0],_barmerge)[barstate.isrealtime ? 0 : 1]
int indicator_1 = na
int indicator_2 = na
int indicator_3 = na
float indicator_4 = na
int indicator_5 = na
var int indicator_6 = na
int indicator_7 = na
var int indicator_8 = na
var int indicator_9 = na
var int indicator_10 = na
int indicator_11 = na
int indicator_12 = na
int indicator_13 = na
int indicator_14 = na
int indicator_15 = na
int indicator_16 = na
// ------------------------------------------------------------INDICATOR 1: Trend Impulse Channels ---------------------------------------
var string t1 = "Trigger Threshold: Controls when a new trend step is triggered. It's a multiplier of the ATR — higher values require a stronger price move to flip the trend direction."
var string t2 = "Max Step Size: Defines the maximum allowed size for each trend step, based on ATR. Use a negative number to scale down large step jumps in volatile conditions."
var string t3 = "Band Multiplier: Expands or contracts the volatility bands around the trend line. A higher value creates wider channels to account for more price fluctuation."
var string t4 = "Trend Hold: After a trend flip, the trend will hold for this many bars before another flip can occur. Useful for avoiding rapid flip-flopping in choppy markets."
var string t5 = "Retest Signals: Enables triangle markers on the chart when price re-tests the upper or lower channel boundary. Helpful for spotting potential continuation or bounce zones."
var string t6 = "Trend Filter: Only show retest signals if they align with the current trend direction (e.g., only show upper retests in a downtrend)."
var string t7 = "Trend Step Signals: Shows circular markers each time a new step is taken in the trend direction. These mark every structural trend advancement."
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Inputs {
indi_1_tf = input.timeframe(title = "Timeframe", defval="2D", group = "-------Trend Impulse Channel------")
flipMult = input.float(2.16,step=0.01, title="Trigger Threshold", group = "-------Trend Impulse Channel------", inline="", tooltip=t1)
maxStepAtr = input.float(-0.004,step=0.001, title="Max Step Size", group = "-------Trend Impulse Channel------", inline="", tooltip=t2)
bandMult = input.float(1, step=0.01,title="Band Multiplier", group = "-------Trend Impulse Channel------", inline="", tooltip=t3)
holdBars = input.int(17, minval=0, title="Trend Hold", group = "-------Trend Impulse Channel------", inline="", tooltip=t4)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
[close2d, atr2d] = request.security(syminfo.tickerid, indi_1_tf, [close, ta.atr(200)], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
// ~~ Atr Scaling {
atr = atr2d
stepBase = atr * 2.52
maxStep = atr * maxStepAtr
trigger = atr * flipMult
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Var {
var float trend = na
var int dir = 0
var int barsInTrend = 0
var float hold = na
var int extension = 0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Logic {
startLong = close2d > nz(trend) + trigger
startShort = close2d < nz(trend) - trigger
flip = (startLong or startShort) and barsInTrend >= 0
stepSize = math.min(stepBase + 0.0093 * barsInTrend * atr, maxStep)
if na(trend)
trend := close2d
dir := 0
barsInTrend := 0
hold := trigger
extension := 0
else
if flip and extension <= 0
trend := close2d
dir := startLong ? 1 : -1
barsInTrend := 1
hold := trigger
extension := holdBars
else
trend := trend + (dir == 1 ? stepSize : dir == -1 ? -stepSize : 0)
barsInTrend += 1
extension := math.max(extension - 1, 0)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Channel {
trendDirection = dir == 1 ? 1 : dir == -1 ? -1 : 0
upper = trend + atr * bandMult
lower = trend - atr * bandMult
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// LTPI Signal
indicator_1 := dir
if indicator_1 > 0
strategy.entry("long", strategy.long)
if indicator_1 < 0
strategy.close("long")
plot (indicator_1, color = color.blue)