Chiến lược mua và bán theo xu hướng là một chiến lược giao dịch trong ngày theo xu hướng đơn giản. Ý tưởng cơ bản của chiến lược này là đánh giá hướng xu hướng dựa trên đường trung bình di chuyển, mua và bán khi có biến động trong xu hướng.
Chiến lược này sử dụng SMA đơn giản để xác định hướng của xu hướng. Trong xu hướng tăng, khi đường K xuất hiện ở mức thấp, chiến lược sẽ làm nhiều hơn khi phá vỡ điểm cao nhất của đường K trước đó; trong xu hướng giảm, khi đường K xuất hiện ở mức cao, chiến lược sẽ làm trống khi phá vỡ điểm thấp nhất của đường K trước đó.
Chiến lược này cũng sử dụng các chỉ số Blanchflower %K và %D để đánh giá xu hướng. Khi%K vượt qua%D, giao dịch theo hướng ngược. Ngoài ra, chiến lược cũng sử dụng đường cong MACD và Signal làm điều kiện lọc và chỉ thực hiện giao dịch khi MACD và Signal phù hợp với hướng xu hướng.
Chiến lược này có thể chỉ làm nhiều, chỉ làm rỗng hoặc làm nhiều rỗng cùng một lúc. Ngày bắt đầu có thể được đặt thành tháng và năm bắt đầu đo đạc. Tất cả các tham số như chu kỳ trung bình di chuyển, chu kỳ K, chu kỳ D, tham số MACD, v.v. đều có thể được tùy chỉnh.
Chiến lược này có những rủi ro:
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược theo dõi xu hướng mua bán có ý tưởng tổng thể rõ ràng và đơn giản, đánh giá hướng xu hướng bằng đường trung bình di chuyển và sử dụng bộ lọc chỉ số để khóa cơ hội giao dịch trong xu hướng. Chiến lược này có thể có hiệu quả tốt thông qua tối ưu hóa tham số, nhưng vẫn cần gói mã Combine để giảm rủi ro tối ưu hóa và tăng sự ổn định. Ngoài ra, tối ưu hóa thích hợp cũng rất quan trọng để kiểm soát rủi ro.
/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)
// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)
//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal
if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)// if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
if (k < k[1])
strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")
if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
if (k > k[1])
strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)