
Strategi pengesanan trend tsunami dinamik adalah strategi pengesanan trend berdasarkan undang-undang perdagangan tsunami. Ia menggunakan indikator tsunami untuk mengenal pasti trend, dan digabungkan dengan indikator dinamik untuk menyaring sebahagian daripada perdagangan bising. Kelebihan utama strategi ini adalah keupayaan untuk menangkap trend harga yang kuat dan mencapai keuntungan tambahan.
Strategi ini menggunakan sistem penembusan asas dalam indikator tsunami untuk menentukan arah trend. Khususnya, apabila harga penutupan lebih tinggi daripada harga tertinggi dalam 20 hari terakhir, ia adalah isyarat bullish, dan apabila harga penutupan lebih rendah daripada harga terendah dalam 20 hari terakhir, ia adalah isyarat bearish.
Untuk menapis sebahagian daripada perdagangan bising, strategi ini juga menambahkan faktor momentum. Jika harga turun naik kurang dari 5 ATR, maka strategi tidak akan memasuki perdagangan. Ini dapat mengelakkan kerugian yang disebabkan oleh perdagangan kecil kerana terlalu banyak kepala kosong.
Selepas membuka kedudukan, strategi menggunakan nilai N dalam prinsip tebing untuk menembusi exit untuk menghentikan kerugian. Sistem ini menetapkan titik berhenti berdasarkan harga tertinggi dan terendah dalam 20 hari terakhir. Sebagai contoh, harga berhenti yang lebih sederhana adalah ATR 2N di bawah harga terendah dalam 20 hari terakhir.
Kelebihan utama strategi ini adalah ia menggabungkan trend tracking dan pengurusan momentum. Sistem perdagangan pirus dapat menangkap trend harga pertengahan dengan tepat dan mengelakkan gangguan dari bunyi pasaran. Menambah penapis momentum ATR dapat mengurangkan jumlah perdagangan yang tidak perlu, dan dengan itu meningkatkan ruang keuntungan.
Secara khusus, strategi ini mempunyai beberapa kelebihan:
Walaupun terdapat banyak ruang untuk pengoptimuman strategi ini, ia juga mempunyai beberapa risiko yang perlu dielakkan:
Berdasarkan analisis risiko di atas, terdapat beberapa penambahbaikan utama dalam strategi ini:
Strategi pengesanan trend tsunami dinamik secara keseluruhan adalah program pengesanan trend garis tengah yang sangat praktikal. Ia menggabungkan indikator penilaian trend tsunami dan penapis gegaran indikator ATR, yang dapat mengunci trend harga yang kuat. Di samping itu, kawalan risiko dan pengoptimuman parameter strategi juga sangat tepat, yang dapat mengurangkan kemunduran.
/*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)