Strategi stop loss trailing yang dinamis adalah strategi perdagangan kuantitatif yang memanfaatkan mekanisme stop loss trailing. Ini menetapkan garis stop loss trailing berdasarkan teori pelacakan tren untuk mengkonfirmasi stop loss dan menyesuaikan stop loss trailing.
Inti dari strategi stop loss trailing dinamis terletak pada pengaturan tiga parameter utama: jarak stop loss awal, jarak stop loss trailing dan jarak trigger stop loss trailing. Setelah sinyal beli dipicu, harga stop loss awal dihitung berdasarkan harga masuk dan jarak stop loss awal yang ditetapkan. Kemudian, setiap bar akan menilai apakah kondisi trigger stop loss trailing terpenuhi. Jika ya, harga stop loss trailing baru akan ditetapkan. Harga stop loss trailing baru dihitung berdasarkan harga penutupan saat ini dan jarak stop loss trailing. Dengan demikian, selama harga berjalan ke arah yang menguntungkan, garis stop loss trailing akan terus bergerak ke atas untuk mengunci keuntungan. Ketika pembalikan harga memicu garis stop loss trailing, sinyal jual akan dihasilkan.
Strategi ini juga memiliki stop loss yang lebih rendah. Tidak peduli apakah stop loss trailing diaktifkan atau tidak, jika harga pecah di bawah stop loss yang lebih rendah, stop loss akan langsung dipicu. Stop loss yang lebih rendah berfungsi untuk melindungi dari kesenjangan harga yang disebabkan oleh peristiwa mendadak. Oleh karena itu, melalui mekanisme stop loss dinamis dalam bentuk stop loss double-line, garis stop loss dapat secara otomatis melacak tren yang menguntungkan, sambil mencegah kerugian yang berlebihan.
Tetap mengunci keuntungan melalui stop loss, menghindari memberikan terlalu banyak ruang retracement.
Mengadopsi struktur stop loss dua baris untuk memastikan garis stop loss dapat segera ditindaklanjuti, sementara mencegah kerugian yang berlebihan.
Menggunakan mekanisme penilaian terus menerus untuk penyesuaian stop loss dengan operasi sederhana dan penerapan yang mudah.
Parameter dapat dioptimalkan sesuai dengan karakteristik pasar dan saham untuk meningkatkan efektivitas stop loss.
Tidak perlu memprediksi tren pasar, hanya mengikuti tren.
Pengaturan parameter yang tidak benar dapat mengakibatkan stop loss yang terlalu longgar atau terlalu ketat.
Dalam hal kesenjangan harga yang disebabkan oleh peristiwa tiba-tiba, mungkin tidak dapat menghentikan kerugian.
Biaya perdagangan dan slippage dapat mempengaruhi harga penjualan yang sebenarnya setelah garis stop loss dipicu.
Kemampuan beradaptasi tidak kuat. Tidak bekerja dengan baik pada tahap tertentu, seperti gerakan yang terbatas.
Pengendalian:
Sesuaikan garis stop loss trailing dalam perubahan persentase, yang dapat lebih baik melacak pergerakan harga di berbagai tingkat harga.
Menambahkan metrik volatilitas untuk menangguhkan stop loss saat menghadapi volatilitas tinggi, menghindari fluktuasi normal dari memicu stop loss.
Optimalkan parameter secara otomatis melalui pembelajaran mesin. Pilih pengembalian kombinasi parameter yang berbeda dalam periode terakhir sebagai sampel pelatihan.
Tambahkan kriteria posisi terbuka dengan mempertimbangkan indikator seperti tren, dukungan & resistensi untuk menghindari posisi terbuka di berbagai pasar.
Strategi stop loss trailing dinamis menetapkan garis stop loss trailing melalui mekanisme stop loss double-line untuk mengkonfirmasi stop loss dan menyesuaikan stop loss trailing berdasarkan perubahan harga. Ini dapat secara otomatis menyesuaikan jarak stop loss untuk mengunci keuntungan, mengurangi pullback dan mengendalikan kerugian. Dengan operasi yang sederhana dan penerapan yang mudah, strategi ini dapat lebih dioptimalkan berdasarkan kondisi pasar dan digunakan bersama dengan strategi lain untuk kinerja yang lebih baik. Tetapi juga memiliki beberapa keterbatasan. Adalah disarankan untuk memperbaikinya dan mengujinya dengan cukup sebelum menerapkannya dalam perdagangan langsung.
/*backtest start: 2023-11-28 00:00:00 end: 2023-12-17 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Thumpyr //@version=5 ///////////////////////////////////////////////////////////////////////////////////////////// // Comment out Strategy Line and remove // from Indicator line to turn into Indicator ////// // Do same for alertConidction at bottom ////// ///////////////////////////////////////////////////////////////////////////////////////////// strategy("PCT Trailing Stoploss-Strategy", shorttitle="PCT Trailing Stoploss- Strategy", overlay=true) //indicator(title="PCT Trailing Stoploss- Indicator", shorttitle="PCT Trailing Stoploss - Indicator", timeframe="", timeframe_gaps=true, overlay=true)// sellLow=input.float(.035, minval=0, title="Stop Loss Loss: 1% = .01", group="Sell Settings") trailStopArm=input.float(.0065, minval=0, title="Trailing Stop Arm: 1%=.01", group="Sell Settings") trailStopPct=input.float(.003, minval=0, title="Trailing Stop Trigger: 1%=.01 ", group="Sell Settings") ///////////////////////////////////////////////// // Indicators // ///////////////////////////////////////////////// ema1Len = input.int(14, minval=1, title=" ema 1 Length", group="Trend Line Settings") ema1Src = input(close, title="ema 1 Source", group="Trend Line Settings") ema1 = ta.ema(ema1Src, ema1Len) plot(ema1, title="EMA", color=color.blue) ema2Len = input.int(22, minval=1, title=" ema 2 Length", group="Trend Line Settings") ema2Src = input(close, title="ema 2 Source", group="Trend Line Settings") ema2 = ta.ema(ema2Src, ema2Len) plot(ema2, title="EMA", color=color.orange) ema3Len = input.int(200, minval=1, title=" ema 3 Length", group="Trend Line Settings") ema3Src = input(close, title="ema 2 Source", group="Trend Line Settings") ema3 = ta.ema(ema3Src, ema3Len) plot(ema3, title="EMA", color=color.gray) ///////////////////////////// //// Buy Conditions //// ///////////////////////////// alertBuy = ta.crossover(ema1,ema2) and close>ema3 //////////////////////////////////////////////////////////////////// //// Filter redundant Buy Signals if Sell has not happened //// //////////////////////////////////////////////////////////////////// var lastsignal = 0 showAlertBuy = 0 if(alertBuy and lastsignal !=1) showAlertBuy := 1 lastsignal := 1 buyAlert= showAlertBuy > 0 ////////////////////////////////////////////////////////////////// //// Track Conditions at buy Signal //// ////////////////////////////////////////////////////////////////// alertBuyValue = ta.valuewhen(buyAlert, close,0) alertSellValueLow = alertBuyValue - (alertBuyValue*sellLow) //////////////////////////////////////////////////////////// ///// Trailing Stop ///// //////////////////////////////////////////////////////////// var TSLActive=0 //Check to see if TSL has been activated var TSLTriggerValue=0.0 //Initial and climbing value of TSL var TSLStop = 0.0 //Sell Trigger var TSLRunning =0 //Continuously check each bar to raise TSL or not // Check if a Buy has been triggered and set initial value for TSL // if buyAlert TSLTriggerValue := alertBuyValue+(alertBuyValue*trailStopArm) TSLActive := 0 TSLRunning :=1 TSLStop := TSLTriggerValue - (TSLTriggerValue*trailStopPct) // Check that Buy has triggered and if Close has reached initial TSL// // Keeps from setting Sell Signal before TSL has been armed w/TSLActive// beginTrail=TSLRunning==1 and TSLActive==0 and close>alertBuyValue+(alertBuyValue*trailStopArm) and ta.crossover(close,TSLTriggerValue) if beginTrail TSLTriggerValue :=close TSLActive :=1 TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct) // Continuously check if TSL needs to increase and set new value // runTrail= TSLActive==1 and (ta.crossover(close,TSLTriggerValue) or close>=TSLTriggerValue) if runTrail TSLTriggerValue :=close TSLStop :=TSLTriggerValue - (TSLTriggerValue*trailStopPct) // Verify that TSL is active and trigger when close cross below TSL Stop// TSL=TSLActive==1 and (ta.crossunder(close,TSLStop) or (close[1]>TSLStop and close<TSLStop)) // Plot point of inital arming of TSL// TSLTrigger=TSLActive==1 and TSLActive[1]==0 plotshape(TSLTrigger, title='TSL Armed', location=location.abovebar, color=color.new(color.blue, 0), size=size.small, style=shape.cross, text='TSL Armed') //////////////////////////////////////////////////////////// // Plots used for troubleshooting and verification of TSL // //////////////////////////////////////////////////////////// //plot(TSLActive,"Trailing Stop", color=#f48fb1) //plot(TSLRunning,"Trailing Stop", color=#f48fb1) //plot(TSLTriggerValue,"Trailing Stop Trigger", color.new(color=#ec407a, transp = TSLRunning==1 ? 0 : 100)) //plot(TSLStop,"Trailing Stop", color.new(color=#f48fb1, transp = TSLRunning==1 ? 0 : 100))// //////////////////////////////////////////////////////////// ///// Sell Conditions /////// //////////////////////////////////////////////////////////// Sell1 = TSL Sell2 = ta.crossunder(close,alertSellValueLow) alertSell= Sell1 or Sell2 //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //// Remove Redundant Signals //// //////////////////////////////////////////////////////////// showAlertSell = 0 if(alertSell and lastsignal != -1) showAlertSell := 1 lastsignal := -1 sellAlert= showAlertSell > 0 if sellAlert TSLActive :=0 TSLRunning :=0 ///////////////////////////////////////// // Plot Buy and Sell Shapes on Chart // ///////////////////////////////////////// plotshape(buyAlert, title='Buy', location=location.belowbar, color=color.new(color.green, 0), size=size.small, style=shape.triangleup, text='Buy') plotshape(sellAlert, title='Sell', location=location.abovebar, color=color.new(color.red, 0), size=size.small, style=shape.triangledown, text='Sell') ///////////////////////////////////////////////////////////////////////////////////////////// // Remove // to setup for Indicator // ///////////////////////////////////////////////////////////////////////////////////////////// //Alerts //alertcondition(title='Buy Alert', condition=buyAlert, message='Buy Conditions are Met') //alertcondition(title='Sell Alert', condition=sellAlert, message='Sell Conditions are Met') ///////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //// Comment out this section if setup as Indicator //// //////////////////////////////////////////////////////////// longCondition = buyAlert if (longCondition) strategy.entry("Buy", strategy.long) alert(message='Buy', freq=alert.freq_once_per_bar_close) shortCondition = sellAlert if (shortCondition) strategy.close_all(sellAlert,"Sell") alert(message='Sell', freq=alert.freq_once_per_bar_close) /////////////////////////////////////////////////////////////