Tài nguyên đang được tải lên... tải...

Supertrend và CCI Scalping Strategy

Tác giả:ChaoZhang, Ngày: 2024-02-26 10:39:49
Tags:

img

Tổng quan

Chiến lược này dựa trên hai chỉ số Super Trend với các thiết lập tham số khác nhau và chỉ số CCI, nhằm mục đích nắm bắt biến động giá ngắn hạn cho giao dịch tần số cao. Chỉ số Super Trend đánh giá hướng xu hướng một cách năng động bằng cách tính toán ATR, trong khi chỉ số CCI được sử dụng để xác định xem thị trường có mua quá nhiều hay bán quá nhiều hay không. Chiến lược kết hợp cả hai để tạo ra tín hiệu giao dịch.

Chiến lược logic

  • Sử dụng 14 giai đoạn ATR để tính toán siêu xu hướng nhanh, với yếu tố được đặt thành 3; sử dụng 14 giai đoạn ATR để tính toán siêu xu hướng chậm, với yếu tố được đặt thành 6.

  • Khi siêu xu hướng nhanh vượt qua dưới giá, và siêu xu hướng chậm vẫn còn trên giá, nó được đánh giá là một tín hiệu đảo ngược có thể đi dài; khi siêu xu hướng nhanh vượt qua trên giá, và siêu xu hướng chậm vẫn còn dưới giá, nó được đánh giá là một tín hiệu đảo ngược có thể đi ngắn.

  • Đồng thời, sử dụng CCI để đánh giá xem thị trường có bị mua quá mức hay bán quá mức không. CCI trên 100 cho thấy thị trường bị mua quá mức, trong khi dưới -100 có nghĩa là thị trường bị bán quá mức. Các tín hiệu CCI được kết hợp để lọc ra các đột phá sai.

  • Khả năng chỉ số Super Trend phát ra tín hiệu đảo ngược cao hơn khi thị trường mua quá mức hoặc bán quá mức. Đây là logic cốt lõi của chiến lược.

Phân tích lợi thế

  • Kết hợp Super Trend để xác định các điểm đảo ngược xu hướng và CCI để đánh giá các điều kiện mua quá mức / bán quá mức có thể lọc hiệu quả các sự đột phá sai và cải thiện chất lượng tín hiệu.

  • Super Trend nhanh và chậm tạo ra tín hiệu giao dịch để đạt được bước vào và bước ra tần số cao.

  • Các tham số CCI và các tham số Super Trend có thể được điều chỉnh linh hoạt để thích nghi với các điều kiện thị trường khác nhau.

  • Ý tưởng chiến lược là rõ ràng và dễ hiểu, và điều chỉnh tham số cũng tương đối đơn giản.

Rủi ro và giải pháp

  • Bản thân Super Trend có tác dụng chậm trễ, có thể bỏ lỡ cơ hội đảo ngược đầu tiên.

  • CCI có rủi ro gọi lại, và biến động quá mức cũng có thể gây ra giao dịch lặp đi lặp lại.

  • Giao dịch tần số cao có xu hướng làm tăng tần số giao dịch và chi phí giao dịch.

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

  • Sự kết hợp các tham số có thể được đi qua và tối ưu hóa dựa trên mức rút tối đa hoặc tỷ lệ lợi nhuận / lỗ để tìm các tham số tối ưu.

  • Các phương pháp học máy như Random Forest có thể được sử dụng để lựa chọn tính năng trên các tham số để đạt được tối ưu hóa tham số tự động.

  • Khám phá việc giới hạn số lượng tối đa các vị trí mở trong một chu kỳ nhất định để kiểm soát rủi ro.

Kết luận

Chiến lược sử dụng đầy đủ chỉ số siêu xu hướng để xác định các điểm đảo ngược xu hướng ngắn hạn, được bổ sung bằng chỉ số CCI để lọc tín hiệu. Khi cài đặt tham số hợp lý, nó có thể đạt được giao dịch ngắn hạn hiệu quả. Nhưng cũng cần phải cảnh giác với rủi ro phát sinh từ giao dịch quá mức và liên tục cải thiện hiệu suất chiến lược thông qua điều chỉnh tham số và tối ưu hóa thuật toán.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Supertrend & CCI Strategy Scalp", overlay=true)

// SuperTrend Settings
atrLength1 = input(14, "ATR Length 1")
factor1 = input(3.0, "Factor 1" )
atrLength2 = input(14, "ATR Length 2")
factor2 = input(6.0, "Factor 2")
 // Calculate SuperTrend 1
[superTrend1, direction1] = ta.supertrend(factor1, atrLength1)

// // Calculate SuperTrend 2
[superTrend2, direction2] = ta.supertrend(factor2, atrLength2)

// superTrend1 := barstate.isfirst ? na : superTrend1
// upTrend1 =    plot(direction1 < 0 ? superTrend1 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend1 =  plot(direction1 < 0 ? na : superTrend1, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle1, upTrend1,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle1, downTrend1, color.new(color.red,   90), fillgaps = false)

// superTrend2 := barstate.isfirst ? na : superTrend2
// upTrend2 =    plot(direction1 < 0 ? superTrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
// downTrend2 =  plot(direction1 < 0 ? na : superTrend2, "Down Trend", color = color.red,   style = plot.style_linebr)
// bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)

// fill(bodyMiddle2, upTrend2,   color.new(color.green, 90), fillgaps = false)
// fill(bodyMiddle2, downTrend2, color.new(color.red,   90), fillgaps = false)
// CCI Settings
//cciLength = input.int(14, title="CCI Length")
cciLevel = input.int(100, title="CCI Level")

// Calculate CCI
length = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))
//plot(cci, "CCI", color=#2962FF)
//band1 = hline(100, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
//hline(0, "Middle Band", color=color.new(#787B86, 50))
//band0 = hline(-100, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
//fill(band1, band0, color=color.rgb(33, 150, 243, 90), title="Background")

ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="Smoothing")

smoothingLine = ma(cci, smoothingLength, typeMA)
//plot(smoothingLine, title="Smoothing Line", color=#f37f20, display=display.none)


// Entry conditions
longCondition = superTrend1 > close and superTrend2 < close and smoothingLine < -100
shortCondition = superTrend1 < close and superTrend2 > close and smoothingLine > 100

/// Initialize variables to track trade direction
var bool isLong = na
var bool isShort = na

// Strategy entry and exit
if (longCondition)
    strategy.entry("Long", strategy.long)
    isLong := true
    isShort := false
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    isShort := true
    isLong := false

// Close Long positions
if (isLong)
    strategy.close("Long", when = superTrend1 < close or superTrend2 > close or cci > 100)

// Close Short positions
if (isShort)
    strategy.close("Short", when = superTrend1 > close or superTrend2 < close or cci < -100)



// Plotting
plot(superTrend1, color=color.blue, title="SuperTrend 1")
plot(superTrend2, color=color.red, title="SuperTrend 2")
//plot(cci, color=color.orange, title="CCI")



Thêm nữa