Strategi Pengesanan Trend Momentum Turtle

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

img

Ringkasan

Strategi Pengesanan Trend Turtle Momentum adalah strategi mengikuti trend berdasarkan peraturan Perdagangan Turtle. Ia menggunakan Indikator Turtle untuk mengenal pasti trend dan menggabungkan metrik momentum untuk menapis beberapa perdagangan bising. Kelebihan utama strategi ini adalah keupayaan untuk menangkap trend harga yang kuat dan mencapai pulangan yang berlebihan.

Prinsip Strategi

Strategi ini menggunakan sistem breakout dalam Turtle Indicators untuk menentukan arah trend. Khususnya, apabila harga penutupan lebih tinggi daripada harga tertinggi dalam tempoh 20 hari yang lalu, ia adalah isyarat bullish dan pergi panjang; apabila harga penutupan lebih rendah daripada harga terendah dalam tempoh 20 hari yang lalu, ia adalah isyarat bearish dan strategi pergi pendek.

Untuk menapis beberapa perdagangan bunyi bising, strategi ini juga menggabungkan faktor momentum. Jika turun naik harga kurang daripada 5 ATR, strategi tidak akan memasuki perdagangan. Ini mengelakkan kerugian dari whipsaws di pasaran sampingan.

Selepas membuka kedudukan, strategi ini menggunakan keluar N-breakout dalam peraturan Turtle asal untuk kerugian berhenti. Sistem ini menetapkan kerugian berhenti berdasarkan harga tertinggi dan terendah dalam tempoh 20 hari yang lalu. Sebagai contoh, kerugian berhenti untuk kedudukan panjang akan menjadi 2N ATR di bawah yang terendah dalam tempoh 20 hari yang lalu.

Analisis Kelebihan

Kelebihan terbesar strategi ini ialah ia menggabungkan kedua-dua trend berikut dan pengurusan momentum. Sistem penyu boleh dengan tepat menangkap trend jangka pertengahan dalam harga tanpa diganggu oleh bunyi bising pasaran. penapis momentum ATR tambahan seterusnya mengurangkan bilangan dagangan yang tidak perlu, dengan itu meningkatkan potensi keuntungan.

Secara khusus, strategi ini mempunyai kekuatan berikut:

  1. Indikator penyu mengenal pasti dengan tepat trend dan mengesan trend jangka menengah.
  2. Penapis momentum mengurangkan dagangan yang tidak perlu dan mengelakkan kerugian pada kekerapan dagangan.
  3. Langkah-langkah kawalan risiko yang kukuh membolehkan menghentikan kerugian tepat pada masanya apabila trend berbalik.
  4. Secara keseluruhannya penyesuaian strategi sejajar dengan prinsip Turtle asal.

Analisis Risiko

Walaupun terdapat potensi yang besar untuk pengoptimuman lanjut, strategi ini juga membawa beberapa risiko untuk menjaga:

  1. Tidak dapat menangani turun naik yang berlebihan untuk pegangan jangka panjang. Ukuran kedudukan penyu tidak mempertimbangkan turun naik yang boleh membawa kepada kerugian yang terlalu besar.
  2. Harga stop loss berisiko diambil semasa pembalikan yang melampau, yang membawa kepada kerugian yang lebih tinggi daripada yang dijangkakan.
  3. Kekurangan sasaran keuntungan bermakna pegangan yang berlebihan dan risiko memegang kedudukan bawah air.

Peluang Peningkatan

Berdasarkan risiko di atas, peluang pengoptimuman utama termasuk:

  1. Pertimbangkan model saiz kedudukan dinamik yang diselaraskan untuk turun naik untuk mengurangkan saiz pada perdagangan yang kehilangan.
  2. Tambah mekanisme pembalikan untuk mengurangkan atau membalikkan corak topping seperti kepala & bahu atau tops berganda.
  3. Tambah sasaran keuntungan supaya pegangan dikurangkan apabila keuntungan kumulatif mencapai% daripada jumlah modal.

Kesimpulan

Secara keseluruhan, strategi Pemantauan Trend Turtle adalah sistem yang kukuh untuk trend jangka menengah hingga panjang. Ia menggabungkan penunjuk Turtle untuk pengenalan trend dan penapis ATR untuk pengurusan turun naik untuk menangkap trend yang kuat. Selain itu kawalan risiko dan penyesuaian parameter adalah kukuh untuk mengurangkan pengeluaran. Peningkatan lanjut seperti ukuran dinamik, pembalikan dan pengambilan keuntungan dapat meningkatkan prestasi.


/*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 lanjut