Phân tích chiến lược EMA đôi

Tác giả:ChaoZhang, Ngày: 2024-02-28 18:07:59
Tags:

img

Tổng quan

Chiến lược EMA đôi là một chiến lược theo xu hướng xác định hướng xu hướng của giá bằng cách tính toán EMA của các chu kỳ khác nhau và sử dụng đó để xác định các bước vào và ra.

Chiến lược logic

Chiến lược này chủ yếu dựa trên hai chỉ số EMA, một EMA ngắn hạn 9 ngày và một EMA dài hơn 21 ngày.

Khi EMA ngắn vượt qua trên EMA dài, nó được xem là giá đi vào xu hướng tăng. Chiến lược sẽ đi dài để theo xu hướng tăng. Khi EMA ngắn vượt qua dưới EMA dài, nó được xem là giá đi xuống xu hướng. Chiến lược sẽ đi ngắn để theo xu hướng giảm.

Các chỉ số EMA có thể lọc hiệu quả tiếng ồn từ dữ liệu giá và xác định hướng chính của xu hướng.

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Ý tưởng chiến lược đơn giản và dễ hiểu và thực hiện.
  2. Nó có thể xác định hiệu quả xu hướng giá và vào đúng thời điểm các vị trí để theo dõi xu hướng.
  3. Sử dụng EMA lọc tiếng ồn và tránh sự can thiệp từ biến động giá ngắn hạn.
  4. Các thông số EMA có thể được cấu hình để điều chỉnh độ nhạy của chiến lược.

Rủi ro

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Đặc điểm chậm trễ của EMA có thể làm tăng tổn thất khi xu hướng đảo ngược.
  2. Cài đặt tham số EMA không chính xác làm tăng tỷ lệ tín hiệu sai.
  3. Chiến lược này phù hợp hơn với các thị trường có xu hướng mạnh và dễ bị tổn thương trong các giai đoạn giới hạn phạm vi.

Tăng cường

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Bao gồm các chỉ số khác để xác định sự đảo ngược xu hướng và giảm lỗ, ví dụ như MACD, KDJ, v.v.
  2. Thêm logic dừng lỗ. Chiến lược dừng lỗ tốt có thể làm giảm đáng kể mức rút tiền tối đa.
  3. Tối ưu hóa các thông số EMA để phù hợp hơn với các đặc điểm giá của các sản phẩm khác nhau.
  4. Sử dụng thuật toán học máy để tự động hóa tối ưu hóa tham số EMA.

Tóm lại

Tóm lại, chiến lược EMA đôi là một chiến lược rất hữu ích sau xu hướng. Nó dễ dàng hoạt động, hiểu và hoạt động xuất sắc trong các thị trường xu hướng mạnh. Chiến lược cũng có một số rủi ro có thể được giảm thiểu thông qua các cải tiến khác nhau để cải thiện sự ổn định của nó.


/*backtest
start: 2023-02-21 00:00:00
end: 2024-02-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// This can only draw so many lines. Use bar replay to go back further
strategy("Strategy Lines", shorttitle="Strategy Lines", overlay=true, max_lines_count=500)

//###########################################################################################################################################
// Replace your strategy here
//###########################################################################################################################################

shortEMA = ta.ema(close, input(9, title="Short EMA Length"))
longEMA = ta.ema(close, input(21, title="Long EMA Length"))

// Entry conditions for long and short positions
longCondition = ta.crossover(shortEMA, longEMA)
shortCondition = ta.crossunder(shortEMA, longEMA)

//###########################################################################################################################################
// Strategy Lines
//###########################################################################################################################################

var timeLow = bar_index
var line li = na
var openLPrice = 0.0000
var openSPrice = 0.0000

LongWColor = input.color(color.rgb(0,255,0,0),"Long Win Color", group="Strategy Lines")
LongLColor = input.color(color.rgb(0,0,255,0),"Long Loss Color", group="Strategy Lines")
ShortWColor = input.color(color.rgb(255,255,0,0),"Short Win Color", group="Strategy Lines")
ShortLColor = input.color(color.rgb(255,0,0,0),"Short Loss Color", group="Strategy Lines")
WinFontColor = input.color(color.rgb(0,0,0,0),"Win Font Color", group="Strategy Lines")
LossFontColor = input.color(color.rgb(255,255,255,0),"Loss Font Color", group="Strategy Lines")
LinesShowLabel = input(false,"Show Labels?",group = "Strategy Lines")

// // Start new line when we go long
// if strategy.position_size >0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)

// // Start new line when we go short
// if strategy.position_size <0
//     line.delete(li)
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)

// //Delete Lines if we don't have a position open
// if strategy.position_size ==0
//     li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=color.rgb(0,0,0,100))
//     line.delete(li)

if LinesShowLabel
    // Short Label
    if strategy.position_size>=0 and strategy.position_size[1] <0
        label.new(
             timeLow, na, 
             text=str.tostring((openSPrice-close[1])/(syminfo.mintick*10)), 
             color=close[1]<openSPrice?ShortWColor:ShortLColor, 
             textcolor=close[1]<openSPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)
    // Long Label
    if strategy.position_size<=0 and strategy.position_size[1] >0
        label.new(
             timeLow, na,
             text=str.tostring((close[1]-openLPrice)/(syminfo.mintick*10)), 
             color=close[1]>openLPrice?LongWColor:LongLColor, 
             textcolor=close[1]>openLPrice?WinFontColor:LossFontColor,
             size=size.small, 
             style=label.style_label_down, yloc=yloc.abovebar)

// Open long position and draw line
if (longCondition)
    //strategy.entry("Long", strategy.long)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close>openLPrice?LongWColor:LongLColor)
    openLPrice := close

// Open short position and draw line
if (shortCondition)
    //strategy.entry("Short", strategy.short)
    // timeLow := bar_index
    // li := line.new(timeLow, close[bar_index-timeLow], bar_index, close, width=2, color=close<openSPrice?ShortWColor:ShortLColor)
    openSPrice := close

//###########################################################################################################################################
// Strategy Execution (Replace this as well)
//###########################################################################################################################################

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

Thêm nữa