Chiến lược biến đổi xu hướng và chỉ số dẫn đầu Ehlers

Tác giả:ChaoZhang, Ngày: 2023-11-07 16:10:26
Tags:

img

Tổng quan

Chiến lược này kết hợp một chiến lược đảo ngược xu hướng và một chiến lược chỉ số hàng đầu của Ehlers để tạo ra các tín hiệu giao dịch đáng tin cậy hơn. Chiến lược đảo ngược xu hướng xác định các điểm đảo ngược xu hướng trong khi chiến lược chỉ số hàng đầu của Ehlers xác định các điểm chuyển đổi chu kỳ. Các tín hiệu kết hợp có thể xác định tốt hơn thời gian nhập thị trường.

Chiến lược logic

Chiến lược đảo ngược xu hướng

Chiến lược này được lấy từ cuốn sách How I Tripled My Money in the Futures Market của Ulf Jensen, trang 183. Đây là một chiến lược kiểu đảo ngược. Nó đi dài khi mức đóng cao hơn mức đóng trước đó trong 2 ngày liên tiếp và đường chậm Stochastic 9 ngày dưới 50. Nó đi ngắn khi mức đóng thấp hơn mức đóng trước đó trong 2 ngày liên tiếp và đường nhanh Stochastic 9 ngày trên 50.

Chiến lược chỉ số hàng đầu của Ehlers

Chiến lược này vẽ một giá tổng hợp giảm giá hàng ngày (DSP) và chỉ số dẫn đầu Ehlers hàng ngày (ELI) bằng cách sử dụng dữ liệu trong ngày. DSP nắm bắt chu kỳ giá thống trị và được tính bằng cách trừ bộ lọc Butterworth 3 cực từ bộ lọc 2 cực. ELI cung cấp chỉ báo tiên tiến về các điểm chuyển đổi chu kỳ và được tính bằng cách trừ trung bình di chuyển đơn giản của DSP từ DSP. Các tín hiệu mua và bán được tạo ra khi ELI vượt qua hoặc dưới DSP.

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược combo này là kết hợp nhận dạng đảo ngược xu hướng và phát hiện điểm chuyển đổi chu kỳ để có các tín hiệu đáng tin cậy hơn. Chiến lược đảo ngược xu hướng xác định đảo ngược sau khi phá vỡ trong khi chỉ số hàng đầu Ehlers cung cấp chỉ báo sớm về mức thấp và cao chu kỳ. Kết hợp cả hai có thể xác định rõ hơn việc gia nhập thị trường.

Một lợi thế khác là tính linh hoạt trong điều chỉnh tham số. Các tham số của chỉ số chứng khoán có thể được điều chỉnh dựa trên điều kiện thị trường. Độ dài chu kỳ cho chỉ số dẫn đầu Ehlers cũng có thể điều chỉnh cho các chu kỳ khác nhau.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là thiếu xu hướng tồn tại. Vì chiến lược chờ tín hiệu đảo ngược để vào, nó có thể bỏ lỡ các động thái xu hướng ban đầu mạnh mẽ.

Các giải pháp là điều chỉnh các tham số để rút ngắn thời gian phát hiện đảo chiều để nắm bắt sự đảo ngược xu hướng kịp thời.

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

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Đưa ra stop loss để kiểm soát lỗ giao dịch duy nhất.

  2. Tối ưu hóa các tham số để điều chỉnh thời gian tín hiệu đảo ngược cho các môi trường thị trường khác nhau.

  3. Thêm các bộ lọc chỉ số khác để cải thiện chất lượng tín hiệu và giảm tín hiệu sai.

  4. Thêm các mô-đun quản lý rủi ro và kích thước vị trí.

  5. Kiểm tra các tham số trên các sản phẩm khác nhau để tìm phù hợp tối ưu.

  6. Thêm các mô-đun máy học để điều chỉnh tham số thích nghi.

Tóm lại

Chiến lược này kết hợp đảo ngược xu hướng và phát hiện bước ngoặt chu kỳ để có khả năng tham gia thị trường đáng tin cậy hơn. Ưu điểm lớn nhất là chất lượng tín hiệu và tính linh hoạt cao. Rủi ro chính là thiếu xu hướng sớm, có thể được giảm thiểu thông qua điều chỉnh tham số và dừng lỗ.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 26/11/2019
// 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
// This Indicator plots a single
// Daily DSP (Detrended Synthetic Price) and a Daily ELI (Ehlers Leading
// Indicator) using intraday data.
// Detrended Synthetic Price is a function that is in phase with the dominant
// cycle of real price data. This one is computed by subtracting a 3 pole Butterworth
// filter from a 2 Pole Butterworth filter. Ehlers Leading Indicator gives an advanced
// indication of a cyclic turning point. It is computed by subtracting the simple
// moving average of the detrended synthetic price from the detrended synthetic price.
// Buy and Sell signals arise when the ELI indicator crosses over or under the detrended
// synthetic price.
// See "MESA and Trading Market Cycles" by John Ehlers pages 64 - 70. 
//
// 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

D_ELI(Length) =>
    pos = 0.0
    xHL2 = security(syminfo.tickerid, 'D', hl2)
    xEMA1 = ema(xHL2, Length)
    xEMA2 = ema(xHL2, 2 * Length)
    xEMA1_EMA2 = xEMA1 - xEMA2
    xResultEMA = ema(xEMA1_EMA2, Length)
    nRes = xEMA1_EMA2 - xResultEMA
    pos:= iff(nRes > 0, 1,
	       iff(nRes < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & D_ELI (Ehlers Leading Indicator)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthELI = input(7, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_ELI = D_ELI(LengthELI)
pos = iff(posReversal123 == 1 and posD_ELI == 1 , 1,
	   iff(posReversal123 == -1 and posD_ELI == -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