Sumber daya yang dimuat... Pemuatan...

Strategi Trend Following Advanced dengan Adaptive Trailing Stop

Penulis:ChaoZhang, Tanggal: 2024-12-20 14:12:05
Tag:ATRSLTS

img

Gambaran umum

Ini adalah strategi mengikuti tren berdasarkan indikator Supertrend, dikombinasikan dengan mekanisme stop loss trailing adaptif. Strategi ini terutama menggunakan indikator Supertrend untuk mengidentifikasi arah tren pasar dan menggunakan stop trailing yang disesuaikan secara dinamis untuk mengelola risiko dan mengoptimalkan waktu keluar.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada elemen kunci berikut:

  1. Menggunakan indikator Supertrend sebagai dasar utama untuk penentuan tren, yang menggabungkan ATR (Average True Range) untuk mengukur volatilitas pasar
  2. Sinyal masuk dipicu oleh perubahan arah Supertrend, mendukung perdagangan panjang, pendek atau bilateral
  3. Mekanisme stop loss menggunakan adaptif trailing stop yang secara otomatis menyesuaikan berdasarkan volatilitas pasar
  4. Sistem manajemen perdagangan mencakup ukuran posisi (default 15% dari ekuitas akun) dan mekanisme penyaringan waktu

Keuntungan Strategi

  1. Kemampuan menangkap tren yang kuat: Mengidentifikasi tren utama secara efektif melalui indikator Supertrend, mengurangi sinyal palsu
  2. Pengendalian risiko yang komprehensif: Menggunakan mekanisme stop loss yang beragam yang cocok untuk lingkungan pasar yang berbeda
  3. Fleksibilitas tinggi: Mendukung konfigurasi beberapa arah perdagangan dan metode stop loss
  4. Kemampuan beradaptasi yang kuat: Trailing stops menyesuaikan diri secara otomatis sesuai dengan volatilitas pasar, meningkatkan kemampuan beradaptasi strategi
  5. Sistem backtesting lengkap: Fungsi pemfilteran waktu bawaan untuk analisis kinerja historis

Risiko Strategi

  1. Risiko pembalikan tren: sinyal palsu dapat terjadi di pasar yang sangat volatile
  2. Risiko slippage: Eksekusi trailing stop dapat dipengaruhi oleh likuiditas pasar
  3. Sensitivitas parameter: Faktor supertrend dan pengaturan periode ATR berdampak signifikan pada kinerja strategi
  4. Ketergantungan lingkungan pasar: Perdagangan yang sering di berbagai pasar dapat meningkatkan biaya

Arah Optimasi Strategi

  1. Optimasi penyaringan sinyal: Indikator teknis tambahan dapat ditambahkan untuk menyaring sinyal palsu
  2. Optimasi manajemen posisi: Ukuran posisi dapat disesuaikan secara dinamis berdasarkan volatilitas pasar
  3. Peningkatan mekanisme stop loss: Logika stop loss yang lebih kompleks dapat dirancang yang menggabungkan harga rata-rata biaya
  4. Optimasi waktu masuk: analisis struktur harga dapat ditambahkan untuk meningkatkan akurasi masuk
  5. Peningkatan sistem backtesting: Lebih banyak indikator statistik dapat ditambahkan untuk mengevaluasi kinerja strategi

Ringkasan

Ini adalah tren yang dirancang dengan baik mengikuti strategi dengan risiko yang dapat dikontrol. Dengan menggabungkan indikator Supertrend dengan mekanisme stop loss yang fleksibel, strategi dapat mempertahankan profitabilitas tinggi sambil mengontrol risiko secara efektif. Strategi ini sangat dapat dikonfigurasi dan cocok untuk digunakan di lingkungan pasar yang berbeda, tetapi membutuhkan optimasi parameter yang menyeluruh dan verifikasi backtesting. Peningkatan di masa depan dapat dilakukan dengan menambahkan lebih banyak alat analisis teknis dan langkah-langkah pengendalian risiko untuk lebih meningkatkan stabilitas dan profitabilitas strategi.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Supertrend Strategy with Adjustable Trailing Stop [Bips]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=15)

// Inputs
atrPeriod = input(10, "ATR Länge", "Average True Range „wahre durchschnittliche Schwankungsbreite“ und stammt aus der technischen Analyse. Die ATR misst die Volatilität eines Instruments oder eines Marktes. Mit ihr kann die Wahrscheinlichkeit für einen Trendwechsel bestimmt werden.", group="Supertrend Settings")
factor = input.float(3.0, "Faktor", step=0.1, group="Supertrend Settings")
tradeDirection = input.string("Long", "Trade Direction", options=["Both", "Long", "Short"], group="Supertrend Settings")
sl_type    = input.string("%", "SL Type", options=["%", "ATR", "Absolute"])
// Parameter für ST nur für einstieg -> Beim Ausstieg fragen ob der bool WWert true ist -> Für weniger und längere Trädes 

sl_perc    = input.float(4.0, "% SL", group="Stop Loss Einstellung")
atr_length = input.int(10, "ATR Length", group="Stop Loss Einstellung")
atr_mult   = input.float(2.0, "ATR Mult", group="Stop Loss Einstellung")
sl_absol   = input.float(10.0, "Absolute SL", group="Stop Loss Einstellung")

//-------------------------//
// BACKTESTING RANGE
fromDay   = input.int(defval=1, title="From Day", minval=1, maxval=31, group="Backtesting Einstellung")
fromMonth = input.int(defval=1, title="From Month", minval=1, maxval=12, group="Backtesting Einstellung")
fromYear  = input.int(defval=2016, title="From Year", minval=1970, group="Backtesting Einstellung")
toDay     = input.int(defval=1, title="To Day", minval=1, maxval=31, group="Backtesting Einstellung")
toMonth   = input.int(defval=1, title="To Month", minval=1, maxval=12, group="Backtesting Einstellung")
toYear    = input.int(defval=2100, title="To Year", minval=1970, group="Backtesting Einstellung")

startDate  = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond  = time >= startDate and time <= finishDate

//-------------------------//
// Supertrend calculation
[_, direction] = ta.supertrend(factor, atrPeriod)

// SL values
sl_val = sl_type == "ATR"      ? atr_mult * ta.atr(atr_length) : 
         sl_type == "Absolute" ? sl_absol : 
         close * sl_perc / 100
         
// Init Variables
var pos         = 0
var float 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 ? math.max(low  - sl_val, nz(trailing_sl[1])) :  
               nz(pos[1]) == -1 ? math.min(high + sl_val, nz(trailing_sl[1])) : 
               nz(trailing_sl[1])
               
// Position var               
pos := long_signal  ? 1 : short_signal ? -1 : nz(pos[1]) 

// Entry logic
if ta.change(direction) < 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Long"
        strategy.entry("Long", strategy.long, stop=trailing_sl)
    else
        strategy.close_all("Stop Short")

if ta.change(direction) > 0 and time_cond
    if tradeDirection == "Both" or tradeDirection == "Short"
        strategy.entry("Short", strategy.short, stop=trailing_sl)
    else
        strategy.close_all("Stop Long")

// Exit logic: Trailing Stop and Supertrend
//if strategy.position_size > 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Long", from_entry="Long", stop=trailing_sl)

//if strategy.position_size < 0 and not na(trailing_sl)
    //strategy.exit("SL-Exit Short", from_entry="Short", stop=trailing_sl)

// Trailing Stop visualization
plot(trailing_sl, linewidth = 2, color = pos == 1 ? color.green : color.red)
//plot(not na(trailing_sl) ? trailing_sl : na, color=pos == 1 ? color.green : color.red, linewidth=2, title="Trailing Stop")


Berkaitan

Lebih banyak