Chiến lược theo dõi xu hướng EMA Golden Cross

Tác giả:ChaoZhang, Ngày: 23-11-21 15:10:54
Tags:

img

Tổng quan

Chiến lược này tính toán đường EMA nhanh và đường EMA chậm và so sánh mối quan hệ kích thước giữa hai đường EMA để xác định hướng xu hướng của thị trường. Nó thuộc về một chiến lược theo dõi xu hướng đơn giản. Khi đường EMA nhanh vượt qua đường EMA chậm, đi dài. Khi đường EMA nhanh vượt qua đường EMA chậm, đi ngắn. Đây là một chiến lược chéo vàng EMA kép điển hình.

Chiến lược logic

Các chỉ số cốt lõi của chiến lược này là EMA nhanh và EMA chậm. Độ dài EMA nhanh được thiết lập ở 21 giai đoạn và độ dài EMA chậm được thiết lập ở 55 giai đoạn. EMA nhanh có thể phản ứng nhanh hơn với những thay đổi giá, phản ánh xu hướng ngắn hạn gần đây; EMA chậm phản ứng chậm hơn với những thay đổi giá, lọc ra một số tiếng ồn và phản ánh xu hướng trung bình đến dài hạn.

Khi EMA nhanh vượt qua trên EMA chậm, nó cho thấy xu hướng ngắn hạn đã tăng và xu hướng trung dài có thể đã đảo ngược, đó là tín hiệu để đi dài. Khi EMA nhanh vượt qua dưới EMA chậm, nó cho thấy xu hướng ngắn hạn đã giảm và xu hướng trung dài có thể đã đảo ngược, đó là tín hiệu để đi ngắn.

Bằng cách so sánh các EMA nhanh và chậm, nó ghi lại các điểm đảo ngược xu hướng trên hai quy mô thời gian, ngắn hạn và trung bình đến dài hạn, đó là một chiến lược theo dõi xu hướng điển hình.

Ưu điểm

  1. Logic đơn giản và rõ ràng, dễ hiểu và thực hiện
  2. Điều chỉnh tham số linh hoạt, thời gian EMA nhanh và chậm có thể được tùy chỉnh
  3. ATR dừng lỗ và lấy lợi nhuận có thể cấu hình cho các rủi ro có thể kiểm soát được

Rủi ro

  1. Thời gian không phù hợp của các giao thông chéo EMA, nguy cơ bỏ lỡ điểm nhập cảnh tốt nhất
  2. Các tín hiệu không hợp lệ thường xuyên trong quá trình củng cố thị trường, gây ra tổn thất
  3. Cài đặt tham số ATR không chính xác, dẫn đến việc dừng quá lỏng lẻo hoặc quá hung hăng

Quản lý rủi ro:

  1. Tối ưu hóa các thông số đường EMA nhanh và chậm để tìm kết hợp tối ưu
  2. Thêm các cơ chế lọc để tránh các tín hiệu không hợp lệ từ việc củng cố thị trường
  3. Kiểm tra và tối ưu hóa các thông số ATR để đảm bảo dừng lỗ hợp lý và lấy lợi nhuận

Các lĩnh vực cải tiến

  1. Sự ổn định thử nghiệm của các thông số giai đoạn EMA khác nhau dựa trên các phương pháp thống kê
  2. Thêm điều kiện lọc kết hợp với các chỉ số khác để tránh tín hiệu không hợp lệ
  3. Tối ưu hóa các tham số ATR để có được tỷ lệ dừng lỗ / lấy lợi nhuận tốt nhất

Tóm lại

Chiến lược này đánh giá xu hướng dựa trên EMA crossover, đơn giản và rõ ràng để thực hiện. Với ATR dựa trên dừng, rủi ro có thể kiểm soát được.


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)
 


Thêm nữa