Strategi ini berdasarkan mekanisme stop loss yang dinamik yang direka dengan penunjuk ATR untuk menyesuaikan stop loss dalam masa nyata sambil memastikan stop loss yang berkesan untuk memaksimumkan keuntungan.
Strategi ini menggunakan tempoh ATR cepat 5 dan tempoh ATR perlahan 10 untuk membina dua lapisan dinamik trailing stop loss. Apabila harga berjalan ke arah yang menguntungkan, lapisan cepat akan mengaktifkan stop trailing terlebih dahulu untuk mengetatkan stop loss; apabila terdapat penarikan balik jangka pendek, stop loss lapisan perlahan dapat mengelakkan stop out awal. Sementara itu, persilangan antara lapisan cepat dan perlahan berfungsi sebagai isyarat perdagangan.
Secara khusus, jarak stop loss lapisan pantas adalah 0.5 kali ATR 5 tempoh, dan jarak stop loss lapisan perlahan adalah 3 kali ATR 10 tempoh. Isyarat beli dihasilkan apabila lapisan pantas memecahkan di atas lapisan perlahan, dan isyarat jual dihasilkan apabila lapisan pantas memecahkan di bawah lapisan perlahan. Garis stop loss juga dikemas kini dalam masa nyata dan digambarkan di bawah kurva harga.
Kelebihan terbesar strategi ini ialah ia dapat menyesuaikan kedudukan stop loss secara dinamik untuk memaksimumkan keuntungan sambil memastikan stop loss yang berkesan.
Di samping itu, reka bentuk ATR dua lapisan menyeimbangkan kepekaan kehilangan berhenti. Lapisan cepat bertindak balas dengan cepat dan lapisan perlahan boleh menapis bunyi jangka pendek untuk mengelakkan kehilangan berhenti yang lebih awal.
Risiko utama strategi ini terletak pada sama ada tetapan jarak stop loss adalah munasabah. Jika pengganda ATR ditetapkan terlalu tinggi, julat stop loss tidak akan mengikuti pergerakan harga. Jika pengganda ATR terlalu kecil, ia cenderung untuk dihentikan oleh bunyi jangka pendek. Oleh itu, parameter perlu diselaraskan mengikut ciri-ciri pelbagai jenis.
Di samping itu, dalam pasaran terikat julat, nilai ATR lebih kecil dan garis stop loss lebih dekat, yang boleh dengan mudah membawa kepada stop loss yang kerap.
Kombinasi parameter kitaran ATR yang berbeza boleh dicuba untuk mencari keseimbangan yang optimum. Ia juga boleh mempertimbangkan untuk menggabungkan dengan penunjuk lain, seperti penunjuk trend untuk menilai peringkat pasaran, untuk menyesuaikan saiz pengganda ATR secara dinamik.
Ia juga mungkin untuk mengkaji alternatif kepada penunjuk ATR, menggantikan ATR dengan DKVOL, HRANGE atau Peratusan ATR, dll. boleh mencapai kesan stop loss yang lebih baik.
Strategi ini merancang mekanisme pengekalan dinamik dua lapisan berdasarkan penunjuk ATR untuk memaksimumkan keuntungan sambil mengelakkan kerugian berhenti yang berlebihan. Ia sesuai untuk pengguna yang mempunyai keperluan yang lebih tinggi untuk kerugian berhenti. Strategi ini dapat menyesuaikan parameter dengan fleksibel mengikut ciri pasaran dan pelbagai untuk mencapai kesan kerugian berhenti yang optimum.
/*backtest start: 2022-12-04 00:00:00 end: 2023-12-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true) /////////notes//////////////////////////////////////// // This is based on the ATR trailing stop indicator // // width addition of two levels of stops and // // different interpretation. // // This is a fast-reacting system and is better // // suited for higher volatility markets // ////////////////////////////////////////////////////// SC = input(close, "Source", input.source) // Fast Trail // AP1 = input(5, "Fast ATR period", input.integer) // ATR Period AF1 = input(0.5, "Fast ATR multiplier", input.float) // ATR Factor SL1 = AF1 * atr(AP1) // Stop Loss Trail1 = 0.0 Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1))) // Slow Trail // AP2 = input(10, "Slow ATR period", input.integer) // ATR Period AF2 = input(3, "Slow ATR multiplier", input.float) // ATR Factor SL2 = AF2 * atr(AP2) // Stop Loss Trail2 = 0.0 Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2))) // Bar color for trade signal // Green = Trail1 > Trail2 and close > Trail2 and low > Trail2 Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2 Red = Trail2 > Trail1 and close < Trail2 and high < Trail2 Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2 // Signals // Bull = barssince(Green) < barssince(Red) Buy = crossover(Trail1, Trail2) Sell = crossunder(Trail1, Trail2) TS1 = plot(Trail1, "Fast Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2, display=display.none) TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2) fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 90)) plotcolor = input(true, "Paint color on chart", input.bool) bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na) barcolor(bcl) if Buy strategy.entry("Buy", strategy.long, comment="Buy") if Sell strategy.close("Buy")