
Chiến lược này kết hợp với việc sử dụng chỉ số chỉ số chuyển động trung bình ((ADX) và chỉ số chuyển động hướng lên ((DI +) để xác định hướng và xu hướng của thị trường, đồng thời sử dụng trung bình di chuyển nhanh và chậm để xác định hướng giao dịch và thời gian nắm giữ, thuộc chiến lược giao dịch theo xu hướng. Chiến lược này có thể nắm bắt hiệu quả các điểm đảo ngược của đường ngắn và hoạt động tốt hơn trong thị trường có biến động thấp và xu hướng rõ ràng.
Lý thuyết cốt lõi của chiến lược này là khi đường +DI vượt qua ADX từ phía dưới tạo ra tín hiệu mua, và khi đường +DI đi xuống ADX từ phía trên tạo ra tín hiệu bán. Do đó, chiến lược này phụ thuộc vào sự giao thoa giữa các chỉ số DI và ADX để xác định xu hướng thị trường và điểm đảo ngược. Trong khi đó, mối quan hệ giữa đường nhanh và trung bình được sử dụng để xác định xu hướng thị trường tổng thể và chỉ xem xét tạo ra tín hiệu giao dịch khi EMA nhanh cao hơn EMA chậm.
Cụ thể, một tín hiệu mua sẽ được phát ra khi các điều kiện sau đây được đáp ứng: 1, EMA nhanh cao hơn EMA chậm 2 , + đường DI phá vỡ đường ADX từ phía dưới 3, ADX thấp hơn 30
Một tín hiệu bán hàng được phát ra khi các điều kiện sau được đáp ứng: 1, ADX cao hơn 30 2 , + đường DI từ trên xuống đường ADX
Chiến lược này cũng bổ sung logic dừng lỗ, rút khỏi tất cả các vị trí khi giá thấp hơn giá dừng lỗ.
Chiến lược này kết hợp với DI, ADX và chỉ số đường trung bình, có thể xác định hiệu quả điểm thay đổi xu hướng thị trường. Nó có những lợi thế sau:
Chiến lược này cũng có một số rủi ro cần lưu ý:
Những rủi ro này có thể được cải thiện bằng cách tối ưu hóa các tham số ADX và đường trung bình, điều chỉnh mức dừng lỗ, kết hợp với các tín hiệu xác nhận các chỉ số khác.
Chiến lược này có thể được tối ưu hóa hơn nữa:
Chiến lược xu hướng chéo ADX nói chung là khá ổn định, có thể nắm bắt hiệu quả không gian đảo ngược trước khi biến động, nhưng cần phải chú ý kiểm soát rủi ro. Bằng cách tối ưu hóa thêm các tham số đặt, nhập cảnh nghiêm ngặt và các quy tắc dừng lỗ, lợi nhuận sau khi điều chỉnh rủi ro tốt hơn có thể được. Chiến lược này áp dụng cho tài khoản giao dịch ngắn hạn trong các tài khoản dài hạn.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee
//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00
strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD)
len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)
fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1) //
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)
fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)
//long condition
longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal
barcolor(longCondition ? color.yellow: na)
strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1)
barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)
//Add
strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) )
//calculate stop Loss
stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01)
strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss
//exit condition
exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all