Kênh Gaussian đa giai đoạn kết hợp với chiến lược theo dõi xu hướng StochRSI

RSI HLC3 TR SMA BAND
Ngày tạo: 2025-02-18 13:50:36 sửa đổi lần cuối: 2025-02-18 13:50:36
sao chép: 3 Số nhấp chuột: 503
1
tập trung vào
1617
Người theo dõi

Kênh Gaussian đa giai đoạn kết hợp với chiến lược theo dõi xu hướng StochRSI

Tổng quan

Chiến lược này là một hệ thống giao dịch theo dõi xu hướng dựa trên Gaussian Ripple và StochRSI. Chiến lược này sử dụng Gaussian Channel để xác định xu hướng thị trường và kết hợp với StochRSI để tối ưu hóa thời gian vào. Hệ thống sử dụng phương pháp kết hợp đa phương thức để xây dựng Gaussian Channel, theo dõi xu hướng giá bằng cách điều chỉnh động lực của quỹ đạo lên xuống, để theo dõi chính xác xu hướng thị trường.

Nguyên tắc chiến lược

Nền tảng của chiến lược là một kênh giá được xây dựng dựa trên thuật toán Goslin Wave. Thực hiện cụ thể bao gồm một số bước quan trọng sau:

  1. Sử dụng hàm đa thức f_filt9x để thực hiện các sóng Gaussian bậc 9 để cải thiện hiệu quả của các sóng Gaussian bằng cách tối ưu hóa cực
  2. Đường sóng chính và kênh tỷ lệ dao động dựa trên giá HLC3
  3. Khởi động chế độ giảm Lag để giảm độ trễ của vibrator, chế độ FastResponse để tăng tốc độ đáp ứng
  4. Sử dụng chỉ số StochRSI để xác định tín hiệu giao dịch trong phạm vi mua và bán quá mức ((8020)
  5. Tăng đường Gauss và giá phá vỡ đường ray, kết hợp với chỉ số StochRSI tạo ra tín hiệu đa
  6. Bán ngay khi giá giảm xuống đường

Lợi thế chiến lược

  1. Gaussian có khả năng giảm tiếng ồn tốt, có thể lọc hiệu quả tiếng ồn thị trường
  2. Theo dõi xu hướng trơn tru, giảm tín hiệu sai
  3. Hỗ trợ tối ưu hóa độ trễ và mô hình phản ứng nhanh, có thể điều chỉnh linh hoạt theo đặc điểm thị trường
  4. Kết hợp với chỉ số StochRSI để tối ưu hóa thời gian đầu vào và tăng tỷ lệ giao dịch thành công
  5. Sử dụng chiều rộng kênh động để thích ứng với sự biến động của thị trường

Rủi ro chiến lược

  1. Có một số sự chậm trễ của Gauss, có thể dẫn đến việc nhập cảnh hoặc xuất cảnh không kịp thời
  2. Có thể tạo ra các tín hiệu giao dịch thường xuyên trong thị trường bất ổn, làm tăng chi phí giao dịch
  3. StochRSI có thể tạo ra tín hiệu tụt hậu trong một số điều kiện thị trường
  4. Quá trình tối ưu hóa tham số phức tạp, cần điều chỉnh lại các tham số cho các môi trường thị trường khác nhau
  5. Hệ thống có yêu cầu về tài nguyên tính toán cao, tính toán thời gian thực có một số độ trễ

Hướng tối ưu hóa chiến lược

  1. Tiến hành cơ chế tối ưu hóa tham số thích ứng, điều chỉnh tham số theo tình trạng thị trường động
  2. Thêm mô-đun nhận diện môi trường thị trường, sử dụng các tham số khác nhau trong các điều kiện thị trường khác nhau
  3. Tối ưu hóa thuật toán Gosselin để giảm thêm độ trễ tính toán
  4. Nhập nhiều chỉ số kỹ thuật để kiểm tra chéo và tăng độ tin cậy tín hiệu
  5. Phát triển cơ chế dừng lỗ thông minh, nâng cao khả năng kiểm soát rủi ro

Tóm tắt

Chiến lược này có khả năng theo dõi hiệu quả các xu hướng thị trường thông qua sự kết hợp của các chỉ số Gaussian và StochRSI. Hệ thống có khả năng giảm tiếng ồn và nhận biết xu hướng tốt, nhưng cũng có một số độ trì trệ và khó tối ưu hóa tham số. Bằng cách tối ưu hóa và hoàn thiện liên tục, chiến lược này có thể đạt được lợi nhuận ổn định trong giao dịch thực tế.

Mã nguồn chiến lược
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Demo GPT - Gaussian Channel Strategy v3.0", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=0, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// ============================================
// Gaussian Functions (Must be at top)
// ============================================
f_filt9x(_a, _s, _i) =>
    var int _m2 = 0, var int _m3 = 0, var int _m4 = 0, var int _m5 = 0, var int _m6 = 0,
    var int _m7 = 0, var int _m8 = 0, var int _m9 = 0, var float _f = 0.0
    _x = 1 - _a
    _m2 := _i == 9 ? 36 : _i == 8 ? 28 : _i == 7 ? 21 : _i == 6 ? 15 : _i == 5 ? 10 : _i == 4 ? 6 : _i == 3 ? 3 : _i == 2 ? 1 : 0
    _m3 := _i == 9 ? 84 : _i == 8 ? 56 : _i == 7 ? 35 : _i == 6 ? 20 : _i == 5 ? 10 : _i == 4 ? 4 : _i == 3 ? 1 : 0
    _m4 := _i == 9 ? 126 : _i == 8 ? 70 : _i == 7 ? 35 : _i == 6 ? 15 : _i == 5 ? 5 : _i == 4 ? 1 : 0
    _m5 := _i == 9 ? 126 : _i == 8 ? 56 : _i == 7 ? 21 : _i == 6 ? 6 : _i == 5 ? 1 : 0
    _m6 := _i == 9 ? 84 : _i == 8 ? 28 : _i == 7 ? 7 : _i == 6 ? 1 : 0
    _m7 := _i == 9 ? 36 : _i == 8 ? 8 : _i == 7 ? 1 : 0
    _m8 := _i == 9 ? 9 : _i == 8 ? 1 : 0
    _m9 := _i == 9 ? 1 : 0
    _f := math.pow(_a, _i) * nz(_s) + _i * _x * nz(_f[1]) - (_i >= 2 ? _m2 * math.pow(_x, 2) * nz(_f[2]) : 0) + (_i >= 3 ? _m3 * math.pow(_x, 3) * nz(_f[3]) : 0) - (_i >= 4 ? _m4 * math.pow(_x, 4) * nz(_f[4]) : 0) + (_i >= 5 ? _m5 * math.pow(_x, 5) * nz(_f[5]) : 0) - (_i >= 6 ? _m6 * math.pow(_x, 6) * nz(_f[6]) : 0) + (_i >= 7 ? _m7 * math.pow(_x, 7) * nz(_f[7]) : 0) - (_i >= 8 ? _m8 * math.pow(_x, 8) * nz(_f[8]) : 0) + (_i == 9 ? _m9 * math.pow(_x, 9) * nz(_f[9]) : 0)
    _f

f_pole(_a, _s, _i) =>
    _f1 = f_filt9x(_a, _s, 1)
    _f2 = _i >= 2 ? f_filt9x(_a, _s, 2) : 0.0
    _f3 = _i >= 3 ? f_filt9x(_a, _s, 3) : 0.0
    _f4 = _i >= 4 ? f_filt9x(_a, _s, 4) : 0.0
    _f5 = _i >= 5 ? f_filt9x(_a, _s, 5) : 0.0
    _f6 = _i >= 6 ? f_filt9x(_a, _s, 6) : 0.0
    _f7 = _i >= 7 ? f_filt9x(_a, _s, 7) : 0.0
    _f8 = _i >= 8 ? f_filt9x(_a, _s, 8) : 0.0
    _f9 = _i == 9 ? f_filt9x(_a, _s, 9) : 0.0
    _fn = _i == 1 ? _f1 : _i == 2 ? _f2 : _i == 3 ? _f3 : _i == 4 ? _f4 : _i == 5 ? _f5 : _i == 6 ? _f6 : _i == 7 ? _f7 : _i == 8 ? _f8 : _i == 9 ? _f9 : na
    [_fn, _f1]

// ============================================
// Date Filter
// ============================================
startDate = input(timestamp("1 Jan 2018"), "Start Date", group="Time Settings")
endDate = input(timestamp("31 Dec 2069"), "End Date", group="Time Settings")
timeCondition = true

// ============================================
// Stochastic RSI (Hidden Calculations)
// ============================================
stochRsiK = input.int(3, "Stoch RSI K", group="Stochastic RSI", tooltip="Only for calculations, not visible")
stochRsiD = input.int(3, "Stoch RSI D", group="Stochastic RSI")
rsiLength = input.int(14, "RSI Length", group="Stochastic RSI")
stochLength = input.int(14, "Stochastic Length", group="Stochastic RSI")

rsiValue = ta.rsi(close, rsiLength)
k = ta.sma(ta.stoch(rsiValue, rsiValue, rsiValue, stochLength), stochRsiK)
d = ta.sma(k, stochRsiD)

// ============================================
// Gaussian Channel
// ============================================
gaussianSrc = input(hlc3, "Source", group="Gaussian")
poles = input.int(4, "Poles", minval=1, maxval=9, group="Gaussian")
samplingPeriod = input.int(144, "Sampling Period", minval=2, group="Gaussian")
multiplier = input.float(1.414, "Multiplier", step=0.1, group="Gaussian")
reducedLag = input.bool(false, "Reduced Lag Mode", group="Gaussian")
fastResponse = input.bool(false, "Fast Response Mode", group="Gaussian")

// Gaussian Calculations
beta = (1 - math.cos(4 * math.asin(1) / samplingPeriod)) / (math.pow(1.414, 2 / poles) - 1)
alpha = -beta + math.sqrt(math.pow(beta, 2) + 2 * beta)
lag = (samplingPeriod - 1) / (2 * poles)

srcData = reducedLag ? gaussianSrc + (gaussianSrc - gaussianSrc[lag]) : gaussianSrc
trData = reducedLag ? ta.tr(true) + (ta.tr(true) - ta.tr(true)[lag]) : ta.tr(true)

[mainFilter, filter1] = f_pole(alpha, srcData, poles)
[trFilter, trFilter1] = f_pole(alpha, trData, poles)

finalFilter = fastResponse ? (mainFilter + filter1) / 2 : mainFilter
finalTrFilter = fastResponse ? (trFilter + trFilter1) / 2 : trFilter

upperBand = finalFilter + finalTrFilter * multiplier
lowerBand = finalFilter - finalTrFilter * multiplier

// ============================================
// Trading Logic
// ============================================
longCondition = 
  finalFilter > finalFilter[1] and      // Green Channel
  close > upperBand and                 // Price above upper band
  (k >= 80 or k <= 20) and             // Stoch RSI condition
  timeCondition

exitCondition = ta.crossunder(close, upperBand)

if longCondition
    strategy.entry("Long", strategy.long)

if exitCondition
    strategy.close("Long")

// ============================================
// Visuals (Gaussian Only)
// ============================================
bandColor = finalFilter > finalFilter[1] ? color.new(#00ff00, 0) : color.new(#ff0000, 0)
plot(finalFilter, "Filter", bandColor, 2)
plot(upperBand, "Upper Band", bandColor)
plot(lowerBand, "Lower Band", bandColor)
fill(plot(upperBand), plot(lowerBand), color.new(bandColor, 90))

barcolor(close > open and close > upperBand ? color.green : 
         close < open and close < lowerBand ? color.red : na)