Chiến lược giao dịch EMA đa khung thời gian động

Tác giả:ChaoZhang, Ngày: 2023-12-12 12:18:41
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là tạo ra các tín hiệu giao dịch dựa trên sự chéo chéo của nhiều đường trung bình chuyển động theo cấp số nhân (EMA). Nó đi dài khi EMA ngắn hạn vượt qua đường EMA dài hạn từ dưới, và đóng các vị trí khi EMA ngắn hạn vượt qua đường EMA dài hạn. Chiến lược này cho phép cấu hình nhiều khoảng thời gian EMA, và mỗi EMA có thể được kích hoạt độc lập. Chiến lược sẽ giao dịch chéo chéo trên tất cả các đường EMA được kích hoạt.

Tên chiến lược

Chiến lược giao dịch EMA đa khung thời gian động

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

Chiến lược thiết lập 8 thời gian EMA - 8 ngày, 13 ngày, 21 ngày, 34 ngày, 55 ngày, 89 ngày, 144 ngày và 233 ngày.

Nó tạo ra tín hiệu dài khi EMA ngắn hạn vượt qua EMA dài hạn từ dưới. Nó tạo ra tín hiệu thoát khi EMA ngắn hạn vượt qua EMA dài hạn từ trên. Vì vậy, nếu hai EMA được bật, EMA ngắn hơn > longerEMA là tín hiệu dài, EMA ngắn hơn < longerEMA là tín hiệu thoát.

Ví dụ, nếu EMA 55 ngày và EMA 89 ngày được bật, chiến lược sẽ dài khi EMA 55 ngày vượt qua EMA 89 ngày và thoát khi EMA 55 ngày vượt qua EMA 89 ngày. Điều này cho phép chiến lược điều chỉnh năng động các kết hợp EMA được sử dụng, chuyển từ khung thời gian dài hơn sang ngắn hơn hoặc ngược lại.

Kích thước vị trí được thiết lập theo vốn chủ sở hữu tài khoản chia cho gần chia cho số EMA được kích hoạt.

Phân tích lợi thế

  • Tính linh hoạt để điều chỉnh khung thời gian bằng cách cấu hình các EMA khác nhau
  • Mỗi EMA có thể được kích hoạt / vô hiệu hóa một cách độc lập, có thể tùy chỉnh cao
  • Các vị trí được phân phối đồng đều trên các EMA, tốt cho quản lý rủi ro
  • Sử dụng nhiều EMA, có thể chuyển sang EMA phù hợp hơn cho các giai đoạn thị trường khác nhau
  • Logic đơn giản và rõ ràng, dễ hiểu và gỡ lỗi

Phân tích rủi ro

  • EMA một mình không thể xác định cấu trúc thị trường, dễ bị tín hiệu sai
  • Thị trường Whipsaw dẫn đến sự vượt quá EMA, tăng tần suất giao dịch và chi phí trượt
  • Nhu cầu tối ưu hóa các thông số EMA cho các thị trường khác nhau
  • Có thể cần các chỉ số khác để xác nhận tín hiệu

Xem xét kết hợp EMA với các chỉ số khác ví dụ như kênh hoặc dao động để lọc tín hiệu, hoặc kết hợp các chỉ số xu hướng và đảo ngược.

Hướng dẫn tối ưu hóa

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

  1. Tối ưu hóa các tham số EMA thông qua quét tham số và phân tích bước đi trước để tìm kết hợp EMA tốt nhất.

  2. Thêm các điều kiện bộ lọc trên đường chéo EMA để tránh tín hiệu sai, ví dụ như bộ lọc khối lượng, bộ lọc biến động vv.

  3. Kết hợp với các chỉ số khác như MACD, KDJ, Bollinger Bands để tận dụng lợi thế của sự bổ sung.

  4. Điều chỉnh động kích thước vị trí trên mỗi EMA dựa trên biến động thị trường hoặc sức mạnh xu hướng.

  5. Tối ưu hóa mức dừng lỗ và lấy lợi nhuận để đạt được tỷ lệ rủi ro-lợi nhuận tốt nhất.

Kết luận

Nhìn chung, đây là một chiến lược rất đơn giản và trực tiếp tạo ra tín hiệu từ các đường chéo EMA để bắt được xu hướng ngắn hạn và trung hạn. Ưu điểm chính của nó nằm ở khả năng cấu hình và linh hoạt cao để cho phép các nhà giao dịch lựa chọn EMA phù hợp với họ. Tuy nhiên, EMA một mình có thể dễ dàng đưa ra tín hiệu sai, đó là rủi ro lớn nhất. Kết hợp với các chỉ số khác và tối ưu hóa tham số có thể dẫn đến hiệu suất giao dịch tốt hơn.


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

//@version=2
strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true)

// Revision:        1
// Author:          @ToS_MavericK

buyprice = 0.0
buyprice := buyprice[1]

// === INPUT SMA ===
EMA1  = input(8)
EMA2  = input(13)
EMA3  = input(21)
EMA4  = input(34)
EMA5  = input(55)
EMA6  = input(89)
EMA7  = input(144)
EMA8  = input(233)

EnableEMA1 = input(true)
EnableEMA2 = input(true)
EnableEMA3 = input(true)
EnableEMA4 = input(true)
EnableEMA5 = input(true)
EnableEMA6 = input(true)
EnableEMA7 = input(true)
EnableEMA8 = input(true)

//Profit  = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1)
//StopLoss    = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
FromMonth   = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear    = input(defval = 2018, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay   = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear  = input(defval = 2020, title = "To Year", minval = 2012)


// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === SERIES SETUP ===
vEMA1 = ema(close, EMA1)
vEMA2 = ema(close, EMA2)
vEMA3 = ema(close, EMA3)
vEMA4 = ema(close, EMA4)
vEMA5 = ema(close, EMA5)
vEMA6 = ema(close, EMA6)
vEMA7 = ema(close, EMA7)
vEMA8 = ema(close, EMA8)

count = -1
if (EnableEMA1 == true)
    count := count + 1
if (EnableEMA2 == true)
    count := count + 1
if (EnableEMA3 == true)
    count := count + 1
if (EnableEMA4 == true)
    count := count + 1
if (EnableEMA5 == true)
    count := count + 1
if (EnableEMA6 == true)
    count := count + 1
if (EnableEMA7 == true)
    count := count + 1
if (EnableEMA8 == true)
    count := count + 1

// set position size
Amount = 1 / (close * count)

// === EXECUTION ===
strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2)
strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2))

strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3)
strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3))

strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4)
strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4))

strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5)
strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5))

strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6)
strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6))

strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7)
strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7))

strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8)
strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8))

plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line)  // plot FastMA
plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line)    // plot SlowMA
plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line)    // plot SlowMA

//plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line)    // plot SlowMA
//plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line)    // plot SlowMA


Thêm nữa