Chiến lược chống xu hướng trung bình di chuyển kép được thiết kế chủ yếu cho giao dịch xoay áp dụng cho thị trường FOREX. Chiến lược này tạo ra tín hiệu giao dịch bằng cách sử dụng hai trung bình di chuyển của các khung thời gian khác nhau. Khi trung bình di chuyển nhanh vượt quá trung bình di chuyển chậm, một vị trí ngắn được thực hiện để tìm kiếm đảo ngược; khi trung bình di chuyển nhanh vượt dưới trung bình di chuyển chậm, một vị trí dài được thực hiện để tìm kiếm đảo ngược.
Chiến lược này sử dụng trung bình động của khung thời gian 1 giờ và 1 ngày. Trung bình di chuyển 1 giờ phản ánh sự thay đổi giá một cách nhạy cảm hơn và có thể phục vụ như trung bình di chuyển nhanh; trung bình di chuyển 1 ngày phản ứng với sự thay đổi giá chậm hơn và có thể phục vụ như trung bình di chuyển chậm. Khi trung bình di chuyển nhanh vượt quá trung bình di chuyển chậm, nó được coi là thị trường hiện tại đang tăng và sẽ tạo ra một tín hiệu ngắn; khi trung bình di chuyển nhanh vượt dưới trung bình di chuyển chậm, nó được coi là thị trường hiện tại đang giảm và sẽ tạo ra một tín hiệu dài.
Nguyên tắc của việc đi dài hoặc ngắn để tìm kiếm đảo ngược khi các đường trung bình di chuyển nhanh và chậm có đường chéo vàng hoặc đường chéo chết là khi các đường trung bình di chuyển nhanh và chậm vượt qua, nó cho thấy thị trường có thể đã đảo ngược, và các đường chéo của đường nhanh và đường chậm là thời gian tạo ra tín hiệu đảo ngược. Theo lý thuyết giao dịch đảo ngược, giá thường không tăng hoặc giảm theo một hướng, và có thể là thời điểm đảo ngược giá khi có sự đột phá của các mức hỗ trợ và kháng cự quan trọng. Do đó, chiến lược này sử dụng hai tín hiệu đảo ngược trung bình di chuyển để nắm bắt các cơ hội đảo ngược.
Chiến lược này cũng thiết lập các điều kiện sàng lọc thời gian và ngày giao dịch. Nó chỉ giao dịch trong phạm vi ngày và giờ giao dịch để tránh giao dịch trong thời gian không phù hợp.
Chiến lược chống xu hướng trung bình di chuyển kép có những lợi thế sau:
Chiến lược đảo ngược có lợi thế của không gian lợi nhuận lớn.
Sử dụng các kết hợp đường trung bình động kép lọc tín hiệu và tránh các tín hiệu sai. Một chỉ số duy nhất dễ bị tín hiệu sai, trong khi các kết hợp chỉ số kép có thể cải thiện độ tin cậy của tín hiệu bằng cách lọc ra một số tín hiệu sai, làm cho các cơ hội giao dịch đáng tin cậy hơn.
Việc thiết lập thời gian giao dịch và điều kiện ngày tránh các giai đoạn thị trường không hoạt động và tránh bị mắc kẹt.
Chiến lược đảo ngược phù hợp với giao dịch trung hạn. So với giao dịch tần số cao, các chiến lược giao dịch trung hạn ổn định hơn, tránh mua và bán quá thường xuyên.
Kiểm soát rút tiền tối đa là có lợi cho quản lý vốn. Đặt tỷ lệ rút tiền tối đa có thể kiểm soát hiệu quả rủi ro qua đêm và tránh mất tiền khổng lồ.
Chiến lược chống xu hướng trung bình động kép cũng có các rủi ro sau:
Các tín hiệu đảo ngược có thể thất bại dẫn đến tổn thất. Các tín hiệu đảo ngược giá không phải lúc nào cũng đáng tin cậy. Có nguy cơ mất mát khi giá tiếp tục xu hướng mà không đảo ngược. Mất mát có thể được kiểm soát bằng cách đặt dừng lỗ.
Sự lệch của xu hướng dẫn đến tổn thất. Khi hai đường trung bình động đã tách ra đáng kể trước khi đảo ngược, có thể có nguy cơ mất mát. Thời gian đảo ngược có thể được xác định bằng cách quan sát khoảng cách giữa các đường trung bình động.
Các thiết lập giờ giao dịch không đúng có thể bỏ lỡ cơ hội. Nếu giờ giao dịch được thiết lập quá nghiêm ngặt, một số cơ hội giao dịch có thể bị bỏ lỡ. Giờ giao dịch có thể được mở rộng phù hợp.
Không dừng lỗ ngay sau khi đảo ngược dẫn đến tổn thất mở rộng. Sau khi đảo ngược, tổn thất phải được dừng ngay khi giá tiếp tục xu hướng ban đầu để kiểm soát tổn thất.
Chiến lược chống xu hướng trung bình di chuyển kép cũng có thể được tối ưu hóa trong các khía cạnh sau:
Các chỉ số như MACD, KDJ có thể được thử nghiệm kết hợp với các đường trung bình động đôi để cải thiện độ chính xác tín hiệu.
Tối ưu hóa các thông số chu kỳ trung bình động để tìm các thông số tối ưu.
Mở rộng hoặc thu hẹp giờ giao dịch để tìm giờ giao dịch tối ưu. Kiểm tra tác động của việc điều chỉnh giờ giao dịch theo các đặc điểm sản phẩm khác nhau.
Thêm các điều kiện lọc xu hướng để tránh sai lệch. Các chỉ số như ADX có thể được thêm để đánh giá sức mạnh của xu hướng và tránh đảo ngược khi không có xu hướng rõ ràng.
Thêm các mô hình học máy để xác minh tín hiệu. Các mô hình có thể được đào tạo để đánh giá độ tin cậy của tín hiệu đảo ngược và lọc ra một số tín hiệu chất lượng thấp.
Chiến lược đối xu hướng trung bình di chuyển kép phù hợp với giao dịch trung hạn trên thị trường ngoại hối. Nó sử dụng các chéo vàng và chéo chết giữa các trung bình di chuyển nhanh và chậm để tạo ra các tín hiệu đảo ngược, thực hiện các hoạt động đối lập tại các điểm thị trường chính, có lợi thế của không gian lợi nhuận lớn. Đồng thời, nó cũng sử dụng các thiết lập như giờ giao dịch và rút tiền tối đa để kiểm soát rủi ro. Đây là một hệ thống đảo ngược tương đối ổn định có thể tạo ra lợi nhuận cao trong khi kiểm soát rủi ro. Trong tương lai, chiến lược này có thể được cải thiện và tối ưu hóa thông qua các phương pháp như tối ưu hóa chỉ số và tham số và áp dụng các mô hình học máy.
/*backtest start: 2023-12-08 00:00:00 end: 2024-01-07 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy("gbpnzd 1h", overlay=true) src = close useCurrentRes = input(true, title="Use Current Chart Resolution?") resCustom = input(title="Use Different Timeframe? Uncheck Box Above", type=input.resolution, defval="60") len = input(28, title="Moving Average Length - LookBack Period") //periodT3 = input(defval=7, title="Tilson T3 Period", minval=1) factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0) atype = input(2,minval=1,maxval=8,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3") 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 = 2000, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true res = useCurrentRes ? timeframe.period : resCustom resCustom2 = input(title="plm", type=input.resolution, defval="D") res2 = resCustom2 //hull ma definition hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len))) //TEMA definition ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) tema = 3 * (ema1 - ema2) + ema3 //Tilson T3 factor = factorT3 *.10 gd(src, len, factor) => ema(src, len) * (1 + factor) - ema(ema(src, len), len) * factor t3(src, len, factor) => gd(gd(gd(src, len, factor), len, factor), len, factor) tilT3 = t3(src, len, factor) avg = atype == 1 ? sma(src,len) : atype == 2 ? ema(src,len) : atype == 3 ? wma(src,len) : atype == 4 ? hullma : atype == 5 ? vwma(src, len) : atype == 6 ? rma(src,len) : atype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3 out = avg ema20 = security(syminfo.tickerid, res, out) plot3 = security(syminfo.tickerid, res2, ema20) plot33 = security(syminfo.tickerid, res, ema20) plot(plot3,linewidth=2,color=color.red) plot(plot33,linewidth=2,color=color.white) // longC = crossover(close[2], plot3) and close[1] > close[2] and close > close[1] // shortc = crossunder(close[2],plot3) and close[1] < close[2] and close < close[1] volumeMA=input(24) ema_1 = ema(volume, volumeMA) timeinrange(res, sess) => time(res, sess) != 0 //entrytime = timeinrange(timeframe.period, "0900-0915") myspecifictradingtimes = input('0900-2300', type=input.session, title="My Defined Hours") entrytime = time(timeframe.period, myspecifictradingtimes) != 0 longC = crossover(plot33,plot3) and time_cond and entrytime shortc = crossunder(plot33,plot3) and time_cond and entrytime // exitlong = crossunder(plot33,plot3) // exitshort = crossover(plot33,plot3) distanta=input(1.0025) exitshort = plot33/plot3 > distanta exitlong = plot3/plot33 > distanta inverse = input(true) exit = input(false) if(inverse==false) strategy.entry("long",1,when=longC) strategy.entry("short",0,when=shortc) if(inverse) strategy.entry("long",1,when=shortc) strategy.entry("short",0,when=longC) if(exit) strategy.close("long",when=exitlong) strategy.close("short",when=exitshort) // if(dayofweek==dayofweek.friday) // strategy.close_all() // risk = input(25) // strategy.risk.max_intraday_loss(risk, strategy.percent_of_equity)