Strategi Pelacakan Tren Momentum Turtle

Penulis:ChaoZhang, Tanggal: 2023-11-23 11:53:27
Tag:

img

Gambaran umum

Strategi Momentum Turtle Trend Tracking adalah strategi mengikuti tren berdasarkan aturan Turtle Trading. Ini menggunakan Turtle Indicators untuk mengidentifikasi tren dan menggabungkan metrik momentum untuk menyaring beberapa perdagangan bising. Keuntungan utama dari strategi ini adalah kemampuan untuk menangkap tren harga yang kuat dan mencapai keuntungan berlebih.

Prinsip Strategi

Strategi ini menggunakan sistem breakout dalam Turtle Indicators untuk menentukan arah tren. Secara khusus, ketika harga penutupan lebih tinggi dari harga tertinggi selama 20 hari terakhir, itu adalah sinyal bullish dan pergi panjang; ketika harga penutupan lebih rendah dari harga terendah selama 20 hari terakhir, itu adalah sinyal bearish dan strategi pergi pendek.

Untuk menyaring beberapa perdagangan kebisingan, strategi ini juga menggabungkan faktor momentum. Jika fluktuasi harga kurang dari 5 ATR, strategi tidak akan memasuki perdagangan. Ini menghindari kerugian dari whipsaws di pasar sampingan.

Setelah membuka posisi, strategi ini menggunakan N-breakout exit dalam aturan Turtle asli untuk stop loss. Sistem ini menetapkan stop loss berdasarkan harga tertinggi dan terendah selama 20 hari terakhir. Misalnya, stop loss untuk posisi panjang akan 2N ATR di bawah terendah selama 20 hari terakhir. Pengambilan keuntungan untuk strategi ini sederhana - ditetapkan pada 10% dari total nilai akun.

Analisis Keuntungan

Keuntungan terbesar dari strategi ini adalah bahwa ia menggabungkan kedua trend berikut dan manajemen momentum. Sistem penyu dapat dengan akurat menangkap tren jangka menengah dalam harga tanpa terganggu oleh kebisingan pasar. Filter momentum ATR tambahan lebih lanjut mengurangi jumlah perdagangan yang tidak perlu, sehingga sangat meningkatkan potensi keuntungan.

Secara khusus, strategi ini memiliki kekuatan berikut:

  1. Indikator penyu secara akurat mengidentifikasi tren dan melacak tren jangka menengah.
  2. Filter momentum mengurangi perdagangan yang tidak perlu dan menghindari kerugian pada frekuensi perdagangan.
  3. Langkah-langkah pengendalian risiko yang kuat memungkinkan menghentikan kerugian tepat waktu ketika tren berbalik.
  4. Secara keseluruhan penyesuaian strategi selaras dengan prinsip Turtle asli.

Analisis Risiko

Meskipun ada potensi besar untuk optimasi lebih lanjut, strategi ini juga membawa beberapa risiko untuk dijaga:

  1. Tidak dapat menangani fluktuasi yang berlebihan untuk kepemilikan jangka panjang.
  2. Harga stop loss berisiko diambil selama pembalikan ekstrem, yang mengarah pada kerugian yang lebih tinggi dari yang diharapkan.
  3. Kurangnya target laba berarti kepemilikan yang berlebihan dan risiko memegang posisi bawah air.

Peluang Peningkatan

Berdasarkan risiko-risiko di atas, peluang-peluang optimalisasi utama meliputi:

  1. Pertimbangkan model ukuran posisi dinamis yang disesuaikan dengan volatilitas untuk mengurangi ukuran pada perdagangan yang kalah.
  2. Tambahkan mekanisme pembalikan untuk mengurangi atau membalikkan pola topping seperti kepala & bahu atau top ganda.
  3. Tambahkan target keuntungan sehingga kepemilikan berkurang ketika keuntungan kumulatif mencapai % dari total modal.

Kesimpulan

Secara keseluruhan, strategi Momentum Turtle Trend Tracking adalah sistem yang kuat untuk mengikuti tren jangka menengah hingga panjang. Ini menggabungkan indikator Turtle untuk identifikasi tren dan filter ATR untuk manajemen volatilitas untuk menangkap tren yang kuat. Selain itu, kontrol risiko dan penyesuaian parameter kuat untuk mengurangi penarikan. Peningkatan lebih lanjut seperti ukuran dinamis, pembalikan dan pengambilan keuntungan dapat meningkatkan kinerja.


/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// HA /////////////
haTicker = heikinashi(syminfo.tickerid)
haOpen = security(haTicker, "D", open)
haHigh = security(haTicker, "D", high)
haLow = security(haTicker, "D", low)
haClose = security(haTicker, "D", close)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = haOpen < haClose and isMoving()
short = haOpen > haClose and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red)
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)

Lebih banyak