Chiến lược giao dịch xu hướng giao dịch ADX

Tác giả:ChaoZhang, Ngày: 2023-12-08 15:49:12
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số chuyển động theo hướng (ADX), chỉ số chuyển động theo hướng (DI +) và trung bình di chuyển nhanh và chậm để xác định hướng và thời gian nắm giữ thị trường. Nó thuộc về các chiến lược giao dịch theo xu hướng. Chiến lược có thể nắm bắt hiệu quả các điểm đảo ngược trong trung bình và ngắn hạn và hoạt động tốt trong thị trường biến động thấp và xu hướng rõ ràng.

Nguyên tắc

Khái niệm cơ bản của chiến lược này là tạo ra tín hiệu mua khi đường +DI vượt qua trên đường ADX từ dưới lên, và tạo ra tín hiệu bán khi đường +DI vượt qua dưới đường ADX từ trên xuống. Do đó, chiến lược này dựa trên sự chéo chéo giữa DI và ADX để xác định xu hướng thị trường và điểm đảo ngược. Đồng thời, mối quan hệ giữa trung bình di chuyển nhanh và chậm được sử dụng để xác định xu hướng thị trường tổng thể.

Cụ thể, tín hiệu mua sẽ được kích hoạt khi các điều kiện sau được đáp ứng:

  1. EMA nhanh trên EMA chậm
  2. + đường DI băng qua đường ADX lên
  3. Giá trị ADX dưới ngưỡng 30

Một tín hiệu bán sẽ được kích hoạt khi các điều kiện sau được đáp ứng:

  1. Giá trị ADX vượt quá ngưỡng 30
  2. + đường DI băng qua đường ADX xuống

Chiến lược cũng kết hợp logic dừng lỗ để thoát khỏi tất cả các vị trí khi giá giảm xuống dưới mức dừng lỗ.

Ưu điểm

Chiến lược kết hợp các chỉ số DI, ADX và trung bình động để xác định hiệu quả các bước chuyển đổi trong xu hướng thị trường.

  1. Sử dụng DI và ADX chéo để xác định chính xác các điểm nhập cảnh và xuất cảnh
  2. Hệ thống lọc EMA nhanh và chậm để xác định xu hướng thị trường tổng thể, tránh giao dịch xấu
  3. Sử dụng giá trị ADX để xác định sức mạnh của xu hướng, chỉ giao dịch khi xu hướng yếu, tránh đột phá sai
  4. Kết hợp cơ chế dừng lỗ để kiểm soát rủi ro giảm
  5. Điều kiện nhập cảnh nghiêm ngặt tránh mua trên và bán đáy
  6. Các quy tắc thoát rõ ràng cho phép dừng lỗ kịp thời và lấy lợi nhuận

Rủi ro

Có một số rủi ro cần lưu ý với chiến lược này:

  1. Chỉ số ADX có tác dụng chậm trễ, có thể bỏ lỡ thời điểm tốt nhất cho sự đảo ngược giá
  2. Nhiều tín hiệu sai có thể xảy ra khi biến động thị trường cao
  3. Cài đặt EMA nhanh và chậm không chính xác có thể dẫn đến việc bỏ lỡ giao dịch hoặc lọc các tín hiệu hợp lệ
  4. Đặt mức dừng lỗ quá lớn không kiểm soát rủi ro hiệu quả

Những rủi ro này có thể được giải quyết bằng cách tối ưu hóa ADX và các thông số trung bình động, điều chỉnh mức dừng lỗ, thêm các bộ lọc để xác nhận vv.

Cơ hội gia tăng

Có chỗ cho những cải tiến khác:

  1. Kiểm tra ADX của các khoảng thời gian dài khác nhau để tìm kết hợp tối ưu
  2. Thêm các chỉ số khác như RSI, Bollinger Bands để xác nhận tín hiệu
  3. Sử dụng thuật toán học máy để tự động tối ưu hóa các thông số và quy tắc
  4. Điều chỉnh năng động mức dừng lỗ để giảm thiểu rủi ro giai đoạn cuối
  5. Xây dựng mô hình điểm số đa yếu tố để làm cho các tiêu chí nhập cảnh và xuất cảnh mạnh mẽ hơn

Kết luận

Nói chung, chiến lược xu hướng chéo ADX này khá ổn định, có khả năng nắm bắt hiệu quả các sự đảo ngược sớm, nhưng kiểm soát rủi ro là rất quan trọng. Tăng cường thêm các tham số, tuân thủ nghiêm ngặt các quy tắc nhập cảnh và dừng lỗ có thể dẫn đến lợi nhuận điều chỉnh rủi ro tốt. Chiến lược phù hợp với các tài khoản dài hạn nắm giữ các vị trí trung hạn đến ngắn 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     

Thêm nữa