Strategi ini menggabungkan Indeks Gerakan Arah (ADX), Plus Indikator Arah (DI +) dan rata-rata bergerak cepat dan lambat untuk menentukan arah pasar dan periode pemegang.
Logika inti dari strategi ini adalah untuk menghasilkan sinyal beli ketika garis +DI melintasi di atas garis ADX dari bawah ke atas, dan menghasilkan sinyal jual ketika garis +DI melintasi di bawah garis ADX dari atas ke bawah. Oleh karena itu, strategi ini bergantung pada persilangan antara DI dan ADX untuk menentukan tren pasar dan titik pembalikan. Pada saat yang sama, hubungan antara rata-rata bergerak cepat dan lambat digunakan untuk menentukan tren pasar secara keseluruhan.
Secara khusus, sinyal beli akan dipicu ketika kondisi berikut terpenuhi:
Sinyal jual akan dipicu ketika kondisi berikut terpenuhi:
Strategi ini juga menggabungkan logika stop loss untuk keluar dari semua posisi ketika harga turun di bawah level stop loss.
Strategi ini menggabungkan indikator DI, ADX dan moving average untuk secara efektif menentukan perubahan tren pasar.
Ada beberapa risiko yang harus diperhatikan dengan strategi ini:
Risiko ini dapat ditangani dengan mengoptimalkan ADX dan parameter rata-rata bergerak, menyesuaikan tingkat stop loss, menambahkan filter untuk konfirmasi dll.
Ada ruang untuk peningkatan lebih lanjut:
Secara umum strategi tren crossover ADX ini cukup stabil, mampu menangkap pembalikan secara efektif sejak awal, tetapi pengendalian risiko sangat penting. Optimalisasi parameter lebih lanjut, mengikuti aturan masuk dan stop loss secara ketat dapat mengarah pada pengembalian yang disesuaikan dengan risiko yang baik. Strategi ini cocok untuk akun jangka panjang yang memegang posisi jangka menengah hingga pendek.
/*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