
Chiến lược giao dịch đường hai đường trung bình di chuyển là một chiến lược giao dịch theo xu hướng theo dõi tín hiệu chéo giữa hai đường trung bình di chuyển. Chiến lược này sử dụng cả đường trung bình di chuyển chỉ số ((EMA) và đường trung bình di chuyển trọng lượng ((WMA) như một chỉ số tín hiệu giao dịch.
Nguồn tín hiệu giao dịch của chiến lược này là một cái chết vàng của EMA ngắn hạn với chu kỳ 10 và WMA dài hạn với chu kỳ 20 của WMA. Khi WMA dài hạn trên EMA ngắn hạn, thị trường được đảo ngược từ dưới lên, làm nhiều hơn; Khi EMA ngắn hạn dưới WMA dài hạn, thị trường được đảo ngược từ lên xuống, làm rỗng.
Chiến lược này ban đầu xác định hướng giao dịch, đặt lệnh dừng ở khoảng cách dưới hoặc trên 1 chu kỳ ATR, đồng thời đặt hai lệnh dừng, lệnh dừng đầu tiên ở khoảng cách trên hoặc dưới 1 ATR, và lệnh dừng thứ hai ở khoảng cách trên hoặc dưới 2 ATR. Khi lệnh dừng đầu tiên được kích hoạt, 50% vị trí tiếp theo được đóng cửa bằng cách dừng thứ hai và dừng di chuyển.
Lập luận dừng chân di chuyển là, miễn là giá cao nhất hoặc giá thấp nhất được kích hoạt sau khi chạm điểm dừng đầu tiên, nó sẽ được cập nhật theo dòng K theo thời gian thực, và dừng chân sẽ được di chuyển đến giữa giá tối đa và giá vào để ngăn chặn lỗ hổng và khóa lợi nhuận.
Chiến lược này sử dụng chức năng xóa tiếng ồn bằng phẳng đôi của đường trung bình di chuyển, có thể loại bỏ hiệu quả sự biến động ngẫu nhiên trong thị trường, nhận ra tín hiệu xu hướng ở đường dài giữa và tránh bị đặt. Việc đặt hai điểm dừng theo đợt cùng lúc làm tăng phạm vi lợi nhuận của chiến lược và tối đa hóa lợi nhuận.
Đường trung bình di chuyển tự nó có độ chậm trễ cao, có thể tạo ra nguy cơ bị mất tín hiệu; giao thoa giữa hai đường trung bình di chuyển có thể tạo ra nhiều tín hiệu giả trong một số thị trường, dẫn đến tổn thất. Thiết lập dừng lỗ là một phần quan trọng trong chiến lược, nếu dừng lỗ quá nhỏ dễ bị phá vỡ và gây tổn thất, nếu dừng lỗ quá lớn có thể không kiểm soát rủi ro hiệu quả.
Ngoài ra, trong thời điểm thị trường biến động mạnh, việc dừng lỗ di động có thể không có tác dụng bảo vệ tốt.
Bạn có thể thử nghiệm các tham số khác nhau của EMA và WMA để tìm ra sự kết hợp tốt nhất. EMA ngắn hoặc WMA dài có thể ảnh hưởng đến hiệu suất chiến lược.
Có thể chọn ATR nhân hoặc điểm dừng cố định tùy thuộc vào đặc điểm của giống và phong cách giao dịch khác nhau.
Có thể kiểm tra hiệu quả của việc dừng di chuyển một phần vị trí và dừng di chuyển toàn kho.
Có thể đánh giá tín hiệu lọc bằng cách giới thiệu các chỉ số khác, hỗ trợ EMA và WMA, cải thiện chất lượng tín hiệu.
Chiến lược giao dịch đường hai đường trung bình di chuyển nói chung là khá mạnh mẽ, hoạt động tốt trong tình huống xu hướng. Hiệu suất thực tế của chiến lược có thể được tăng cường hơn nữa thông qua tối ưu hóa tham số, tối ưu hóa dừng lỗ và nâng cao chất lượng tín hiệu. Đây là một ý tưởng chiến lược tiềm năng đáng để nghiên cứu sâu hơn và đầu tư vào thị trường 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)