Strategi Pembalikan Harian Super Trend


Tanggal Pembuatan: 2024-02-22 16:22:28 Akhirnya memodifikasi: 2024-02-22 16:22:28
menyalin: 0 Jumlah klik: 724
1
fokus pada
1617
Pengikut

Strategi Pembalikan Harian Super Trend

Ringkasan

Super Trend Daily Reversal Strategy adalah strategi perdagangan kuantitatif yang menggunakan indikator super trend untuk menentukan tren pasar, menggabungkan harga terobosan dan rata-rata real range untuk menghitung stop loss, dan menggunakan indikator perubahan tingkat harga untuk memfilter sinyal super trend. Strategi ini berlaku untuk garis matahari dan periode waktu yang lebih tinggi, dapat digunakan di pasar seperti mata uang digital dan saham.

Prinsip Strategi

Indikator supertrend didasarkan pada rata-rata rentang fluktuasi nyata (ATR), yang dapat lebih jelas menilai arah tren pasar. Ketika harga menembus supertrend, itu adalah sinyal downward, dan ketika harga menembus downward, itu adalah sinyal bullish.

Strategi ini didukung dengan penggunaan indikator Rate of Change (ROC) untuk memfilter indikator supertrend, untuk menghindari sinyal yang tidak efektif. Hanya berpartisipasi dalam sinyal supertrend ketika harga berfluktuasi besar, atau tidak berpartisipasi.

Dalam hal stop loss, strategi ini menawarkan dua jenis stop loss: stop loss tetap dengan rasio stop loss dan stop loss otomatis yang berkurang berdasarkan ATR. Stop loss tetap sederhana dan langsung, dan stop loss ATR dapat menyesuaikan jangkauan stop loss sesuai dengan volatilitas pasar.

Kondisi masuk adalah jika indikator supertrend berbalik dan indikator rasio perubahan harga melewati filter. Kondisi keluar adalah jika indikator supertrend berbalik lagi atau melewati garis stop loss. Strategi ini mengikuti prinsip pelacakan tren dan hanya mengizinkan satu posisi per arah.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah bahwa menggunakan indikator tren super untuk menentukan arah tren dengan kejelasan dan stabilitas yang lebih tinggi, dan noise yang lebih kecil dibandingkan dengan rata-rata bergerak biasa. Selain itu, strategi ini menambahkan indikator tingkat perubahan harga yang efektif memfilter beberapa sinyal palsu.

ATR juga memungkinkan strategi ini untuk beradaptasi dengan lingkungan pasar yang lebih luas. Jika volatilitas meningkat, stop loss akan secara otomatis melonggarkan dan maksimal mengunci keuntungan.

Dari hasil pengujian, strategi ini berkinerja sangat baik di pasar bullish.

Analisis risiko

Risiko utama dari strategi ini adalah kesalahan dalam memprediksi pembalikan tren, yang dapat menyebabkan kehilangan sinyal pembalikan atau menghasilkan sinyal pembalikan yang tidak perlu. Hal ini biasanya terjadi ketika harga berulang kali menyortir di dekat area dukungan atau resistensi utama.

Selain itu, pengaturan stop loss yang terlalu longgar juga dapat menyebabkan peningkatan kerugian. Stop loss ATR disesuaikan dengan volatilitas pasar, sehingga stop loss yang lebih lebar dapat ditarik pada saat terjadi kejutan pasar.

Untuk menghadapi risiko di atas, dapat dipersingkat sesuai dengan siklus ATR atau menyesuaikan faktor perkalian dari ATR stop loss. Juga dapat menambahkan indikator tambahan untuk menentukan daerah resistensi pendukung yang penting, untuk menghindari daerah-daerah yang mengirimkan sinyal yang menyesatkan.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Menyesuaikan parameter indikator supertrend, mengoptimalkan siklus ATR dan kelipatan ATR untuk membuat garis supertrend lebih halus.

  2. Menyesuaikan parameter dari indikator rasio perubahan harga, mengoptimalkan siklus dan nilai terendah dari rasio perubahan, mengurangi sinyal palsu.

  3. Cobalah berbagai mekanisme stop loss, seperti tracking stop loss, atau mengoptimalkan stop loss dari stop loss tetap.

  4. Menambahkan indikator penilaian tambahan, mengidentifikasi resistensi pendukung utama, dan menghindari kesalahan penilaian untuk membalikkan tren.

  5. Uji pengaturan parameter dan efek dari varietas yang berbeda untuk menemukan kombinasi optimal.

  6. Optimalkan pengembalian untuk menemukan pengaturan parameter yang optimal.

Meringkaskan

Strategi super trend day line reversal secara keseluruhan adalah strategi pelacakan tren yang lebih stabil dan andal. Ini menggabungkan indikator super trend dan indikator tingkat perubahan harga untuk memfilter dan secara efektif mengidentifikasi arah tren garis tengah dan panjang.

Kode Sumber Strategi
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, 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 ///////////////
_1 = input(false,  "════════ Test Period ═══════")
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(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Super Trend /////////////
_2 = input(false,  "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)

atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop :=  close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length",  minval=1)
pcntChange = input(6, "ROC % Change", 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 = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 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])

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

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[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 = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)