
Chiến lược này kết hợp với việc sử dụng chỉ số động lực và chỉ số theo dõi hai chiều, để nắm bắt tín hiệu phá vỡ trong xu hướng mạnh, thực hiện theo dõi xu hướng. Khi giá phá vỡ lên, làm nhiều, khi giá phá vỡ xuống, nằm trong chiến lược theo dõi xu hướng.
Sử dụng chỉ số kích hoạt HiLo để tính giá trung bình, chỉ số này lấy điểm giữa giá cao nhất và giá thấp nhất làm giá trung bình. Nó tạo ra tín hiệu mua khi giá tăng vượt qua giá trung bình và tạo ra tín hiệu bán khi giá giảm vượt qua giá trung bình.
Chỉ số xu hướng trung bình ADX được sử dụng để đánh giá cường độ của xu hướng. ADX càng lớn, xu hướng càng mạnh. Chiến lược này được kết hợp với việc sử dụng ADX có một số giá trị giảm để lọc tín hiệu, chỉ tạo ra tín hiệu khi xu hướng đủ mạnh.
Chỉ số đa hướng DI+ và DI- biểu thị sức mạnh đa đầu và sức mạnh trống đầu. Chiến lược này đồng thời kết hợp với DI+ và DI- với một ngưỡng nhất định để xác nhận sức mạnh đa đầu và trống đầu, để ngăn chặn tín hiệu sai.
Một tín hiệu mua được tạo ra khi giá vượt qua mức giá trung bình, ADX cao hơn so với giá giảm, DI + cao hơn so với giá giảm; một tín hiệu bán được tạo ra khi giá vượt qua mức giá trung bình, ADX cao hơn so với giá giảm, DI - cao hơn so với giá giảm.
Chiến lược này kết hợp lợi thế của chỉ số động lực và chỉ số xu hướng, có thể bắt được sự đột phá của giá trong sự phát triển của xu hướng sớm, do đó hoạt động chặt chẽ. Đồng thời, các điều kiện lọc xu hướng nghiêm ngặt, giúp tránh tín hiệu sai của thị trường hợp nhất và thị trường chấn động.
So với chỉ số động lực sử dụng đơn lẻ, chiến lược này có thể làm giảm tín hiệu sai và tăng khả năng kiếm lợi nhuận. So với chỉ số theo dõi xu hướng sử dụng đơn lẻ, chiến lược này có thể tạo tín hiệu bằng cách phá vỡ và đi vào xu hướng sớm hơn.
Nhìn chung, chiến lược có thể theo dõi xu hướng một cách trơn tru, vào và ra ngoài kịp thời, tránh bùn; đồng thời cũng có thể giảm thiểu tổn thất khi xu hướng đảo ngược.
Chiến lược này có một số rủi ro khi giá có thể có một mức độ điều chỉnh để tạo ra tín hiệu đảo ngược. Ngoài ra, việc sử dụng các điều kiện lọc ADX và DI có thể bỏ lỡ một số cơ hội trong giai đoạn đầu hoạt động.
Để giảm nguy cơ đòn siết, bạn có thể điều chỉnh các tham số của bộ kích hoạt HiLo để tăng cường độ đột phá. Để có được nhiều cơ hội hơn, bạn có thể giảm yêu cầu giá trị ADX và DI, nhưng cần cân bằng chất lượng tín hiệu.
Ngoài ra, người dùng cần chú ý đến sự khác biệt trong thiết lập tham số trong các loại khác nhau và môi trường thị trường. Thông thường, hàng hóa cần thiết lập ngưỡng cao hơn; cổ phiếu và ngoại hối có thể sử dụng ngưỡng thấp hơn.
Chính sách này có thể được tối ưu hóa bằng cách điều chỉnh các thiết lập tham số, các hướng tối ưu hóa chính bao gồm:
Điều chỉnh chu kỳ kích hoạt HiLo và tần số kích hoạt, cân bằng rủi ro và thời gian nhập whipsaw.
Điều chỉnh các yêu cầu về chu kỳ và ngưỡng ADX, cân bằng chất lượng tín hiệu và tần số nhập.
Điều chỉnh các giới hạn cho đa đầu và không đầu DI tương ứng, phân biệt giữa đa đầu và không đầu môi trường khác nhau.
Thêm chiến lược dừng lỗ, thiết lập điểm dừng để kiểm soát tổn thất đơn lẻ.
Kết hợp với các chỉ số hỗ trợ khác để tối ưu hóa và tăng sự ổn định tổng thể của chiến lược.
Chiến lược này tích hợp các chỉ số động lực và chỉ số xu hướng, tạo ra tín hiệu mua và bán trong xu hướng mạnh. Nó có tính năng theo dõi xu hướng, phù hợp để nắm bắt cơ hội xu hướng sớm. Đồng thời, nó cũng có khả năng kiểm soát rủi ro nhất định, có thể làm giảm các tín hiệu sai và tổn thất do whipsaw gây ra.
/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)
// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")
// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")
// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)
// Function to get backtest data
getBacktestData() =>
var float data = na
if bar_index >= backtest_candles
data := security(syminfo.tickerid, "D", close[backtest_candles])
data
// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2
// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)
// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold
// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")
// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)
// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0
if (signalLong or signalShort)
totalTrades := totalTrades + 1
if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
winningTrades := winningTrades + 1
if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
winningTrades := winningTrades + 1
accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0
// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)