Chiến lược giao dịch kênh trung bình động kép là một chiến lược giao dịch xu hướng theo dõi sự chéo chéo giữa các đường trung bình động kép. Chiến lược sử dụng đường trung bình di chuyển biểu thức (EMA) và đường trung bình di chuyển cân (WMA) làm chỉ số giao dịch. Khi đường EMA ngắn hạn vượt trên đường WMA dài hạn, chiến lược sẽ đi dài. Khi đường EMA ngắn hạn vượt dưới đường WMA dài hạn, chiến lược sẽ đi ngắn.
Các tín hiệu giao dịch của chiến lược này đến từ đường chéo vàng và đường chéo chết giữa EMA ngắn hạn 10 giai đoạn và WMA dài hạn 20 giai đoạn. Khi EMA ngắn hạn vượt qua trên WMA dài hạn, nó cho thấy thị trường đang đảo ngược lên, do đó đi dài. Khi EMA ngắn hạn vượt qua dưới WMA dài hạn, nó cho thấy thị trường đang đảo ngược xuống, do đó đi ngắn.
Sau khi xác định hướng giao dịch, chiến lược đặt mức dừng lỗ dưới hoặc trên giá nhập vào khoảng thời gian 1 ATR, với hai lợi nhuận - lợi nhuận đầu tiên được đặt ở mức 1 ATR trên hoặc dưới giá nhập, và lợi nhuận thứ hai được đặt ở mức 2 ATR trên hoặc dưới giá nhập. Khi lợi nhuận đầu tiên được kích hoạt, 50% vị trí sẽ được đóng.
Logic stop loss trailing - nó sẽ được kích hoạt khi giá cao nhất hoặc giá thấp nhất đạt đến mức lợi nhuận đầu tiên.
Chiến lược này sử dụng tính năng giảm tiếng ồn làm mịn kép của đường trung bình động để lọc hiệu quả các biến động ngẫu nhiên trên thị trường và xác định các tín hiệu xu hướng trung hạn đến dài hạn, do đó tránh bị mắc kẹt trong whipsaws. Ngoài ra, hai giai đoạn lấy lợi nhuận làm tăng vùng lợi nhuận của chiến lược và tối đa hóa lợi nhuận. Cơ chế dừng lại cũng cho phép chiến lược khóa lợi nhuận và giảm lỗ.
Đường trung bình động có sự chậm trễ lớn hơn, gây ra nguy cơ mất tín hiệu. Sự chéo giữa hai đường trung bình động cũng có thể tạo ra tín hiệu sai quá mức trên một số thị trường, gây ra tổn thất.
Việc thiết lập stop loss là một thành phần quan trọng của chiến lược. Nếu stop loss quá nhỏ, nó dễ bị ảnh hưởng bởi tiếng ồn thị trường. Nếu stop loss quá lớn, nó có thể không kiểm soát hiệu quả rủi ro.
Ngoài ra, khi thị trường biến động mạnh mẽ, việc dừng lại có thể không hoạt động tốt trong việc bảo vệ.
Kiểm tra EMA và WMA với các thông số khác nhau để tìm sự kết hợp thông số tối ưu.
Chọn các điểm cố định hoặc ATR stop loss nhiều lần dựa trên các đặc điểm sản phẩm và phong cách giao dịch khác nhau.
Kiểm tra các hiệu ứng của dừng kéo theo vị trí một phần và dừng kéo theo vị trí đầy đủ.
Đưa ra các chỉ số khác để lọc tín hiệu để hỗ trợ EMA và WMA, để cải thiện chất lượng tín hiệu.
Nói chung, chiến lược giao dịch kênh trung bình động kép tương đối mạnh mẽ và hoạt động tốt trong các thị trường xu hướng. Bằng cách tối ưu hóa các thông số, cơ chế dừng lỗ và cải thiện chất lượng tín hiệu, hiệu suất giao dịch thực tế của chiến lược này có thể được tăng thêm. Đây là một ý tưởng chiến lược đầy hứa hẹn đáng nghiên cứu sâu và áp dụng trong giao dịch thực tế.
/*backtest start: 2024-01-29 00:00:00 end: 2024-02-28 00:00:00 period: 3h 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/ // © gpadihar //@version=4 strategy("SL1 Pips after TP1 (MA)", commission_type=strategy.commission.cash_per_order, overlay=true) // Strategy Buy = input(true) Sell = input(true) // Date Range start_year = input(title='Start year' ,defval=2020) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_hour = input(title='Start hour' ,defval=0) start_minute = input(title='Start minute' ,defval=0) end_time = input(title='set end time?',defval=false) end_year = input(title='end year' ,defval=3019) end_month = input(title='end month' ,defval=12) end_day = input(title='end day' ,defval=31) end_hour = input(title='end hour' ,defval=23) end_minute = input(title='end minute' ,defval=59) // MA ema_period = input(title='EMA period',defval=10) wma_period = input(title='WMA period',defval=20) ema = ema(close,ema_period) wma = wma(close,wma_period) // Entry Condition buy = crossover(ema,wma) and nz(strategy.position_size) == 0 and Buy and time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true) sell = crossunder(ema,wma) and nz(strategy.position_size) == 0 and Sell and time > timestamp(start_year, start_month, start_day, start_hour, start_minute) and (end_time?(time < timestamp(end_year, end_month, end_day, end_hour, end_minute)):true) // Pips pip = input(20)*10*syminfo.mintick // Trading parameters // var bool LS = na var bool SS = na var float EP = na var float TVL = na var float TVS = na var float TSL = na var float TSS = na var float TP1 = na var float TP2 = na var float SL1 = na var float SL2 = na if buy or sell and strategy.position_size == 0 EP := close SL1 := EP - pip * (sell?-1:1) SL2 := EP - pip * (sell?-1:1) TP1 := EP + pip * (sell?-1:1) TP2 := EP + pip * 2 * (sell?-1:1) // current trade direction LS := buy or strategy.position_size > 0 SS := sell or strategy.position_size < 0 // adjust trade parameters and trailing stop calculations TVL := max(TP1,open) - pip[1] TVS := min(TP1,open) + pip[1] TSL := open[1] > TSL[1] ? max(TVL,TSL[1]):TVL TSS := open[1] < TSS[1] ? min(TVS,TSS[1]):TVS if LS and high > TP1 if open <= TP1 SL2:=min(EP,TSL) if SS and low < TP1 if open >= TP1 SL2:=max(EP,TSS) // Closing conditions close_long = LS and open < SL2 close_short = SS and open > SL2 // Buy strategy.entry("buy" , strategy.long, when=buy and not SS) strategy.exit ("exit1", from_entry="buy", stop=SL1, limit=TP1, qty_percent=50) strategy.exit ("exit2", from_entry="buy", stop=SL2, limit=TP2) // Sell strategy.entry("sell" , strategy.short, when=sell and not LS) strategy.exit ("exit3", from_entry="sell", stop=SL1, limit=TP1, qty_percent=50) strategy.exit ("exit4", from_entry="sell", stop=SL2, limit=TP2) // Plots a=plot(strategy.position_size > 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) b=plot(strategy.position_size < 0 ? SL1 : na, color=#dc143c, style=plot.style_linebr) c=plot(strategy.position_size > 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) d=plot(strategy.position_size < 0 ? TP1 : na, color=#00ced1, style=plot.style_linebr) e=plot(strategy.position_size > 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) f=plot(strategy.position_size < 0 ? TP2 : na, color=#00ced1, style=plot.style_linebr) g=plot(strategy.position_size >= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) h=plot(strategy.position_size <= 0 ? na : EP, color=#ffffff, style=plot.style_linebr) plot(ema,title="ema",color=#fff176) plot(wma,title="wma",color=#00ced1)