Chiến lược giao dịch đường trung bình động chéo kép


Ngày tạo: 2023-11-02 14:21:24 sửa đổi lần cuối: 2023-11-02 14:21:24
sao chép: 0 Số nhấp chuột: 657
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đường trung bình động chéo kép

Tổng quan

Chiến lược này sử dụng giao lộ của hai đường trung bình di chuyển như một tín hiệu giao dịch, kết hợp với ATR dừng để thực hiện giao dịch theo xu hướng. Ý tưởng cốt lõi của nó là làm nhiều khi đi qua đường trung bình di chuyển ngắn hạn, làm trống khi đi qua đường trung bình di chuyển dài hạn, đồng thời sử dụng ATR để thiết lập điểm dừng lỗ, dừng lại theo dõi động.

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

Chiến lược này chủ yếu đánh giá xu hướng bằng hai nhóm trung bình di chuyển. Độ dài của trung bình di chuyển nhanh là 25 ngày và độ dài của trung bình di chuyển chậm là 100 ngày.

Để lọc ra một số tín hiệu giả, chiến lược đã thêm một bộ đếm số chéo crossCount. Chỉ khi số lần chéo của trung bình di chuyển nhanh trong thời gian lookback (lần 25 ngày mặc định) ít hơn maxNoCross (lần 10 mặc định) thì sẽ kích hoạt tín hiệu.

Ngoài ra, chiến lược cũng bổ sung một cơ chế xác nhận, tức là sau khi tín hiệu ban đầu được phát ra, tín hiệu sẽ được xác nhận nếu giá quay trở lại giữa hai đường trung bình di chuyển.

Sau khi tham gia, chiến lược sử dụng chỉ số ATR để thiết lập khoảng cách dừng lỗ. ATR đo lường phạm vi biến động giá trong một khoảng thời gian nhất định trong quá khứ, ở đây thiết lập khoảng cách dừng lỗ bằng 14 lần ATR.

Phân tích lợi thế

Chiến lược này có một số ưu điểm:

  1. Sử dụng phương tiện di chuyển kép kết hợp với cơ chế lọc chéo, có thể lọc hiệu quả các tín hiệu giả và nắm bắt xu hướng mạnh mẽ hơn.

  2. Tăng cơ chế xác nhận để tránh bị phá vỡ giả.

  3. Sử dụng ATR để theo dõi lỗ hổng, bạn có thể khóa lợi nhuận tối đa và tránh rút tiền quá nhiều.

  4. Các tham số tối ưu hóa thuận tiện ít hơn, dễ thực hiện.

  5. Có thể áp dụng trong nhiều thị trường, bao gồm tiền kỹ thuật số và thị trường cơ bản truyền thống.

  6. Việc xây dựng chiến lược sử dụng nhiều chỉ số tổng hợp giúp cho chiến lược trở nên vững chắc hơn.

Phân tích rủi ro

Chiến lược này có những rủi ro:

  1. Trong giai đoạn chấn động, các đường trung bình di chuyển sẽ giao nhau thường xuyên, dễ gây ra nhiều lần mất mát.

  2. Thiết lập tham số ATR không đúng có thể gây ra mất mát quá nhẹ hoặc quá chặt chẽ.

  3. Lỗ hổng hoặc khoảng cách lớn có thể trực tiếp gây ra thiệt hại.

  4. Các sự kiện lớn bất ngờ có thể gây ra biến động mạnh trong giá cả.

  5. Các tham số trung bình di chuyển không hợp lý có thể dẫn đến việc bỏ lỡ xu hướng hoặc tạo ra quá nhiều tín hiệu giả.

  6. Sự thay đổi trong phạm vi biến động giá gần đây có thể khiến ATR dừng lỗ không phù hợp.

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

Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:

  1. Các tham số di chuyển trung bình được tối ưu hóa để tìm ra sự kết hợp phù hợp hơn. Các tham số khác nhau của chu kỳ và trung bình di chuyển trọng lượng có thể được thử nghiệm.

  2. Kiểm tra các tham số chu kỳ ATR khác nhau để tìm khoảng cách dừng tốt hơn.

  3. Thêm các điều kiện lọc bổ sung, chẳng hạn như tăng khối lượng giao dịch, chỉ số dao động, để cải thiện chất lượng tín hiệu.

  4. Các chỉ số này được kết hợp với các chỉ số đánh giá xu hướng để tránh bị mắc kẹt trong tình trạng chấn động.

  5. Thêm thuật toán học máy, tự động tối ưu hóa các tham số thông qua đào tạo dữ liệu lịch sử.

  6. Tìm kiếm nhiều xác nhận hơn trong biểu đồ cấp lớn và tránh bị lừa bởi tiếng ồn đường ngắn.

  7. Thiết lập các quy tắc giảm vị trí lợi nhuận và khóa lợi nhuận dần dần.

Tóm tắt

Chiến lược này tích hợp nhiều chỉ số kỹ thuật khác nhau như chéo đường trung bình di chuyển đôi, lọc xu hướng, cơ chế xác nhận và dừng động ATR. Có chỗ để cải thiện về tối ưu hóa tham số và kiểm soát rủi ro, nhưng ý tưởng giao dịch của nó đơn giản và rõ ràng, dễ thực hiện sao chép, là một chiến lược theo dõi xu hướng mạnh mẽ hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("QuantCat Intraday Strategy (15M)", overlay=true)

//MA's for basic signals, can experiment with these values

fastEMA = sma(close, 25)
slowEMA = sma(close, 100)

//Parameters for validation of position

lookback_value = 25
maxNoCross=10 //value used for maximum number of crosses on a certain MA to mitigate noise and maximise value from trending markets

//Amount of crosses on MA to filter out noise

ema25_crossover = (cross(close, fastEMA)) == true ? 1 : 0
ema25_crossover_sum = sum(ema25_crossover, lookback_value) ///potentially change lookback value to alter results
crossCount = (ema25_crossover_sum <= maxNoCross)

//Entries long

agrLong =  ((crossover(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consLong = ((close < fastEMA) and (close > slowEMA) and (fastEMA > slowEMA) and (crossCount == true)) ? true : false

//Entries short

agrShort =  ((crossunder(fastEMA, slowEMA)) and (crossCount == true)) ? true : false
consShort = ((close > fastEMA) and (close < slowEMA) and (fastEMA < slowEMA) and (crossCount == true)) ? true : false

//ATR

atrLkb = input(14, minval=1, title='ATR Stop Period')
atrRes = input("15",  title='ATR Resolution')
atr = request.security(syminfo.tickerid, atrRes, atr(atrLkb))

//Strategy

longCondition = ((agrLong or consLong) == true)
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ((agrShort or consShort) == true)
if (shortCondition)
    strategy.entry("Short", strategy.short)

//Stop multiplier 

stopMult = 4

//horizontal stoplosses

longStop = na
longStop :=  shortCondition ? na : longCondition and strategy.position_size <=0 ? close - (atr * stopMult) : longStop[1] 
shortStop = na
shortStop := longCondition ? na : shortCondition and strategy.position_size >=0 ? close + (atr * stopMult) : shortStop[1]

//Strategy exit functions

strategy.exit("Long ATR Stop", "Long", stop=longStop)
strategy.exit("Short ATR Stop", "Short", stop=shortStop)

//Plots 

redgreen = (fastEMA > slowEMA) ? green : red
    
p1 = plot(fastEMA, title="Fast EMA", color=redgreen, linewidth=2) 
p2 = plot(slowEMA, title="Slow EMA", color=redgreen, linewidth=2) 
fill(p1, p2, color=redgreen)

s1 = plot(longStop, style=linebr, color=red, linewidth=2,     title='Long ATR Stop')
s2 = plot(shortStop, style=linebr, color=red, linewidth=2,  title='Short ATR Stop')

fill(p2, s1, color=red, transp=95)
fill(p2, s2, color=red, transp=95)