Chiến lược theo dõi hai hướng Momentum Breakout

Tác giả:ChaoZhang, Ngày: 2023-12-18 10:47:46
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số động lực và các chỉ số theo dõi hai chiều để nắm bắt các tín hiệu đột phá trong các xu hướng mạnh để theo dõi xu hướng.

Chiến lược logic

  1. Chỉ số HiLo Activator tính giá điểm trung bình bằng cách sử dụng điểm trung bình của mức cao nhất và thấp nhất. Khi giá phá vỡ trên điểm trung bình, một tín hiệu mua được tạo ra. Khi giá phá vỡ dưới điểm trung bình, một tín hiệu bán được tạo ra.

  2. Chỉ số hướng trung bình (ADX) được sử dụng để đánh giá sức mạnh của xu hướng. Giá trị ADX càng cao, xu hướng càng mạnh. Chiến lược này sử dụng ADX với ngưỡng để lọc tín hiệu, chỉ tạo ra tín hiệu khi xu hướng đủ mạnh.

  3. Các chỉ số hướng DI + và DI- đại diện cho sức mạnh của xu hướng tăng và giảm tương ứng. Chiến lược này cũng sử dụng các ngưỡng DI + và DI- để xác nhận sức mạnh để tránh các tín hiệu sai.

  4. Các tín hiệu mua được tạo ra khi giá phá vỡ trên điểm trung bình, ADX cao hơn ngưỡng, và DI + cao hơn ngưỡng. Các tín hiệu bán được tạo ra khi giá phá vỡ dưới điểm trung bình, ADX cao hơn ngưỡng, và DI- cao hơn ngưỡng.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của động lực và các chỉ số theo xu hướng để nắm bắt các sự đột phá sớm và theo dõi các xu hướng chặt chẽ.

So với việc sử dụng chỉ số động lực một mình, chiến lược này thêm đánh giá sức mạnh xu hướng để lọc tín hiệu và cải thiện lợi nhuận.

Nhìn chung, chiến lược có thể theo dõi xu hướng trơn tru, vào và ra kịp thời, và tránh bị mắc kẹt trong việc củng cố đồng thời giảm tổn thất từ sự đảo ngược xu hướng.

Phân tích rủi ro

Chiến lược này có một số rủi ro từ sự đảo ngược giá tạm thời tạo ra các tín hiệu sai. Ngoài ra, việc sử dụng ngưỡng ADX và DI có thể khiến bạn bỏ lỡ một số cơ hội sớm.

Để giảm rủi ro, hãy điều chỉnh các thông số HiLo Activator để tăng phạm vi đột phá. Để nắm bắt nhiều cơ hội hơn, giảm ngưỡng ADX và DI bằng chi phí chất lượng tín hiệu.

Người dùng cũng nên lưu ý sự khác biệt giữa các sản phẩm và môi trường thị trường.

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

Các cách chính để tối ưu hóa chiến lược này bao gồm:

  1. Điều chỉnh thời gian HiLo Activator và mức kích hoạt để cân bằng rủi ro và thời gian.

  2. Điều chỉnh thời gian và ngưỡng ADX để cân bằng chất lượng và tần số tín hiệu.

  3. Đặt ngưỡng riêng biệt cho DI + và DI- để phù hợp với sự khác biệt giữa xu hướng tăng và giảm.

  4. Thêm các chiến lược dừng lỗ với mức dừng lỗ để kiểm soát lỗ giao dịch duy nhất.

  5. Kết hợp với các chỉ số phụ trợ khác để cải thiện sự ổn định tổng thể.

Kết luận

Chiến lược này xem xét cả động lực và các chỉ số theo xu hướng để tạo ra tín hiệu trong các xu hướng mạnh. Nó có lợi thế theo xu hướng trơn tru và chặt chẽ, phù hợp để nắm bắt các cơ hội xu hướng sớm. Nó cũng có khả năng kiểm soát rủi ro hợp lý để giảm lỗ do tín hiệu sai và whipsaws. Với việc điều chỉnh tham số và thêm stop loss, nó có thể đạt được hiệu suất ổn định. Là một chiến lược theo dõi xu hướng linh hoạt phù hợp với các sản phẩm và thị trường khác nhau, nó xứng đáng được sự chú ý và ứng dụng tốt từ các nhà giao dịch lượng.


/*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)


Thêm nữa