
Dies ist nicht nur eine schlichte Trend-Tracking-Strategie. Die LTPI-Strategie verwendet 2,16 mal den ATR als Trend-Umkehrung, um die Schwelle auszulösen, die durch sorgfältige Kalibrierung des Benchmarks sowohl 90% des Marktgeräusches filtert als auch das echte Trendstartsignal nicht verpasst. Die Rückmeldedaten zeigen, dass die ATR-Dynamikanlage im Vergleich zu festen Preisdurchbrüchen stabiler ist.
Der Schlüssel liegt in der Triggerlogik: Der Preis muss die aktuelle Trendlinie ± 2,16 mal ATR durchbrechen, um einen neuen Trend auslösen zu können. Dies bedeutet, dass eine relativ größere Preisbewegung in einer niedrigen Periode erforderlich ist und eine relativ leichte in einer hohen Periode.
Traditionelle Trendlinien sind statisch, LTPI ist aktiv. Die Basisschrittlänge = 2.52 mal ATR, dann erhöhen Sie die Steigerung um 0,0093 mal ATR pro Zyklus. Die Designphilosophie ist einfach: Je länger der Trend, desto größer der Schritt, desto aggressiver bewegt sich die Trendlinie.
Mathematische Formel: stepSize = min ((2.52 × ATR + 0.0093 × Trenddauer × ATR, maximale Schrittlänge)
Die maximale Schrittweite ist -0,004 mal ATR (negative Skalierung), um zu verhindern, dass zu große Schritte in extremen Schwankungen zu einer Kontrollenlosigkeit der Trendlinie führen. Diese schrittweise Beschleunigung ermöglicht eine konservative Strategie zu Beginn des Trends und wird nach der Trendbestätigung aggressiver.
Das tödlichste Design-Detail: 17 Zyklen des Zwangs-Lockings nach einer Trendwende, während der jegliche Umkehrsignale ignoriert werden.
Warum 17? Die Rückschau zeigt, dass dies der Ausgleichspunkt ist:
Der Preis ist klar: Verzögerung bei schnellen V-Rückgängen, aber im Gegenzug eine stabile Performance in einem wackligen Umfeld. Das ist die typische Risiko-Gewinn-Schwankung, die Strategie wählt Stabilität.
Der Up-Down-Kanal = Trendlinie ± 1x ATR, das ist keine willkürliche Einstellung. Die 1x ATR-Bandbreite deckt statistisch 68% der normalen Preisfluktuation ab, und nur noch 32% der übrigen Durchbrüche werden als sinnvolle Signale angesehen.
Der wahre Wert des Kanals liegt darin:
Im Gegensatz zu den Brin-Bändern basiert dieser Kanal auf trendspezifischen Bewegungen und nicht auf einer einfachen statistischen Verteilung. Bei starken Trends neigt der Kanal kontinuierlich in die Richtung des Trends und bietet eine genauere Handelsgrenze.
Ich habe keine Ahnung, was das für ein Problem ist.
Für wen ist diese Strategie gedacht?
Nicht geeignet für: Daytrader, Kleinanleger und Investoren, die sich mit Hochfrequenzgeschäften beschäftigen.
Empfehlungen für die Anpassung der Kernparameter:
Die Risikomanagement muss streng sein: Ein einzelnes Risiko darf nicht mehr als 2% betragen und die Gesamtposition darf nicht mehr als 50% des Kontos ausmachen. Die historische Rückführung ist nicht repräsentativ für zukünftige Gewinne, die Strategie besteht aus dem Risiko einer fortlaufenden Verlust, und ausreichende Risikobereitschaft ist erforderlich.
// 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)