
Strategi LTPI menggunakan 2.16 kali ATR sebagai pembalikan trend untuk mencetuskan paras paras yang disaring oleh penstabil dengan teliti yang dapat menyaring 90% daripada bunyi pasaran dan tidak terlepas isyarat permulaan trend yang sebenar. Data retrospeksi menunjukkan bahawa mekanisme penyesuaian ATR yang dinamik lebih stabil dalam perubahan kadar turun naik berbanding dengan penembusan harga tetap.
Kuncinya adalah untuk mencetuskan logik: harga mesti menembusi garisan trend semasa ± 2.16 kali ATR untuk mencetuskan trend baru. Ini bermakna pergerakan harga yang lebih besar diperlukan pada masa turun naik rendah dan agak longgar pada masa turun naik tinggi.
Garis trend tradisional adalah statik, LTPI adalah aktif. Panjang langkah asas = 2.52 kali ATR, kemudian setiap kitaran meningkatkan peningkatan ATR sebanyak 0.0093 kali. Falsafah reka bentuk ini mudah: semakin lama trend, semakin besar langkahnya, semakin agresif pergerakan garis trend.
Formula matematik: stepSize = min ((2.52 × ATR + 0.0093 × tempoh berterusan trend × ATR, panjang langkah maksimum)
Panjang langkah maksimum ditetapkan sebagai -0.004 kali ATR (nilai negatif menunjukkan scaling), untuk mengelakkan langkah yang terlalu besar dalam turun naik yang melampau menyebabkan garis trend hilang kawalan. Mekanisme percepatan beransur-ansur ini membolehkan strategi menjadi konservatif pada awal trend dan menjadi lebih agresif selepas trend disahkan.
Perincian reka bentuk yang paling mematikan: memaksa penguncian 17 kitaran selepas trend berbalik, di mana sebarang isyarat pembalikan diabaikan. Ini adalah pertahanan terakhir terhadap pasaran yang bergolak.
Kenapa 17? Pengiraan menunjukkan ia adalah titik keseimbangan:
Kosnya jelas: terdapat kelewatan dalam pembalikan V yang cepat, tetapi sebaliknya prestasi yang stabil dalam keadaan yang bergolak. Ini adalah keseimbangan risiko-keuntungan yang tipikal, strategi memilih kestabilan.
Saluran ke atas ke bawah = garisan trend ± 1 kali ATR, yang tidak ditetapkan secara rawak. 1 kali ATR bandwidth secara statistik meliputi 68% daripada turun naik harga normal, dengan baki 32% pecah hanya dianggap sebagai isyarat yang bermakna.
Nilai sebenar saluran ini ialah:
Berbeza dengan Brin Belt, saluran ini berdasarkan pergerakan arah trend, dan bukan sekadar pengedaran statistik. Dalam trend yang kuat, saluran akan terus menghadap ke arah trend, memberikan sempadan perdagangan yang lebih tepat.
Bercakap secara langsung mengenai kelemahan:
Jawapannya adalah jelas: tidak ada apa-apa yang perlu dipersoalkan.
Tidak sesuai untuk: dagangan dalam sehari, akaun modal kecil, dan pelabur yang ingin berdagang dengan frekuensi tinggi.
Cadangan untuk penyesuaian parameter teras:
Pengurusan risiko mestilah ketat: risiko tunggal tidak melebihi 2% dan kedudukan keseluruhan tidak melebihi 50% dari akaun. Pemantauan semula sejarah tidak mewakili pendapatan masa depan, strategi mempunyai risiko kerugian berturut-turut, dan dana perlindungan risiko yang mencukupi diperlukan.
// 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)