Chiến lược giao dịch định lượng dựa trên sự phân hủy chế độ thực nghiệm

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

img

Tổng quan

Chiến lược này dựa trên phương pháp Phân hủy chế độ thực nghiệm (EMD) để phân hủy chuỗi giá và chiết xuất các tính năng từ các băng tần khác nhau, kết hợp với các tín hiệu giao dịch trung bình.

Chiến lược logic

  1. Sử dụng phương pháp EMD để lọc băng tần và trích xuất biến động giá
  2. Tính toán trung bình động của chuỗi đỉnh và đáy
  3. Tạo tín hiệu giao dịch khi đường trung bình vượt quá một tỷ lệ phần trăm nhất định của đường đỉnh và đường đáy
  4. Long hoặc short dựa trên tín hiệu giao dịch

Phân tích lợi thế

  1. Phương pháp EMD có thể phân hủy hiệu quả chuỗi giá và chiết xuất các tính năng hữu ích
  2. Các đường đỉnh và đường đáy chỉ kiểm soát chiến lược giao dịch khi biến động giá lớn hơn một chiều rộng nhất định
  3. Kết hợp với đường trung bình, nó có thể lọc hiệu quả các sự đột phá sai

Phân tích rủi ro

  1. Chọn không đúng các thông số phương pháp EMD có thể dẫn đến quá tải
  2. Nó mất một chu kỳ dài để hình thành một tín hiệu giao dịch và không thể thích nghi với giao dịch tần số cao
  3. Không thể đối phó với điều kiện thị trường với biến động giá đáng kể

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

  1. Tối ưu hóa các thông số của mô hình EMD để cải thiện khả năng thích nghi với thị trường
  2. Kết hợp các chỉ số khác như tín hiệu dừng lỗ và lấy lợi nhuận
  3. Thử các chuỗi giá khác nhau như đầu vào chiến lược

Tóm lại

Chiến lược này sử dụng phương pháp phân hủy chế độ thực nghiệm để chiết xuất các tính năng từ chuỗi giá và tạo ra các tín hiệu giao dịch dựa trên các tính năng chiết xuất, nhận ra một chiến lược giao dịch trung và dài hạn ổn định. Ưu điểm của chiến lược này là nó có thể xác định hiệu quả các tính năng định kỳ trong giá và phát lệnh giao dịch trong thời gian biến động lớn. Nhưng cũng có một số rủi ro nhất định, và cần tối ưu hóa thêm để thích nghi với môi trường thị trường phức tạp hơn.


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

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/04/2017
// The related article is copyrighted material from Stocks & Commodities Mar 2010
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Empirical Mode Decomposition")
Length = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
xPrice = hl2
beta = cos(3.1415 * (360 / Length) / 180)
gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
alpha = gamma - sqrt(gamma * gamma - 1)
xBandpassFilter = 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
xMean = sma(xBandpassFilter, 2 * Length)
xPeak =  iff (xBandpassFilter[1] > xBandpassFilter and xBandpassFilter[1] > xBandpassFilter[2], xBandpassFilter[1], nz(xPeak[1])) 
xValley =  iff (xBandpassFilter[1] < xBandpassFilter and xBandpassFilter[1] < xBandpassFilter[2], xBandpassFilter[1], nz(xValley[1])) 
xAvrPeak = sma(xPeak, 50)
xAvrValley = sma(xValley, 50)
nAvrPeak = Fraction * xAvrPeak
nAvrValley = Fraction * xAvrValley
pos = iff(xMean > nAvrPeak and xMean > nAvrValley, 1,
	     iff(xMean < nAvrPeak and xMean < nAvrValley, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(xMean, color=red, title="Mean")
plot(nAvrPeak, color=blue, title="Peak")
plot(nAvrValley, color=blue, title="Valley")

Thêm nữa