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


Ngày tạo: 2024-02-29 14:54:25 sửa đổi lần cuối: 2024-02-29 14:54:25
sao chép: 1 Số nhấp chuột: 668
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

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.

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

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.

Ưu điểm

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.

Rủi ro

Đườ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.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Tóm tắt

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ế.

Mã nguồn chiến lược
/*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)