Ini adalah strategi yang sangat sederhana. Ini hanya terdiri dari satu stop loss trailing. Ketika stop loss dipicu, posisi terbalik dan stop loss trailing ditetapkan untuk posisi baru.
Strategi ini dibangun berdasarkan salah satu dari tiga jenis stop loss: stop loss persentase, ATR stop loss, stop loss absolut.
Secara khusus, strategi pertama kali menghitung nilai stop loss berdasarkan jenis stop loss yang dipilih. Kemudian memeriksa sinyal masuk, pergi panjang ketika tinggi di atas harga stop loss sebelumnya dan pergi pendek ketika rendah di bawah harga stop loss sebelumnya. Setelah masuk, terus memperbarui harga stop loss untuk mengikuti perubahan harga. Harga stop loss panjang rendah dikurangi nilai stop loss, harga stop loss pendek tinggi ditambah nilai stop loss.
Keuntungan terbesar dari strategi ini adalah kesederhanaannya, membutuhkan pelacakan hanya satu stop loss tanpa perlu mempertimbangkan pilihan titik masuk dan keluar.
Dibandingkan dengan stop loss tetap, trailing stop loss yang digunakan dapat mengunci keuntungan yang lebih besar sementara juga mengurangi probabilitas stop loss terkena.
Risiko utama dari strategi ini mungkin berasal dari pengaturan nilai stop loss yang tidak tepat. Nilai stop loss yang terlalu besar dapat menyebabkan kerugian yang diperbesar, sementara nilai yang terlalu kecil dapat menyebabkan pemicu stop loss yang sering terjadi. Ini membutuhkan optimasi adaptif berdasarkan kondisi pasar.
Risiko lain adalah penilaian arah yang tidak akurat setelah pemicu stop loss saat membalikkan posisi, sehingga kehilangan peluang pembalikan harga atau meningkatkan kerugian.
Strategi dapat dioptimalkan dalam aspek berikut:
Strategi ini mewujudkan keuntungan melalui mekanisme stop loss trailing yang sederhana dan mudah dipahami oleh pemula. Dibandingkan dengan strategi stop loss tradisional, strategi ini menambahkan posisi pembalikan trigger post stop loss untuk memperoleh keuntungan tambahan. Dengan pengujian dan optimalisasi terus-menerus, ini dapat menjadi program kuantitatif yang sangat praktis.
/*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)