Chiến lược thời gian dao động chênh lệch trung bình động

Tác giả:ChaoZhang, Ngày: 2023-12-26 14:40:12
Tags:

img

Tổng quan

Chiến lược này tính toán sự khác biệt giữa EMA nhanh và EMA chậm để tạo thành dao động MACD, và tính toán EMA của chính MACD để tạo thành đường tín hiệu, do đó xây dựng một hệ thống lọc kép. Nó tạo ra tín hiệu mua khi đường MACD vượt qua đường tín hiệu từ dưới, và bán tín hiệu khi đường MACD vượt qua đường tín hiệu từ trên, lợi nhuận từ biến động giá ngắn hạn và trung hạn.

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

Chỉ số cốt lõi của chiến lược này là dao động viên MACD, được tính bằng cách trừ EMA chậm (thường là 26 ngày EMA) từ EMA nhanh (thường là 12 ngày EMA). EMA nhanh nhạy cảm hơn và có thể nắm bắt biến động giá ngắn hạn. EMA chậm phản ứng với sự thay đổi giá chậm hơn. Trừ hai hình thành một dao động viên đại diện cho sự khác biệt giữa chu kỳ giá ngắn hạn và trung hạn. EMA (thường là 9 ngày) của chính dao động viên MACD sau đó được tính toán để có được đường tín hiệu. Khi MACD vượt qua đường tín hiệu phía dưới MAC, nó báo hiệu rằng đà tăng của xu hướng ngắn hạn mạnh hơn xu hướng trung hạn, tạo ra tín hiệu mua. Khi DDD vượt qua đường từ phía trên, nó báo hiệu rằng đà giảm của xu hướng ngắn hạn là mạnh hơn, tạo ra tín hiệu bán.

Các thông số đầu vào của chiến lược này được thiết lập theo chiều dài đường nhanh, chiều dài đường chậm, nguồn giá và thời gian làm mịn đường tín hiệu, tương ứng. Chúng có thể được điều chỉnh theo các thị trường khác nhau để tìm kết hợp tham số tối ưu. Khối màu nền cho thấy khung thời gian backtest. Chiến lược chỉ mở các vị trí trong khung thời gian này.

Phân tích lợi thế

  1. Chỉ số MACD là cổ điển và dễ hiểu, nắm bắt hiệu quả các cơ hội đảo ngược ngắn đến trung hạn.

  2. Việc xây dựng EMA kép của hệ thống MACD có tính trơn tru tốt hơn so với các hệ thống MA đơn.

  3. Các tham số tương đối có thể điều chỉnh hơn cho phép tối ưu hóa trên các thị trường khác nhau.

  4. Kết hợp với các chỉ số âm lượng giúp xác định các tín hiệu chất lượng cao.

Phân tích rủi ro

  1. MACD có thể tạo ra nhiều tín hiệu sai trong thị trường dao động.

  2. Nó không thể xác định xu hướng và có thể gây ra tổn thất khi vượt qua xu hướng.

  3. Khung thời gian kiểm tra ngược hạn chế có thể bỏ qua các điều kiện thị trường cực đoan.

  4. Điều chỉnh tham số cần nhiều dữ liệu thị trường hơn để tránh quá phù hợp với các giai đoạn thị trường cụ thể.

Rủi ro có thể được kiểm soát bằng cách kết hợp các chỉ số xu hướng và cơ chế dừng lỗ.

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

  1. Kiểm tra các nguồn giá khác nhau như giá đóng, giá trung bình, giá đặt lại v.v.

  2. Tìm kiếm các bộ tham số tối ưu dựa trên dữ liệu lịch sử hơn.

  3. Tích hợp các chỉ số khác để đánh giá chất lượng tín hiệu, ví dụ như tín hiệu âm lượng.

  4. Kết hợp phân tích xu hướng và chu kỳ để tránh xung đột xu hướng đáng kể.

Kết luận

Chiến lược này nắm bắt các cơ hội đảo ngược ngắn hạn đến trung hạn bằng cách xây dựng một hệ thống lọc EMA kép. Nó thuộc về một chiến lược thời gian thị trường cổ điển và thực tế. Rủi ro có thể được kiểm soát thông qua tối ưu hóa tham số, lọc tín hiệu và phương tiện dừng lỗ. Kết hợp các công cụ phân tích xu hướng để tránh mua đỉnh và bán đáy có thể dẫn đến lợi nhuận ổn định.


/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// 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

grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

//Strategy Testing

// Component Code Start
// Example usage:
// if testPeriod()
//   strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

//Entry and Close settings
if testPeriod() 
    strategy.entry("grow", true, 10, when = grow, limit = close)
    strategy.close("grow", when = fall)
    strategy.close("grow", when = stop)
    
//if testPeriod() 
//   strategy.entry("fall", false, 1000, when = fall, limit = close)
//    strategy.close("fall", when = grow)    



Thêm nữa