Chiến lược cân bằng đảo ngược kép

Tác giả:ChaoZhang, Ngày: 2023-12-15 16:56:20
Tags:

img

Tổng quan

Chiến lược cân bằng đảo ngược kép là một chiến lược kết hợp sử dụng cả hai chiến lược đảo ngược và lọc phân hủy chế độ thực nghiệm (EMD). Nó đầu tiên tạo ra các tín hiệu giao dịch bằng cách sử dụng hệ thống đảo ngược 123, sau đó xử lý các tín hiệu bằng bộ lọc EMD, và cuối cùng kết hợp các tín hiệu từ cả hai để xác nhận nhập và xuất. Cách tiếp cận lai này có thể cải thiện tỷ lệ thắng.

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

123 Hệ thống đảo ngược

Hệ thống đảo ngược 123 có nguồn gốc từ cuốn sách How I Tripped My Money in the Futures Market của Ulf Jensen. Nó thuộc loại chiến lược đảo ngược. Nó đi dài khi giá đóng cao hơn giá đóng trước trong 2 ngày liên tiếp và stochastic chậm 9 ngày dưới 50. Nó đi ngắn khi thiết lập ngược lại xảy ra.

Phân hủy chế độ thực nghiệm (EMD)

EMD là một phương pháp phân tích dữ liệu thích nghi. Nó có thể phân hủy dữ liệu thành các thành phần tần số khác nhau và chiết xuất xu hướng dài hạn. Ở đây chúng tôi đặt chiều dài là 20, delta là 0,5 và phần là 0.1 để tạo ra các tín hiệu giao dịch dựa trên các thành phần tần số giá.

Kết hợp tín hiệu

Chiến lược cân bằng đảo ngược kép kết hợp các tín hiệu giao dịch từ cả hệ thống đảo ngược 123 và EMD. Nó chỉ xác nhận các mục chỉ khi tín hiệu từ cả hai hệ thống đồng ý. Cách tiếp cận lai này cải thiện tỷ lệ thắng.

Phân tích lợi thế

Chiến lược cân bằng đảo ngược kép tận dụng những lợi thế từ cả hai chiến lược đảo ngược và kỹ thuật xử lý tín hiệu kỹ thuật số. Hệ thống đảo ngược nắm bắt các cơ hội đảo ngược ngắn hạn trong khi bộ lọc EMD nắm bắt xu hướng dài hạn. Sử dụng cả hai hệ thống cùng nhau có thể cải thiện sự ổn định.

Nó cũng giới thiệu các mô hình 123 để tránh whipsaws không mong muốn. và các thông số EMD cấu hình đúng giúp lọc một số tiếng ồn. tất cả các yếu tố này góp phần tăng tỷ lệ thắng.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này đến từ sự thất bại đảo ngược. Mặc dù mô hình 123 làm giảm xác suất như vậy, sự không chắc chắn của giao dịch đảo ngược vẫn cao. Ngoài ra, phương pháp EMD có thể bị hỏng trong các thị trường biến động cực kỳ.

Để kiểm soát các rủi ro như vậy, các tham số của hệ thống đảo ngược có thể được điều chỉnh để tạo ra các tín hiệu đáng tin cậy hơn. Các phương pháp lọc khác nhau cũng có thể được thử nghiệm thay vì EMD để đạt được hiệu suất lọc tốt hơn. Ngoài ra, cần phải giữ kích thước vị trí nhỏ để hạn chế tổn thất.

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

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

  1. Kiểm tra các bộ tham số khác nhau cho hệ thống đảo ngược để tìm ra tối ưu

  2. Hãy thử các phương pháp lọc kỹ thuật số khác nhau, ví dụ, biến đổi wavelet, biến đổi Hilbert v.v.

  3. Thêm stop loss để kiểm soát lỗ giao dịch duy nhất

  4. Kết hợp các chỉ số khác để đảm bảo độ chính xác hướng cao hơn

  5. Tối ưu hóa các mô hình quản lý tiền như kích thước vị trí

Tóm lại

Chiến lược cân bằng đảo ngược kép kết hợp các điểm mạnh của các chiến lược đảo ngược và kỹ thuật xử lý tín hiệu kỹ thuật số. Với điều chỉnh tham số và kiểm soát rủi ro thích hợp, nó tạo ra hiệu suất giao dịch ổn định. Chiến lược này rất có thể mở rộng và đáng khuyến cáo.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 30/06/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The related article is copyrighted material from Stocks & Commodities Mar 2010
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

Empirical(Length,Delta,Fraction) =>
    pos = 0
    xBandpassFilter = 0.0
    xPeak = 0.0
    xValley =0.0
    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)))
    pos

strategy(title="Combo Backtest 123 Reversal & Empirical Mode Decomposition", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthEMD = input(20, minval=1)
Delta = input(0.5)
Fraction = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posEmpirical = Empirical(LengthEMD,Delta,Fraction)
pos = iff(posReversal123 == 1 and posEmpirical == 1 , 1,
	   iff(posReversal123 == -1 and posEmpirical == -1, -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)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa