Chiến lược giao dịch khung thời gian đa dạng dựa trên kênh dải


Ngày tạo: 2023-09-20 15:47:46 sửa đổi lần cuối: 2023-09-20 15:47:46
sao chép: 0 Số nhấp chuột: 784
1
tập trung vào
1625
Người theo dõi

Tổng quan

Chiến lược này dựa trên các kênh băng tần tự thích ứng, được thiết kế với hai chiến lược dừng lỗ theo dõi khác nhau, được xác minh lại một cách có hệ thống trong nhiều khung thời gian, thuộc chiến lược giao dịch theo dõi xu hướng.

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

  1. Tính toán đường ray lên xuống của kênh băng tần tự điều chỉnh chiều rộng của kênh thông qua các tham số.

  2. Chiến lược theo dõi phá vỡ, mở lệnh sau khi giá phá vỡ cổng và dừng lỗ trong cổng.

  3. Chiến lược đảo ngược trở lại, mở vị trí khi giá đến kênh và dừng khi giá trở lại kênh.

  4. Chỉ số CCI hỗ trợ việc đánh giá số lượng đường bay.

  5. Thử nghiệm phản hồi nhiều khung thời gian đã chứng minh tính khả thi của cả hai chiến lược.

Phân tích lợi thế

  1. Đường băng tần đơn giản và trực quan, có thể nắm bắt được xu hướng giá một cách hiệu quả.

  2. Cả hai chiến lược này có thể thích ứng với các tình huống thị trường khác nhau để tăng cường sự ổn định.

  3. Chỉ số CCI có thể hỗ trợ việc đánh giá số lượng trống.

  4. Nhiều khung thời gian làm cho kết quả trở nên thuyết phục hơn.

  5. Các quy tắc chiến lược rất đơn giản, rõ ràng và dễ thực hiện.

Phân tích rủi ro

  1. Các trường hợp có thể xảy ra hư hỏng đường băng tần.

  2. Cả hai chiến lược này đều có nguy cơ dừng quá sớm hoặc quá muộn.

  3. Chỉ số CCI có thể phát ra tín hiệu sai.

  4. Những sai lệch trong dữ liệu phản hồi cần được xử lý cẩn thận.

  5. Các tham số có thể có quá phù hợp khi tối ưu hóa.

Hướng tối ưu hóa

  1. Kiểm tra các tham số khác nhau để tìm ra sự kết hợp tối ưu.

  2. Đánh giá thêm các chỉ số khác để lọc tín hiệu.

  3. Tối ưu hóa chiến lược dừng lỗ và giảm rủi ro.

  4. Nghiên cứu phương pháp tính toán chiều rộng tự điều chỉnh của kênh.

  5. Thử nghiệm lại và xác minh trong nhiều giống và chu kỳ.

  6. Các tham số tối ưu hóa động theo phương pháp học máy.

Tóm tắt

Chiến lược này được thiết kế dựa trên hai chiến lược theo dõi dừng lỗ dựa trên kênh băng tần, được kiểm chứng lại trong nhiều khung thời gian. Bằng cách tối ưu hóa tham số, cải thiện chiến lược dừng lỗ, có thể tăng cường sự ổn định của hệ thống, phát triển nó thành một hệ thống giao dịch theo dõi xu hướng đáng tin cậy.

Mã nguồn chiến lược
/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "Underworld Hunter", overlay=true)

len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)

mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev

//CCI calculation and inputs

lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))

//CCI plotting

cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180

cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180

plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)

//plotting

plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)

mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)

ordersize=floor(50000/close)

if(close>upper and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
    strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")

if(close<lower and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
    strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")

//bounce of bands

if(close>upper and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
    strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")

if(close<lower and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
    strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")