Chiến lược giao dịch dựa trên kênh siêu xu hướng thích ứng


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

Tổng quan

Chiến lược này tạo ra tín hiệu giao dịch bằng cách xây dựng kênh siêu xu hướng hai tầng kết hợp với kênh phá vỡ giá. Trong khi đó, sử dụng biến động giá để điều chỉnh chiều rộng kênh, để đạt được hiệu quả tự thích ứng.

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

  1. Tính toán chênh lệch chuẩn và ATR của giá, điều chỉnh chiều rộng của kênh vượt xu hướng theo tỷ lệ biến động.

  2. Xây dựng kênh siêu xu hướng hai lớp, kênh bên trong nhạy hơn, kênh bên ngoài ổn định hơn.

  3. Một tín hiệu mua hoặc bán được tạo ra khi giá vượt qua các kênh vượt quá xu hướng bên trong hoặc bên ngoài.

  4. Cấu trúc đường dẫn hai tầng có thể lọc một số đột phá giả.

  5. ATR được sử dụng để điều chỉnh chiều rộng của đường dẫn, tăng chiều rộng của đường dẫn khi sóng lớn hơn, để thực hiện hiệu ứng tự thích ứng.

Phân tích lợi thế

  1. Các kênh siêu xu hướng rất đơn giản và dễ sử dụng để theo dõi xu hướng.

  2. Cấu trúc kênh hai tầng có thể cải thiện chất lượng tín hiệu, lọc phá vỡ giả.

  3. Tỷ lệ biến động tự điều chỉnh chiều rộng của kênh để phù hợp hơn với môi trường thị trường khác nhau.

  4. Dễ thực hiện, điều chỉnh tham số cũng đơn giản.

  5. Hướng dẫn và đột phá được hiển thị để tạo ra tín hiệu giao dịch trực quan.

Phân tích rủi ro

  1. Các tín hiệu đột phá có thể gây ra sự hiểu lầm, dẫn đến tổn thất không cần thiết.

  2. Không thể xác định được xu hướng, có nguy cơ giao dịch ngược.

  3. Điều chỉnh thích nghi có thể quá nhạy cảm, quá lớn.

  4. Tối ưu hóa tham số không đúng cách có thể dẫn đến tối ưu hóa quá mức.

  5. Trong một chiến lược theo dõi xu hướng, các giao dịch “uddle” có thể mang lại lợi nhuận thấp hoặc thua lỗ.

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

  1. Kiểm tra ảnh hưởng của các tham số khác nhau đối với hiệu quả tự thích ứng của kênh.

  2. Cố gắng kết hợp các chỉ số như đường trung bình để đánh giá xu hướng lớn.

  3. Tối ưu hóa cơ chế xác nhận đột phá, tránh đột phá giả.

  4. Thêm chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ.

  5. Đánh giá tác động của điều chỉnh các tham số kênh đối với tần số giao dịch.

  6. Các tham số có thể được tối ưu hóa động thông qua thuật toán học máy.

Tóm tắt

Chiến lược này sử dụng hai lớp tự thích ứng với kênh siêu xu hướng để nắm bắt xu hướng giá. Ưu điểm là đơn giản và trực quan, có thể theo dõi xu hướng hiệu quả. Nhưng cũng có một số rủi ro về phán đoán sai và phán đoán xu hướng sai. Bằng cách tối ưu hóa tham số và bổ sung cơ chế hỗ trợ, hiệu quả của chiến lược có thể được cải thiện hơn nữa, tạo ra một hệ thống theo dõi xu hướng ổn định và hiệu quả.

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

//@version=4
strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000)

//Inputs
multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1)
period = input(title="Period", type=input.integer, step=1, defval=10, minval=1)
SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false)


////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////

dev = stdev(close, period)
stdDev = (dev / close) * 100 + 1
MultDev = SelfAdjust ? multi * stdDev : multi

up_lev1 = hl2 - MultDev * atr(period)
dn_lev1 = hl2 + MultDev * atr(period)
up_lev2 = hl2 - (MultDev * 2 * atr(period))
dn_lev2 = hl2 + (MultDev * 2 * atr(period))

up_trend1 = 0.0
up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1
up_trend2 = 0.0
up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2

down_trend1 = 0.0
down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1
down_trend2 = 0.0
down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2

trend1 = 0
trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1)
trend2 = 0
trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1)

st_line1 = trend1 == 1 ? up_trend1 : down_trend1
st_line2 = trend2 == 1 ? up_trend2 : down_trend2

// Plotting
plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1")
plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2")
fill(plot1, plot2, color = color.aqua, title = "Cloud")

buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1
sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1

if(buy and time_cond)
    strategy.entry("long", long = true , comment="long")

if (close < st_line1 and time_cond or close < st_line2 and time_cond)
    strategy.close("long")
    
if (not time_cond)
    strategy.close_all()