Triple SuperTrend dan Strategi RSI Stoch

Penulis:ChaoZhang, Tanggal: 2023-12-06 14:29:00
Tag:

img

Gambaran umum

Strategi Triple SuperTrend dan Stoch RSI adalah strategi perdagangan kuantitatif yang menggabungkan beberapa trend timeframe berikut indikator SuperTrend dan sinyal overbought/oversold dari indikator Stoch RSI. Strategi ini menggunakan tiga indikator SuperTrend dengan pengaturan parameter yang berbeda untuk menentukan tren pasar dan menggabungkan sinyal Stoch RSI untuk menyaring sinyal perdagangan. Secara khusus, ketika dua indikator SuperTrend yang lebih cepat memberikan sinyal beli/jual bersamaan, jika indikator Stoch RSI mengkonfirmasi, posisi panjang/pendek yang sesuai akan diambil.

Logika Strategi

Logika inti dari strategi Triple SuperTrend dan Stoch RSI adalah menggabungkan indikator SuperTrend dengan parameter yang berbeda dan indikator Stoch RSI untuk penyaringan sinyal perdagangan untuk meningkatkan kualitas sinyal dan mengurangi sinyal palsu.

Pertama, strategi mengadopsi tiga indikator SuperTrend dengan pengaturan parameter yang bervariasi untuk menentukan tren pasar utama. Tiga indikator SuperTrend memiliki parameter mulai dari jangka waktu cepat hingga lambat, untuk menangkap perubahan tren pada tingkat yang berbeda. Ketika indikator SuperTrend tercepat dan kedua tercepat memberikan sinyal beli / jual bersamaan, kami membuat penilaian awal bahwa sinyal tersebut memiliki beberapa keandalan.

Kedua, indikator Stoch RSI diperkenalkan untuk menentukan apakah pasar terlalu banyak dibeli atau terlalu banyak dijual ketika sinyal terjadi. Indikator Stoch RSI menggabungkan kekuatan indikator RSI dan Stochastic, memungkinkan penilaian yang efektif tentang kondisi pasar yang terlalu banyak dibeli / terlalu banyak dijual. Ketika sinyal SuperTrend tercepat dan tercepat kedua sejajar dengan sinyal Stoch RSI, sinyal beli / jual akhir dapat dipicu.

Melalui kombinasi beberapa indikator dan kerangka waktu, Triple SuperTrend dan strategi Stoch RSI dapat secara efektif menyaring kebisingan pasar, meningkatkan keandalan sinyal, dan mengurangi perdagangan yang salah.

Keuntungan dari Strategi

Keuntungan terbesar dari strategi Triple SuperTrend dan Stoch RSI terletak pada kombinasi efektif dari beberapa indikator dan kerangka waktu, yang membawa manfaat berikut:

  1. Kombinasi tiga indikator SuperTrend dan Stoch RSI dapat sangat mengurangi kebisingan dan sinyal palsu yang datang dengan indikator individu.

  2. Meningkatkan rasio sinyal yang menguntungkan. Meskipun penurunan frekuensi sinyal, rasio sinyal yang menguntungkan melihat peningkatan yang signifikan.

  3. Cocok untuk pasar tren. Filter multi-frame waktu memudahkan menangkap tren jangka menengah hingga panjang, cocok dengan lingkungan pasar tren dengan baik.

  4. Pengoptimalan mudah untuk kinerja yang lebih baik. indikator triple memungkinkan kemungkinan yang lebih luas untuk optimasi parameter.

  5. Parameter yang dapat disesuaikan sesuai dengan gaya perdagangan pribadi. Parameter dapat diatur secara bebas agar lebih sesuai dengan gaya perdagangan seseorang.

Risiko dari Strategi

Ada juga beberapa risiko yang terkait dengan strategi Triple SuperTrend dan Stoch RSI:

  1. Mengurangi frekuensi sinyal. Mekanisme filter multilayer secara signifikan mengurangi frekuensi perdagangan strategi.

  2. Kecenderungan untuk melewatkan beberapa sinyal potensial. sifat konservatif membuat strategi cenderung kehilangan beberapa peluang menguntungkan.

  3. Meningkatnya ketergantungan parameter. lebih banyak indikator berarti kesulitan yang lebih besar dalam optimasi.

  4. Kemampuan mengikuti tren yang terbatas Kombinasi beberapa kerangka waktu juga membatasi fleksibilitas mengikuti tren dari strategi.

Untuk mengatasi risiko-risiko ini, langkah-langkah optimalisasi seperti menyesuaikan parameter indikator dan memperkenalkan indikator tambahan dapat diadopsi untuk meningkatkan pengendalian risiko sekaligus meningkatkan kualitas profitabilitas.

Arahan Optimasi

Masih ada ruang untuk optimasi lebih lanjut dari Triple SuperTrend dan strategi Stoch RSI:

  1. Sesuaikan parameter indikator untuk kombinasi terbaik. Lebih banyak set parameter dapat diuji untuk menemukan yang optimal.

  2. Memperkenalkan stop loss/take profit untuk pengendalian risiko yang lebih baik.

  3. Masukkan lebih banyak indikator untuk validasi sinyal, misalnya indikator volume.

  4. Membangun kemampuan adaptif untuk mengoptimalkan parameter secara otomatis sesuai dengan perubahan dinamika pasar.

  5. Menggabungkan algoritma pembelajaran mesin untuk prediksi kinerja, menilai akurasi sinyal.

Dengan optimasi terus menerus, strategi Triple SuperTrend dan Stoch RSI dapat berkembang menjadi sistem perdagangan yang stabil dan efisien, memberikan alfa yang cukup.

Kesimpulan

Strategi Triple SuperTrend dan Stoch RSI berhasil menggabungkan analisis multi-frame timeframe dan penilaian overbought/oversold menjadi strategi trading trend berikut yang unik. Strategi ini mempertahankan dua keuntungan trend berikut dan penyaringan indikator, meningkatkan sinyal menguntungkan sambil mengurangi sinyal palsu. Meskipun risiko dan ruang optimasi masih ada, profitabilitas dan stabilitasnya dapat ditingkatkan lebih lanjut melalui penyesuaian parameter dan optimasi strategi. Secara keseluruhan, strategi Triple SuperTrend dan Stoch RSI memberikan pilihan strategi trading kuantitatif berkualitas tinggi.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-04-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © M3RZI

//@version=4
strategy("3x Supertrend and Stoch RSI", overlay = true, max_bars_back = 1000)

//INPUTS
STATRLENGTH1 = input(10, title = "Fast Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT1 = input(1, title = "Fast Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH2 = input(11, title = "Medium Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT2 = input(2, title = "Medium Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH3 = input(12, title = "Slow Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT3 = input(3, title = "Slow Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")

stochK = input(3, title = "K (Stochastic Fast)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochD = input(3, title = "D (Signal Line)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiLength = input(14, title = "RSI Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochLength = input(14, title = "Stochastic Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiSource = input(close, title = "RSI Source", type = input.source, group = "STOCHASTIC RSI SETTINGS")
stochRestrictions = input(false, title = "Restrict crosses to overbought/oversold territory", type = input.bool, group = "STOCHASTIC RSI SETTINGS")
overboughtLine = input(80, title = "Stochastic  RSI Upper Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
oversoldLine = input(20, title = "Stochastic RSI Lower Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")

EMALength  = input(200, title = "EMA Length", type = input.integer, group = "EMA SETTINGS")

SLStrategy = input("ATR Based", title = "Stop Loss Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
SLATRLength = input(14, title = "Stop Loss ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
SLATRMult = input(2.7, title = "Stop Loss ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")
TPStrategy = input("ATR Based", title = "Take Profit Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
TPATRLength = input(14, title = "Take Profit ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
TPATRMult = input(1.6, title = "Take Profit ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")

//SUPERTRENDS
[superTrend1,dir1] = supertrend(STATRMULT1,STATRLENGTH1)
[superTrend2,dir2] = supertrend(STATRMULT2,STATRLENGTH2)
[superTrend3,dir3] = supertrend(STATRMULT3,STATRLENGTH3)

directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : na
directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : na
directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : na

//STOCH RSI
rsi = rsi(rsiSource, rsiLength)
k = sma(stoch(rsi, rsi, rsi, stochLength), stochK)
d = sma(k, stochD)

//EMA
ema = ema(close,EMALength)

//CONDITIONS LONG AND SHORT

var long = false
var longCondition = false
var short = false
var shortCondition = false
var drawing = false
var TP = 0.0
var SL = 0.0
var middle = 0.0
var initial = 0

stopSize = atr(SLATRLength) * SLATRMult
profitSize = atr(TPATRLength) * TPATRMult
longStop = close - stopSize
longProfit = close + profitSize
current = close
shortStop = close + stopSize
shortProfit = close - profitSize
barInitial = bar_index

if  stochRestrictions
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and k < oversoldLine and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and k > overboughtLine and not short and not drawing
else
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and not short and not drawing

if longCondition
    long := true
    short := false
    drawing := true
    TP := longProfit
    middle := current
    SL := longStop
    initial := barInitial
    strategy.entry("Long", strategy.long, 10)
    strategy.exit("Long exit","Long", limit = TP, stop = SL)
    alert("Long signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,low,text = "Long\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.belowbar, textcolor = color.white, color = color.green, size = size.small,  style = label.style_label_up)

if shortCondition
    short := true
    long := false
    drawing := true
    TP := shortProfit
    middle := current
    SL := shortStop
    initial := barInitial
    strategy.entry("Short", strategy.short, 10)
    strategy.exit("Short exit","Short",limit = TP , stop = SL)
    alert("Short signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,high,text = "Short\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.abovebar, textcolor = color.white, color = color.red, size = size.small,  style = label.style_label_down)

if long and (high[1] >= TP or low[1] <= SL)
    drawing := false
    long := false
    if high[1] >= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (Long)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_down)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (Long)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_up)

if short and (low[1] <= TP or high[1] >= SL)
    drawing :=  false
    short := false
    if low[1] <= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (short)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (short)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down)

//STRATEGY
//strategy.entry("buy", strategy.long, 10, when = longCondition)
//strategy.exit("bracket", "buy",  10, limit = TP, stop = SL)
//strategy.entry("short", strategy.long, 10, when = shortCondition)
//strategy.exit("bracket", "short",  10, limit = TP, stop = SL)

//DRAWING
plotshape(longCondition, title = "Long Signal", location=location.belowbar, style=shape.labelup, color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(shortCondition, title = "Short Signal", location=location.abovebar, style=shape.labeldown, color=color.red, textcolor=color.white, size=size.small, text="Short")
profitLine = plot(drawing and drawing[1] ? TP : na, title = "Take profit", color = color.green, style = plot.style_linebr)
currentLine =plot(drawing and drawing[1]  ? middle : na, title = "Middle Line", color = color.white, style = plot.style_linebr)
lossLine = plot(drawing and drawing[1]  ? SL : na, title = "Stop Loss", color = color.red, style = plot.style_linebr)
fill(currentLine,profitLine, title = "Profit Background" ,color = color.new(color.green,75))
fill(currentLine,lossLine, title = "Loss Background" ,color = color.new(color.red,75))
plot(superTrend1, title = "Fast Supertrend", color = dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title = "Medium Supertrend", color = dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title = "Slow Supertrend", color = dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)
plot(ema, title = "EMA",color = color.yellow)
//plot(k, color = color.blue)
//plot(d, color = color.orange)
//h1 = hline(80)
//h2 = hline(20)
//fill(h1,h2, color = color.new(color.purple,60))




Lebih banyak