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

Tác giả:ChaoZhang, Ngày: 2023-09-20 15:17:51
Tags:

Tổng quan

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

Chiến lược logic

  1. Tính toán độ lệch chuẩn giá và biến động ATR, sử dụng biến động để điều chỉnh chiều rộng kênh.

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

  3. Tạo tín hiệu mua / bán khi giá phá vỡ kênh bên trong hoặc bên ngoài.

  4. Cấu trúc kênh đôi giúp lọc một số sự đột phá sai.

  5. Độ biến động ATR điều chỉnh chiều rộng kênh, rộng hơn khi độ biến động tăng lên để có hiệu ứng thích nghi.

Ưu điểm

  1. Các kênh siêu xu hướng rất đơn giản và hiệu quả trong việc theo dõi xu hướng.

  2. Kênh đôi lọc các sự đột phá giả và cải thiện chất lượng tín hiệu.

  3. Điều chỉnh thích nghi với biến động làm cho các kênh phù hợp với môi trường thị trường khác nhau.

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

  5. Các kênh và breakout được hiển thị tạo thành các tín hiệu giao dịch trực quan.

Rủi ro

  1. Các tín hiệu đột phá có thể tạo ra các tín hiệu sai dẫn đến tổn thất không cần thiết.

  2. Nó không thể xác định hướng xu hướng, rủi ro của giao dịch ngược xu hướng.

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

  4. Tối ưu hóa tham số không đúng dẫn đến quá phù hợp.

  5. Là một xu hướng theo chiến lược, nó đấu tranh trong các thị trường giới hạn phạm vi.

Tăng cường

  1. Các thông số thử nghiệm ảnh hưởng đến hiệu ứng thích nghi.

  2. Bao gồm MA để xác định xu hướng chính.

  3. Tối ưu hóa xác nhận thoát để tránh thoát sai.

  4. Thêm stop loss để giới hạn lỗ cho mỗi giao dịch.

  5. Đánh giá việc điều chỉnh kênh về tần số giao dịch.

  6. Sử dụng máy học để tối ưu hóa các tham số một cách năng động.

Kết luận

Chiến lược này sử dụng các kênh siêu xu hướng kép thích nghi để nắm bắt xu hướng giá. Nó đơn giản và trực quan trong việc theo dõi xu hướng. Nhưng rủi ro bao gồm đột phá sai và hướng xu hướng không chính xác. Việc điều chỉnh tham số hơn nữa và các cơ chế bổ sung có thể cải thiện hiệu suất chiến lược, làm cho nó trở thành một hệ thống theo xu hướng mạnh mẽ.


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





 


Thêm nữa