Chiến lược thời gian ADX chuyển động kép xác định xu hướng bằng cách kết hợp các đường trung bình chuyển động 2/20 và chỉ số ADXR để tạo ra tín hiệu giao dịch vào đầu xu hướng.
Lý thuyết cốt lõi của chiến lược ADX Dual Moving Average Timing dựa trên các thành phần chính sau:
2/20 Trung bình Di chuyển biểu thức (EMA)
Chỉ số ADXR
Các tín hiệu giao dịch
Sự đổi mới chính của chiến lược này là sử dụng chỉ số ADXR để xác định xu hướng ở giai đoạn ban đầu và kết hợp nó với các tín hiệu trung bình động truyền thống để cải thiện chất lượng và sự ổn định.
Những lợi thế chính của chiến lược ADX Dual Moving Average:
Ngoài ra còn có một số rủi ro chính cho chiến lược này:
Việc thiết lập tham số ADXR không chính xác có thể dẫn đến việc bỏ lỡ giao dịch.
Nhiều tín hiệu sai có thể xảy ra trong điều kiện thị trường đặc biệt.
Các thông số EMA cố định không thích nghi với những thay đổi của thị trường.
Không thể xác định phạm vi giao dịch, có thể tạo ra các giao dịch quá nhỏ.
Chiến lược có thể được tối ưu hóa và nâng cao hơn nữa từ các khía cạnh sau:
Tối ưu hóa tham số EMA để thích nghi tự động với điều kiện thị trường.
Mở rộng phạm vi tham số ADXR để nắm bắt các tín hiệu giao dịch hiệu quả hơn.
Thêm các chỉ số đánh giá xu hướng bổ sung cho các tín hiệu kết hợp để cải thiện chất lượng.
Thêm các chiến lược dừng lỗ và áp dụng các tiêu chuẩn lợi nhuận để kiểm soát rủi ro mỗi giao dịch.
Tối ưu hóa quản lý tiền cho kích thước vị trí năng động dựa trên tình trạng tài khoản.
Chiến lược thời gian ADX chuyển động kép kết hợp sáng tạo giữa các đường trung bình chuyển động kép truyền thống và chỉ số ADXR để cải thiện chất lượng tín hiệu và tăng tính ổn định. Nó có thể xác định hiệu quả giai đoạn đầu của xu hướng với hiệu suất lịch sử tốt. Chiến lược có nhiều chỗ để tối ưu hóa để làm cho nó mạnh mẽ và có lợi nhuận trên các thị trường phức tạp hơn.
/*backtest start: 2023-11-05 00:00:00 end: 2023-12-05 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 04/04/2022 // This is combo strategies for get a cumulative signal. // // First strategy // This indicator plots 2/20 exponential moving average. For the Mov // Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met. // // Second strategy // The Average Directional Movement Index Rating (ADXR) measures the strength // of the Average Directional Movement Index (ADX). It's calculated by taking // the average of the current ADX and the ADX from one time period before // (time periods can vary, but the most typical period used is 14 days). // Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening // and weakening trends. However, because it represents an average of ADX, values // don't fluctuate as dramatically and some analysts believe the indicator helps // better display trends in volatile markets. // // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// EMA20(Length) => pos = 0.0 xPrice = close xXA = ta.ema(xPrice, Length) nHH = math.max(high, high[1]) nLL = math.min(low, low[1]) nXS = nLL > xXA or nHH < xXA ? nLL : nHH iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0) pos := nXS > close[1] ? -1 : iff_1 pos fADX(Len) => up = ta.change(high) down = -ta.change(low) trur = ta.rma(ta.tr, Len) plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, Len) / trur) minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, Len) / trur) sum = plus + minus 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), Len) ADXR(LengthADX,LengthADXR,Signal1,Signal2) => pos = 0.0 xADX = fADX(LengthADX) xADXR = (xADX + xADX[LengthADXR]) / 2 pos := xADXR < Signal1 ? 1 : xADXR > Signal2 ? -1 : nz(pos[1], 0) pos strategy(title='Combo 2/20 EMA & ADXR', shorttitle='Combo', overlay=true) var I1 = '●═════ 2/20 EMA ═════●' Length = input.int(14, minval=1, group=I1) var I2 = '●═════ ADXR ═════●' LengthADX = input(title="Length ADX", defval=14) LengthADXR = input(title="Length ADXR", defval=14) Signal1 = input.float(13, step=0.01) Signal2 = input.float(45, step=0.01) var misc = '●═════ MISC ═════●' reverse = input.bool(false, title='Trade reverse', group=misc) var timePeriodHeader = '●═════ Time Start ═════●' d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader) m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader) y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader) StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false posEMA20 = EMA20(Length) prePosADXR = ADXR(LengthADX,LengthADXR,Signal1,Signal2) iff_1 = posEMA20 == -1 and prePosADXR == -1 and StartTrade ? -1 : 0 pos = posEMA20 == 1 and prePosADXR == 1 and StartTrade ? 1 : iff_1 iff_2 = reverse and pos == -1 ? 1 : pos possig = reverse and pos == 1 ? -1 : iff_2 if possig == 1 strategy.entry('Long', strategy.long) if possig == -1 strategy.entry('Short', strategy.short) if possig == 0 strategy.close_all() barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)