Chiến lược MACD đa khung thời gian tối ưu hóa thời gian và không gian

Tác giả:ChaoZhang, Ngày: 2024-01-29 10:15:34
Tags:

img

Tổng quan

Chiến lược này tối ưu hóa các tham số của chỉ số MACD, kết hợp với đường trung bình động, hành động giá và thời gian giao dịch cụ thể để đạt được chiến lược giao dịch ngoại hối tỷ lệ thắng cao.

Chiến lược logic

  1. Sử dụng 3 đường K để đánh giá xu hướng giá. Nếu giá đóng của 3 đường K cuối cùng cao hơn giá mở, nó được đánh giá là xu hướng tăng; nếu giá đóng của 3 đường K cuối cùng thấp hơn giá mở, nó được đánh giá là xu hướng giảm.

  2. Tính toán đường nhanh, đường chậm và chênh lệch MACD.

  3. Thời gian giao dịch được thiết lập là 09:00-09:15 mỗi ngày. Trong khoảng thời gian này, nhập thị trường nếu các điều kiện sau đây được đáp ứng:

    • Đi dài khi xu hướng tăng trùng với sự khác biệt MACD vượt trên 0
    • Đi ngắn khi xu hướng giảm trùng với sự khác biệt MACD vượt dưới 0
  4. Lợi nhuận lấy được đặt ở mức 0,3 pips, và dừng lỗ được đặt ở mức 100 pips.

  5. Đóng tất cả các vị trí trong thời gian 21:00-21:15.

Ưu điểm của Chiến lược

  1. Sử dụng sự kết hợp của các chỉ số nhiều khung thời gian để đánh giá toàn diện hướng xu hướng và cải thiện độ chính xác quyết định.

  2. Tối ưu hóa thời gian giao dịch để tránh các giai đoạn biến động thị trường cao, giảm rủi ro dừng lỗ không cần thiết.

  3. Thiết lập tỷ lệ hợp lý cho lợi nhuận và dừng lỗ để tối đa hóa việc khóa lợi nhuận và tránh tăng lỗ.

  4. Nhìn chung, chiến lược có tỷ lệ thắng rất cao và phù hợp với giao dịch ngắn hạn thường xuyên.

Rủi ro của chiến lược

  1. Thời gian giao dịch tương đối cố định, có thể bỏ lỡ cơ hội giao dịch nếu không thể vào thị trường kịp thời.

  2. Chỉ số MACD dễ bị tín hiệu gây hiểu lầm. Giao dịch thận trọng nếu không thể xác định xu hướng tăng hoặc giảm rõ ràng.

  3. Lợi nhuận và dừng lỗ có thể được thiết lập không hợp lý, dẫn đến mất cân bằng lợi nhuận.

  4. Rủi ro tổng thể là nhỏ, nhưng các vị trí quá lớn dưới đòn bẩy cao vẫn có thể dẫn đến tổn thất lớn.

Hướng dẫn tối ưu hóa chiến lược

  1. Kết hợp với các chỉ số khác để xác định xu hướng, tránh các tín hiệu gây hiểu nhầm từ MACD. Ví dụ, kết hợp Bollinger Bands, RSI v.v.

  2. Tối ưu hóa tỷ lệ lấy lợi nhuận / dừng lỗ bằng cách tính toán các thông số tối ưu từ dữ liệu backtest.

  3. Mở rộng các loại giao dịch áp dụng cho chiến lược, đánh giá các hiệu ứng điều chỉnh tham số trên các sản phẩm khác nhau.

  4. Đưa ra các thuật toán học máy để chọn các thông số tối ưu một cách năng động dựa trên các điều kiện thị trường khác nhau.

Kết luận

Nhìn chung, chiến lược này rất phù hợp với các nhà giao dịch mới. Logic là rõ ràng, không gian tối ưu hóa lớn và rủi ro có thể kiểm soát được. Bằng cách tùy chỉnh thời gian mở và thiết lập tỷ lệ lỗ lợi nhuận hợp lý, lợi nhuận cao có thể đạt được.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
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/
// © exlux99

//@version=4
strategy("Very high win rate strategy", overlay=true)


//

fast_length =12
slow_length= 26
src = close
signal_length = 9
sma_source = false
sma_signal = false

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//ma

len=10
srca = input(close, title="Source")
out = hma(srca, len)

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


timeinrange(res, sess) => time(res, sess) != 0

// = input('0900-0915', type=input.session, title="My Defined Hours")
myspecifictradingtimes = '0900-0915'
exittime = '2100-2115'

optionmacd=true


entrytime = time(timeframe.period, myspecifictradingtimes) != 0
exit = time(timeframe.period, exittime) != 0     

if(time_cond and optionmacd )
    if(close > open and close[1] > open[1] and close[2] > open[2] and entrytime  and crossover(hist,0))
        strategy.entry("long",1)
    if(close< open and close[1] < open[1] and close[2] < open[2] and entrytime and crossunder(hist,0))
        strategy.entry("short",0)      


tp = input(0.0003, title="tp")
//tp = 0.0003
sl = input(1.0 , title="sl")
//sl = 1.0
strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")


Thêm nữa