Chiến lược bắt kịp xu hướng của HLHB

Tác giả:ChaoZhang, Ngày: 2023-09-28 11:44:04
Tags:

Tổng quan

Chiến lược này nhằm mục đích nắm bắt các xu hướng ngoại hối ngắn hạn bằng cách sử dụng EMA crossover và RSI làm tín hiệu giao dịch, với bộ lọc ADX để nhập giao dịch và dừng lỗ để khóa lợi nhuận.

Chiến lược logic

Chiến lược dựa trên các chỉ số và điều kiện sau đây để tạo ra tín hiệu giao dịch:

  • EMA nhanh 5 giai đoạn: đường xanh
  • EMA chậm 10 giai đoạn: đường đỏ
  • RSI 10 giai đoạn áp dụng cho giá trung bình (H + L) / 2
  • ADX 14 kỳ

Nhãn hiệu nhập cảnh:

  • Long: khi EMA nhanh vượt qua EMA chậm từ dưới và RSI vượt qua trên 50 từ dưới
  • Short: khi EMA nhanh vượt dưới EMA chậm từ trên và RSI vượt dưới 50 từ trên
  • Chỉ nhận tín hiệu khi ADX > 25

Nhãn ra:

  • Sử dụng stop loss, 150 pips trail distance và 400 pips take profit
  • Đóng giao dịch khi có tín hiệu mới
  • Đóng tất cả các giao dịch trước cuối tuần

Chiến lược này kết hợp EMA crossover, RSI overbought/oversold và ADX trend strength để tạo ra các quy tắc đầu vào vững chắc.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. EMA crossover cho xu hướng xu hướng. Xu hướng tăng xu hướng xu hướng tăng trong khi xu hướng giảm xu hướng giảm. Có thể xác định sự thay đổi xu hướng.

  2. Thêm chỉ số RSI lọc ra một số tín hiệu đột phá sai. Các vùng bán quá mức / mua quá mức cho thấy giảm trong ngắn hạn và tránh các mục nhập không cần thiết vào thị trường phạm vi.

  3. Chỉ xem xét các tín hiệu giao dịch khi ADX > 25, đảm bảo một xu hướng vững chắc.

  4. Chế độ dừng lỗ và lấy lợi nhuận để lợi nhuận chạy trong khi kiểm soát rủi ro. 150 pips trail distance và 400 pips profit target liên tục theo xu hướng.

  5. Đóng tất cả các vị trí trước cuối tuần tránh rủi ro cuối tuần và thực thi tính thường xuyên của giao dịch.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro sau:

  1. Hệ thống EMA crossover dễ bị tín hiệu phá vỡ sai, dẫn đến tổn thất.

  2. Chỉ số RSI chỉ xác định mức mua/bán quá mức, không đảo ngược xu hướng. Có thể bỏ lỡ xu hướng hoặc đảo ngược. Kết hợp với các chỉ số khác.

  3. ADX chỉ đánh giá sự tồn tại của xu hướng, thời gian vào có thể bị tắt.

  4. Các mức dừng lỗ cố định và lấy lợi nhuận có thể không thích nghi với những thay đổi của thị trường.

  5. Nỗ lực đóng cửa hàng tuần có thể bỏ lỡ cơ hội xu hướng tố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 kết hợp EMA khác nhau để tìm ra chiều dài tối ưu.

  2. Hãy thử các thông số RSI khác nhau hoặc kết hợp với KDJ để đánh giá mua quá mức / bán quá mức tốt hơn.

  3. Tối ưu hóa các tham số ADX để lọc phù hợp hơn và chất lượng đầu vào cao hơn.

  4. Kết hợp thử nghiệm dừng cố định và theo dõi động dựa trên ATR.

  5. Thêm các mục rút lui đột phá trong ngày sau khi xác nhận xu hướng, chẳng hạn như khung thời gian thấp hơn.

  6. Thiết lập định giá vị trí dựa trên biến động để điều chỉnh năng động dựa trên biến động thị trường.

  7. Khám phá các kỹ thuật học máy để tự động tối ưu hóa các thông số để thích nghi.

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng đơn giản, xác định hướng xu hướng với đường chéo EMA, lọc bằng RSI, yêu cầu xu hướng với ADX và dừng lại để kiếm lợi nhuận. Tối ưu hóa chủ yếu liên quan đến việc tìm ra các kết hợp chỉ số tốt hơn để linh hoạt và thêm kích thước vị trí năng động.


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

//@version=3
strategy("Hucklekiwi Pip - HLHB Trend-Catcher System", shorttitle="HLHB TCS", overlay=true,
  default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// -----------------------------------------------------------------------------
// HLHB Trend-Catcher System as described on BabyPips.com
//
// Strategy Author: Hucklekiwi Pip 
// Coded By: Backtest Rookies
// -----------------------------------------------------------------------------
//
// Refs:
//   - Original System: https://www.babypips.com/trading/forex-hlhb-system-explained
//   - Updated System: https://www.babypips.com/trading/forex-hlhb-system-20190311
//
//
// Description (From Hucklekiwi Pip)
// 
//   The HLHB System simply aims to catch short-term forex trends.
//   It is patterned after the Amazing Crossover System that Robopip once backtested.
//   In fact, it was one of his highest-scoring mechanical systems in 2014! 
//   The system can be applied to any pair, but since I’m into major pairs, 
//   I’m applying it to the 1-hour charts of EUR/USD and GBP/USD.
// -----------------------------------------------------------------------------
// STRATEGY REQUIREMENTS
// -----------------------------------------------------------------------------
//
// Setup
// -----
//  - EUR/USD 1-hour chart
//  - GBP/USD 1-hour chart
//  - 5 EMA: blue line
//  - 10 EMA: red line
//  - RSI (10) applied to the median price (HL/2)
//  - ADX (14)
//
// Entry
// -----
//  - BUY when the 5 EMA crosses above the 10 EMA from underneath and the RSI 
//    crosses above the 50.0 mark from the bottom.
//  - SELL when the 5 EMA crosses below the 10 EMA from the top and the RSI 
//    crosses below the 50.0 mark from the top.
//  - Make sure that the RSI did cross 50.0 from the top or bottom and not just 
//    ranging tightly around the level.
//  - ADX > 25 for Buy and Sells
//
// Exit
// ----
//  - Use a 50-pip trailing stop and a 200-pip profit target. This increases the 
//    chances of the system riding longer trends.
//  - Close the trade when a new signal materializes.
//  - Close all trades by the end of the week.
// 
// -----------------------------------------------------------------------------

// Strategy Varaibles
// -------------------
ema_fast_len = input(5, title='Fast EMA Length')
ema_slow_len = input(10 , title='Slow EMA Length')
rsi_len = input(10, title='Slow EMA Length')
session_end_hour = input(16, minval=0, maxval=23, title='Weekly Session End (Hour)')
session_end_minute = input(0, minval=0, maxval=59, title='Weekly Session End (Minute)')
// Targets taken from the update post which states 150 & 400 instead of 50 and 200.
profit_target = input(400, title='Profit Target (Pips/Points)')
trailing_stop_dist = input(150, title='Trailing Stop Distance (Pips/Points)')
adx_filt = input(true, title='User ADX Filter')
adx_min = input(25, minval=0, title='Minimum ADX Level')
adx_len = input(14, title="ADX Smoothing")
di_len = input(14, title="DI Length")

// Setup the Indicators
ema_fast = ema(close, ema_fast_len)
ema_slow = ema(close, ema_slow_len)
rsi_ind = rsi(close, rsi_len)

// ADX
adx_dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx_adx(dilen, adxlen) =>
	[plus, minus] = adx_dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[adx_sig, adx_plus, adx_minus] = adx_adx(di_len, adx_len)


// Strategy Logic
ema_long_cross = crossover(ema_fast, ema_slow)
ema_short_cross = crossunder(ema_fast, ema_slow)
rsi_long_cross = crossover(rsi_ind, 50)
rsi_short_cross = crossunder(rsi_ind, 50)
adx_check = adx_filt ? adx_sig >= adx_min : true

longCondition = ema_long_cross and rsi_long_cross and adx_check
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = ema_short_cross and rsi_short_cross and adx_check
if (shortCondition)
    strategy.entry("Short", strategy.short)

strategy.exit("SL/TP", "Long", profit=profit_target,  loss=trailing_stop_dist, trail_points=trailing_stop_dist)  
strategy.exit("SL/TP", "Short", profit=profit_target, loss=trailing_stop_dist, trail_points=trailing_stop_dist)  

// Friday = 6
// If we miss the hour for some reason (due to strange timeframe), then close immediately
// Else if we are on the closing hour, then check to see if we are on or passed the close minute
close_time = dayofweek == 6 ? 
  hour[0] > session_end_hour ? true :
  hour[0] == session_end_hour ?
      minute[0] >= session_end_minute :
  false : false

strategy.close_all(when=close_time)

// Plotting
plot(ema_fast, color=blue, title="Fast EMA")
plot(ema_slow, color=red, title="Slow EMA")

plotshape(rsi_long_cross, style=shape.triangleup, size=size.tiny, location=location.belowbar, color=green, title='RSI Long Cross Marker')
plotshape(rsi_short_cross, style=shape.triangledown, size=size.tiny, location=location.abovebar, color=red, title='RSI Short Cross Marker')

// ADX Filter Highlight
bgcolor(adx_filt and adx_check ? orange : na, transp=90)

Thêm nữa