Tài nguyên đang được tải lên... tải...

Chiến lược theo dõi xu hướng động có cơ chế hai

Tác giả:ChaoZhang, Ngày: 2024-01-31 11:13:44
Tags:

img

Tổng quan

Chiến lược theo dõi xu hướng động hai cơ chế kết hợp các tín hiệu từ hai chiến lược giao dịch khác nhau để theo dõi xu hướng.

Chiến lược này chủ yếu được sử dụng để theo dõi xu hướng trung hạn. Bằng cách thiết lập các điểm dừng lỗ năng động thông qua các cơ chế kép, nó có thể khóa lợi nhuận hiệu quả và tránh lỗ từ việc mở rộng. Trong khi đó, kết hợp các chỉ số xu hướng và đảo ngược để xác nhận kép giúp giảm giao dịch ồn ào.

Chiến lược logic

123 Chiến lược đảo ngược

Chiến lược 123 Reversal có nguồn gốc từ trang 183 của cuốn sách của Ulf Jensen How I Tripped My Money in the Futures Market. Nó xác định các mô hình đảo ngược giá bằng cách sử dụng hai thanh đảo ngược liên tiếp.

Cụ thể, nó tạo ra tín hiệu mua khi giá đóng cao hơn giá đóng trước trong hai ngày liên tiếp và dao động Stochastic chậm 9 ngày dưới 50. Nó tạo ra tín hiệu bán khi giá đóng thấp hơn giá đóng trước trong hai ngày liên tiếp và dao động Stochastic nhanh trên 50.

Chỉ số giá tổng hợp giảm giá

Chỉ số giá tổng hợp bị suy giảm (D_DSP) chỉ ra hướng xu hướng giá và phù hợp với chu kỳ thống trị của dữ liệu giá thực tế.

Nếu D_DSP dương tính, nó cho thấy xu hướng giá tăng. Nếu âm tính, nó cho thấy xu hướng giá giảm.

Cơ chế kép

Chiến lược này kết hợp chiến lược 123 Reversal và tín hiệu chỉ số D_DSP. Nếu cả hai tín hiệu đều đồng ý (cả dài hoặc ngắn), giao dịch sẽ được tạo ra. Nếu tín hiệu không đồng ý, các vị trí sẽ được đóng.

Sự xác nhận kép này lọc ra tiếng ồn và khóa trong lợi nhuận xu hướng.

Ưu điểm

Lợi thế lớn nhất của chiến lược này là hai mức độ dừng lỗ mà nó thực hiện. Thứ nhất, Stochastics nhanh và chậm tạo thành một mức dừng lỗ theo thời gian. Thứ hai, chính chiến lược đảo ngược chứa một tính năng dừng lỗ.

Hai lệnh dừng lỗ tối đa hóa việc khóa lợi nhuận và ngăn chặn các lỗ chéo từ một chiến lược dừng lỗ duy nhất.

Rủi ro

Rủi ro lớn nhất đến từ các thiết lập tham số không linh hoạt. Ví dụ, độ dài chu kỳ sai có thể gây ra xu hướng chính bị bỏ lỡ, mất lợi nhuận hoặc tăng lỗ.

Ngoài ra, khi kết hợp các chiến lược đảo ngược và xu hướng, việc bù trừ các vị trí khi tín hiệu không đồng ý có thể bỏ lỡ cơ hội khi xu hướng tiếp tục theo một hướng chính.

Tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo nhiều cách:

  1. Tối ưu hóa các tham số chu kỳ bằng cách sử dụng nhiều dữ liệu backtesting hơn để tìm ra các giá trị tối ưu.

  2. Thêm thêm các chiến lược dừng lỗ như phá vỡ hoặc dừng lỗ để thiết lập các điểm dừng lỗ năng động và hợp lý hơn.

  3. Điều chỉnh kỹ các quy tắc xác nhận hai để ngăn chặn quá mức bù trừ các vị trí.

  4. Thêm các bộ lọc như bộ lọc biến động để tránh đánh giá sai từ biến động xu hướng giai đoạn cuối.

Kết luận

Chiến lược theo dõi xu hướng động cơ hai cơ chế thực hiện theo dõi xu hướng hiệu quả và kiểm soát rủi ro thông qua hai lỗ dừng của Stochastics nhanh và chậm và xác nhận hai tín hiệu đảo ngược và xu hướng. Nó xem xét cả chiều dài thời gian của hành động giá cũng như hướng chính nó để tạo thành một cơ sở quyết định đa chiều.

Việc tối ưu hóa liên tục các quy tắc và tham số dự kiến sẽ mang lại kết quả tốt. Nhưng tối ưu hóa chiến lược đòi hỏi một lượng lớn dữ liệu lịch sử. Các bộ lọc lựa chọn cổ phiếu và cơ chế dừng lỗ cũng cần được tinh chỉnh liên tục. Theo dõi thời gian thực trong một khoảng thời gian nào đó được khuyến cáo để xác nhận thêm chiến lược.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/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
// Detrended Synthetic Price is a function that is in phase with the 
// dominant cycle of real price data. This DSP is computed by subtracting 
// a half-cycle exponential moving average (EMA) from the quarter cycle 
// exponential moving average.
// 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_DSP(Length) =>
    pos = 0.0
    xHL2 = hl2
    xEMA1 = ema(xHL2, Length)
    xEMA2 = ema(xHL2, 2 * Length)
    xEMA1_EMA2 = xEMA1 - xEMA2
    pos := iff(xEMA1_EMA2 > 0, 1,
             iff(xEMA1_EMA2 < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & D_DSP (Detrended Synthetic Price)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthDSP = input(14, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_DSP = D_DSP(LengthDSP)
pos = iff(posReversal123 == 1 and posD_DSP == 1 , 1,
	   iff(posReversal123 == -1 and posD_DSP == -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