Strategi breakout adaptif PMax berdasarkan indikator RSI dan T3


Tanggal Pembuatan: 2023-11-22 15:03:08 Akhirnya memodifikasi: 2023-11-22 15:03:08
menyalin: 0 Jumlah klik: 787
1
fokus pada
1617
Pengikut

Strategi breakout adaptif PMax berdasarkan indikator RSI dan T3

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif yang menggunakan RSI dan indikator T3 untuk menilai tren, yang dikombinasikan dengan indikator ATR untuk menetapkan garis stop loss, untuk mencapai PMax yang beradaptasi untuk menembus. Gagasan utamanya adalah untuk mengoptimalkan penilaian tren dan pengaturan stop loss untuk mengendalikan risiko sekaligus meningkatkan profitabilitas.

Prinsip Strategi

  1. Perhitungan RSI dan T3 untuk menentukan tren

    • Indeks RSI digunakan untuk menilai apakah sebuah saham sudah terbeli atau terjual.
    • Perhitungan indikator T3 berdasarkan RSI untuk menilai tren
  2. Setting PMax Adaptif Stop Loss Line Berdasarkan Indikator ATR

    • Perhitungan indikator ATR sebagai representasi dari volatilitas
    • Atur garis stop loss di atas dan di bawah indikator T3 dengan lebar garis sebagai beberapa kali lipat dari indikator ATR
    • Mencapai penyesuaian adaptasi dari stop loss
  3. Break-in dan Stop-Loss

    • Ketika harga naik melewati indikator T3 dianggap sebagai sinyal beli
    • Keluar dari posisi saat ini ketika harga melewati batas stop loss

Keunggulan Strategis

Strategi ini memiliki beberapa keuntungan utama:

  1. Kombinasi RSI dan T3 lebih akurat dalam menentukan tren
  2. PMax mengadaptasi mekanisme pengendalian kerugian risiko
  3. Indikator ATR berfungsi sebagai representasi dari volatilitas untuk mengatur lebar garis stop loss, menghindari terlalu radikal
  4. Penarikan dan Profitabilitas

Risiko Strategis

Strategi ini memiliki risiko utama sebagai berikut:

  1. Risiko terbalik

Ketika terjadi reversal harga dalam jangka pendek, dapat menyebabkan stop loss yang dipicu untuk menghasilkan kerugian. Anda dapat dengan tepat melepaskan stop loss untuk mengurangi dampak reversal.

  1. Risiko kegagalan dalam menilai tren

RSI dan T3 tidak 100% efektif dalam menentukan tren, dan kesalahan dalam penilaian dapat menyebabkan kerugian. Parameter dapat disesuaikan atau dimasukkan ke dalam indikator lain untuk dioptimalkan.

Arah optimasi strategi

Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:

  1. Menambahkan indikator lain seperti Moving Average untuk membantu menilai tren
  2. Optimalkan parameter panjang RSI dan T3
  3. Ujilah berbagai ATR sebagai lebar stop loss line
  4. Keterlambatan stop loss line disesuaikan dengan pasar

Meringkaskan

Strategi ini mengintegrasikan keuntungan dari tiga indikator RSI, T3 dan ATR, yang memungkinkan kombinasi organik antara penilaian tren dan pengendalian risiko. Kombinasi ini memiliki akurasi penilaian yang tinggi, pengembalian yang terkendali, dibandingkan dengan indikator tunggal, dan merupakan strategi pelacakan tren yang andal. Ada ruang untuk pengoptimalan dalam hal parameter dan pengendalian risiko, dan secara keseluruhan merupakan strategi perdagangan kuantitatif yang direkomendasikan.

Kode Sumber Strategi
/*backtest
start: 2023-11-14 00:00:00
end: 2023-11-21 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic
//developer: @KivancOzbilgic
//author: @KivancOzbilgic

strategy("PMax on Rsi w T3 Strategy","PmR3St.", overlay=false, precision=2)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3)
length =input(8, "Tillson T3 Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
Periods = input(10,title="ATR Length", type=input.integer)
rsilength = input(14, minval=1, title="RSI Length")
showrsi = input(title="Show RSI?", type=input.bool, defval=true)
showsupport = input(title="Show Moving Average?", type=input.bool, defval=true)
showsignalsk = input(title="Show Crossing Signals?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
i = close>=close[1] ? close-close[1] : 0
i2 = close<close[1] ? close[1]-close : 0
Wwma_Func(src,rsilength)=>
    wwalpha = 1/ rsilength
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,rsilength)
AvUp = Wwma_Func(i,rsilength)
AvDown = Wwma_Func(i2,rsilength)
AvgUp = sma(i,rsilength)
AvgDown =sma(i2,rsilength)
k1 = high>close[1] ? high-close[1] : 0
k2 = high<close[1] ? close[1]-high : 0
k3 = low>close[1] ? low-close[1] : 0
k4 = low<close[1] ? close[1]-low : 0
AvgUpH=(AvgUp*(rsilength-1)+ k1)/rsilength
AvgDownH=(AvgDown*(rsilength-1)+ k2)/rsilength
AvgUpL=(AvgUp*(rsilength-1)+ k3)/rsilength
AvgDownL=(AvgDown*(rsilength-1)+ k4)/rsilength
rs = AvUp/AvDown
rsi= rs==-1 ? 0 : (100-(100/(1+rs)))
rsh=AvgUpH/AvgDownH
rsih= rsh==-1 ? 0 : (100-(100/(1+rsh)))
rsl=AvgUpL/AvgDownL
rsil= rsl==-1 ? 0 : (100-(100/(1+rsl)))
TR=max(rsih-rsil,abs(rsih-rsi[1]),abs(rsil-rsi[1]))
atr=sma(TR,Periods)
plot(showrsi ? rsi : na, "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=#9915FF, transp=90, title="Background")
T3e1=ema(rsi, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3
MAvg=T3
Pmax_Func(rsi,length)=>
    longStop = MAvg - Multiplier*atr
    longStopPrev = nz(longStop[1], longStop)
    longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
    shortStop = MAvg + Multiplier*atr
    shortStopPrev = nz(shortStop[1], shortStop)
    shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
    dir = 1
    dir := nz(dir[1], dir)
    dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
    PMax = dir==1 ? longStop: shortStop
PMax=Pmax_Func(rsi,length)
plot(showsupport ? MAvg : na, color=color.black, linewidth=2, title="T3")
pALL=plot(PMax, color=color.red, linewidth=2, title="PMax", transp=0)
alertcondition(cross(MAvg, PMax), title="Cross Alert", message="PMax - Moving Avg Crossing!")
alertcondition(crossover(MAvg, PMax), title="Crossover Alarm", message="Moving Avg BUY SIGNAL!")
alertcondition(crossunder(MAvg, PMax), title="Crossunder Alarm", message="Moving Avg SELL SIGNAL!")
alertcondition(cross(src, PMax), title="Price Cross Alert", message="PMax - Price Crossing!")
alertcondition(crossover(src, PMax), title="Price Crossover Alarm", message="PRICE OVER PMax - BUY SIGNAL!")
alertcondition(crossunder(src, PMax), title="Price Crossunder Alarm", message="PRICE UNDER PMax - SELL SIGNAL!")
buySignalk = crossover(MAvg, PMax)
plotshape(buySignalk and showsignalsk ? PMax*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
sellSignallk = crossunder(MAvg, PMax)
plotshape(sellSignallk and showsignalsk ? PMax*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(rsi, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (MAvg>PMax ? color.green : na) : na
shortFillColor = highlighting ? (MAvg<PMax ? color.red : na) : na
fill(mPlot, pALL, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, pALL, title="DownTrend Highligter", color=shortFillColor)

dummy0 = input(true, title = "=Backtest Inputs=")
FromDay    = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear   = input(defval = 2005, title = "From Year", minval = 2005)
ToDay      = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "To Year", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if buySignalk
    strategy.entry("Long", strategy.long,when=Timerange())
if sellSignallk
    strategy.entry("Short", strategy.short,when=Timerange())