Ini adalah strategi yang sangat mudah. Ia hanya terdiri daripada satu stop loss yang tertinggal. Apabila stop loss dicetuskan, kedudukan ditukar dan stop loss yang tertinggal ditetapkan untuk kedudukan baru.
Strategi ini dibina berdasarkan salah satu daripada tiga jenis stop loss: peratus stop loss, ATR stop loss, stop loss mutlak.
Secara khusus, strategi ini mula-mula mengira nilai stop loss berdasarkan jenis stop loss yang dipilih. Ia kemudian memeriksa isyarat masuk, pergi lama apabila tinggi di atas harga stop loss sebelumnya dan pergi pendek apabila rendah di bawah harga stop loss sebelumnya. Selepas memasuki, ia terus mengemas kini harga stop loss untuk mengikuti perubahan harga. Harga stop loss panjang adalah rendah dikurangkan nilai stop loss, harga stop loss pendek adalah tinggi ditambah nilai stop loss.
Kelebihan terbesar strategi ini adalah kesederhanaannya, yang memerlukan penjejakan hanya satu stop loss tanpa perlu mempertimbangkan pilihan titik masuk dan keluar.
Berbanding dengan stop loss tetap, stop loss yang digunakan dapat mengunci keuntungan yang lebih besar sambil juga mengurangkan kebarangkalian stop loss yang dipukul.
Risiko utama strategi ini mungkin berasal dari penentuan nilai stop loss yang tidak betul. Nilai stop loss yang terlalu besar boleh menyebabkan kerugian yang diperbesar, sementara nilai yang terlalu kecil boleh menyebabkan pemicu stop loss yang kerap. Ini memerlukan pengoptimuman adaptif berdasarkan keadaan pasaran.
Risiko lain adalah penilaian arah yang tidak tepat selepas pemicu stop loss apabila membalikkan kedudukan, sehingga kehilangan peluang pembalikan harga atau meningkatkan kerugian.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Strategi ini merealisasikan keuntungan melalui mekanisme stop loss yang mudah dan mudah difahami oleh pemula. Berbanding dengan strategi stop loss tradisional, ia menambah kedudukan pembalikan pemicu post stop loss untuk memperoleh keuntungan tambahan. Dengan ujian dan pengoptimuman yang berterusan, ia boleh menjadi program kuantitatif yang sangat praktikal.
/*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)