
Đây là một chiến lược giao dịch đảo ngược dựa trên các chỉ số moving average kép. Chiến lược này tính toán các đường trung bình di chuyển của hai nhóm tham số khác nhau để xác định xu hướng giá dựa trên sự thay đổi của nó và đặt các tham số nhạy cảm với sự thay đổi hướng để tạo ra tín hiệu giao dịch.
Các chỉ số cốt lõi của chiến lược này là đường trung bình di chuyển kép. Chiến lược cho phép chọn loại đường trung bình di chuyển (SMA, EMA, v.v.), độ dài và nguồn giá (giá đóng cửa, giá điển hình, v.v.). Sau khi tính toán hai nhóm đường trung bình di chuyển, xác định hướng của chúng bằng cách xác định tham số phản ứng.
Ngoài ra, chiến lược cũng đặt ra các điều kiện để xác định hướng thay đổi và tăng / giảm liên tục, để tránh tạo ra tín hiệu sai. Và hiển thị trạng thái giảm giá bằng các màu khác nhau. Khi giá tăng liên tục, đường movavg hiển thị màu xanh lá cây, khi giảm là màu đỏ.
Chiến lược movavg kép này kết hợp với đường chậm nhanh được đặt theo các tham số khác nhau, có thể lọc hiệu quả tiếng ồn của thị trường giao dịch và nhận ra xu hướng mạnh hơn. So với chiến lược movavg đơn, nó giảm tín hiệu sai và có thể tham gia khi xu hướng rõ ràng hơn, do đó có tỷ lệ thắng cao hơn.
Các tham số phản ứng nhạy cảm cho phép chiến lược có thể thích ứng linh hoạt với các chu kỳ và giống khác nhau. Quá trình chiến lược trực quan, dễ hiểu và tối ưu hóa.
Rủi ro lớn nhất của chiến lược này là thua lỗ hoặc xây dựng vị trí ngược khi bỏ lỡ điểm biến. Điều này liên quan đến việc đặt tham số phản ứng. Nếu phản ứng quá nhỏ, nó dễ tạo ra tín hiệu sai; Nếu phản ứng quá lớn, nó có thể bỏ lỡ điểm vào tốt hơn.
Một rủi ro khác là không thể kiểm soát lỗ hổng một cách hiệu quả. Khi giá biến động mạnh, không thể dừng lại nhanh chóng, dẫn đến tổn thất mở rộng. Điều này cần phải được phối hợp với chiến lược dừng lỗ để kiểm soát.
Các hướng tối ưu hóa của chiến lược này chủ yếu tập trung vào việc lựa chọn tham số phản ứng, loại và độ dài của đường trung bình di chuyển. Phản ứng có thể được tăng lên một cách thích hợp để giảm tín hiệu sai. Các tham số trung bình di chuyển có thể được thử nghiệm theo các chu kỳ và giống khác nhau để chọn kết hợp tạo ra tín hiệu tối ưu.
Ngoài ra, kết hợp với các chỉ số hỗ trợ khác như RSI, KD để xác nhận tín hiệu giao dịch cũng là một ý tưởng tối ưu. hoặc sử dụng phương pháp học máy để tự động chọn tham số.
Chiến lược này đơn giản và thực tế hơn, có thể xác định hiệu quả xu hướng đảo ngược bằng cách lọc trung bình di chuyển kép và tạo tín hiệu giao dịch. Đây là một chiến lược theo dõi xu hướng điển hình. Sau khi tối ưu hóa các tham số, khả năng nắm bắt thị trường và khả năng giữ vị trí chống thị trường sẽ được cải thiện.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)
// === INPUTS
ma_type = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len = input(defval=32, title="MA Lenght", minval=1)
ma_src = input(close, title="MA Source")
reaction = input(defval=2, title="MA Reaction", minval=1)
// SuperSmoother filter
// © 2013 John F. Ehlers
variant_supersmoother(src,len) =>
a1 = exp(-1.414*3.14159 / len)
b1 = 2*a1*cos(1.414*3.14159 / len)
c2 = b1
c3 = (-a1)*a1
c1 = 1 - c2 - c3
v9 = 0.0
v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
v9
variant_smoothed(src,len) =>
v5 = 0.0
v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
v5
variant_zerolagema(src,len) =>
ema1 = ema(src, len)
ema2 = ema(ema1, len)
v10 = ema1+(ema1-ema2)
v10
variant_doubleema(src,len) =>
v2 = ema(src, len)
v6 = 2 * v2 - ema(v2, len)
v6
variant_tripleema(src,len) =>
v2 = ema(src, len)
v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)
v7
variant(type, src, len) =>
type=="EMA" ? ema(src,len) :
type=="WMA" ? wma(src,len):
type=="VWMA" ? vwma(src,len) :
type=="SMMA" ? variant_smoothed(src,len) :
type=="DEMA" ? variant_doubleema(src,len):
type=="TEMA" ? variant_tripleema(src,len):
type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
type=="SSMA" ? variant_supersmoother(src,len) :
type=="ZEMA" ? variant_zerolagema(src,len) :
type=="TMA" ? sma(sma(src,len),len) : sma(src,len)
// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)
direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)
pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")
/////// Alerts ///////
alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")
longCondition = direction>0
shortCondition = direction<0
if (longCondition)
strategy.entry("BUY", strategy.long)
if (shortCondition)
strategy.entry("SELL", strategy.short)