Triple SuperTrend và Stoch RSI chiến lược

Tác giả:ChaoZhang, Ngày: 2023-12-06 14:29:00
Tags:

img

Tổng quan

Triple SuperTrend và Stoch RSI chiến lược là một chiến lược giao dịch định lượng kết hợp theo xu hướng nhiều khung thời gian của chỉ số SuperTrend và tín hiệu mua quá mức / bán quá mức từ chỉ số Stoch RSI. Chiến lược sử dụng ba chỉ số SuperTrend với các thiết lập tham số khác nhau để xác định xu hướng thị trường và kết hợp các tín hiệu Stoch RSI để lọc các tín hiệu giao dịch. Cụ thể, khi hai chỉ số SuperTrend nhanh hơn cung cấp tín hiệu mua / bán đồng thời, nếu chỉ số Stoch RSI xác nhận, các vị trí dài / ngắn tương ứng sẽ được thực hiện.

Chiến lược logic

Lý thuyết cốt lõi của chiến lược Triple SuperTrend và Stoch RSI là kết hợp các chỉ số SuperTrend với các thông số khác nhau và chỉ số Stoch RSI để lọc tín hiệu giao dịch để cải thiện chất lượng tín hiệu và giảm tín hiệu sai.

Đầu tiên, chiến lược sử dụng ba chỉ số SuperTrend với các thiết lập tham số khác nhau để xác định xu hướng thị trường chính. Ba chỉ số SuperTrend có các tham số từ khung thời gian nhanh đến chậm, để nắm bắt những thay đổi xu hướng ở các mức độ khác nhau. Khi các chỉ số SuperTrend nhanh nhất và nhanh nhất thứ hai cung cấp tín hiệu mua / bán đồng thời, chúng tôi đưa ra phán quyết sơ bộ rằng tín hiệu có độ tin cậy nhất định.

Thứ hai, chỉ số Stoch RSI được giới thiệu để xác định xem thị trường có quá mua hay quá bán khi tín hiệu xảy ra không. Chỉ số Stoch RSI kết hợp điểm mạnh của chỉ số RSI và Stochastic, cho phép đánh giá hiệu quả về điều kiện thị trường quá mua / quá bán. Khi tín hiệu SuperTrend nhanh nhất và nhanh nhất thứ hai phù hợp với tín hiệu Stoch RSI, các tín hiệu mua / bán cuối cùng có thể được kích hoạt.

Thông qua sự kết hợp của nhiều chỉ số và khung thời gian, chiến lược Triple SuperTrend và Stoch RSI có thể lọc hiệu quả tiếng ồn thị trường, cải thiện độ tin cậy tín hiệu và giảm các giao dịch không chính xác.

Ưu điểm của Chiến lược

Ưu điểm lớn nhất của chiến lược Triple SuperTrend và Stoch RSI nằm ở sự kết hợp hiệu quả của nhiều chỉ số và khung thời gian, mang lại những lợi ích sau:

  1. Giảm các tín hiệu giao dịch không chính xác. Sự kết hợp của các chỉ số SuperTrend và Stoch RSI ba lần có thể làm giảm đáng kể tiếng ồn và tín hiệu sai đi kèm với các chỉ số riêng lẻ.

  2. Cải thiện tỷ lệ tín hiệu có lợi. Mặc dù giảm tần số tín hiệu, tỷ lệ tín hiệu có lợi được cải thiện đáng kể.

  3. Thích hợp cho các thị trường xu hướng. Việc lọc nhiều khung thời gian tạo điều kiện cho việc nắm bắt xu hướng trung bình đến dài hạn, phù hợp với môi trường thị trường xu hướng tốt.

  4. Tối ưu hóa dễ dàng cho hiệu suất tốt hơn. Các chỉ số ba cho phép khả năng tối ưu hóa tham số rộng hơn.

  5. Các tham số có thể tùy chỉnh theo phong cách giao dịch cá nhân. Các tham số có thể được điều chỉnh tự do để phù hợp hơn với phong cách giao dịch của riêng bạn.

Rủi ro của chiến lược

Ngoài ra còn có một số rủi ro liên quan đến chiến lược Triple SuperTrend và Stoch RSI:

  1. Tỷ lệ tín hiệu giảm. Cơ chế lọc nhiều lớp làm giảm đáng kể tần suất giao dịch của chiến lược.

  2. Có xu hướng bỏ lỡ một số tín hiệu tiềm năng. Bản chất bảo thủ làm cho chiến lược có khả năng bỏ lỡ một số cơ hội sinh lợi.

  3. Tăng phụ thuộc tham số. Các chỉ số nhiều hơn có nghĩa là khó khăn hơn trong tối ưu hóa.

  4. Khả năng theo dõi xu hướng hạn chế. Sự kết hợp nhiều khung thời gian cũng hạn chế tính linh hoạt của chiến lược theo dõi xu hướng.

Để giải quyết những rủi ro này, các biện pháp tối ưu hóa như điều chỉnh các tham số chỉ số và giới thiệu nhiều chỉ số bổ sung hơn có thể được áp dụng để tăng cường kiểm soát rủi ro trong khi cải thiện chất lượng lợi nhuận.

Hướng dẫn tối ưu hóa

Vẫn còn chỗ để tối ưu hóa thêm chiến lược Triple SuperTrend và Stoch RSI:

  1. Điều chỉnh các thông số chỉ số cho sự kết hợp tốt nhất.

  2. Đưa ra dừng lỗ / lấy lợi nhuận để kiểm soát rủi ro tốt hơn.

  3. Thêm nhiều chỉ số để xác nhận tín hiệu, ví dụ như chỉ số khối lượng.

  4. Xây dựng trong khả năng thích nghi để tự động tối ưu hóa các thông số theo thay đổi động lực thị trường.

  5. Kết hợp các thuật toán học máy để dự đoán hiệu suất, đánh giá độ chính xác tín hiệu.

Với tối ưu hóa liên tục, chiến lược Triple SuperTrend và Stoch RSI có thể phát triển thành một hệ thống giao dịch ổn định, hiệu quả, cung cấp alpha đáng kể.

Kết luận

Chiến lược Triple SuperTrend và Stoch RSI kết hợp thành công phân tích nhiều khung thời gian và phán đoán mua quá mức / bán quá mức thành một chiến lược giao dịch theo xu hướng độc đáo. Nó giữ lại hai lợi thế của việc theo xu hướng và lọc chỉ số, cải thiện các tín hiệu có lợi trong khi giảm các tín hiệu sai. Mặc dù rủi ro và không gian tối ưu hóa vẫn tồn tại, lợi nhuận và sự ổn định của nó có thể được tăng thêm thông qua điều chỉnh tham số và tối ưu hóa chiến lược. Nhìn chung, chiến lược Triple SuperTrend và Stoch RSI cung cấp một lựa chọn chiến lược giao dịch định lượng chất lượng cao.


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




Thêm nữa