
Strategi ini adalah strategi saluran harga yang disesuaikan berdasarkan rentang rata-rata nyata (ATR) dan indeks arah rata-rata (ADX). Ini bertujuan untuk mengidentifikasi pasar dan tren dalam pergerakan harga, dan melakukan perdagangan sesuai.
Hitung harga tertinggi ((HH) dan harga terendah ((LL) dari garis akar panjang K terbaru.
Dihitung +DI dan -DI berdasarkan kenaikan dan penurunan harga, kemudian dihitung ADX.
Jika ADX<25, maka penilaian adalah market consolidation. Pada saat ini jika harga close out lebih tinggi dari harga channel upper ((HH - ATR kali*ATR), lakukan lebih banyak; jika harga penutupan berada di bawah batas bawah saluran harga (LL + ATR)*ATR), kosong.
Jika ADX> = 25 dan + DI> - DI, maka pasar akan dianggap bull market. Pada saat ini, jika harga close out lebih tinggi dari batas atas saluran harga, maka lebih banyak.
Jika ADX>=25 dan +DI<-DI, maka dinilai sebagai pasar kosong. Pada saat ini jika harga penutupan berada di bawah batas bawah saluran harga, buatlah kosong.
Setelah memasuki posisi, jika lebih dari exit_length akar K garis tidak terhenti, maka stop loss posisi kosong dipaksakan.
Strategi ini dapat secara otomatis beradaptasi dengan kondisi pasar. Strategi saluran harga digunakan untuk menyusun pasar, dan perdagangan mengikuti arah tren di pasar yang sedang tren.
Penggunaan indikator ATR dan ADX memastikan adab strategi. ATR digunakan untuk menyesuaikan lebar saluran harga, ADX digunakan untuk menilai tren pasar.
Mekanisme penangguhan kerugian yang dipaksakan dapat membantu stabilitas strategi.
Pertimbangan ADX memiliki probabilitas yang lebih tinggi untuk menghasilkan sinyal yang salah.
Atur ATR dan ADX yang tidak tepat dapat menyebabkan kegagalan strategi.
Risiko tidak dapat menghindari perubahan tren secara efektif.
Mengoptimalkan parameter ATR dan ADX untuk meningkatkan adaptasi.
Meningkatkan Stop Loss Line untuk mengurangi risiko kerugian
Tambahkan filter kondisi untuk memfilter sinyal kesalahan.
Adaptasi strategi saluran harga menggunakan berbagai indikator dan mekanisme secara komprehensif, mengambil berbagai strategi dalam lingkungan yang berbeda, memiliki beberapa fleksibilitas dan stabilitas. Namun, karena keterbatasan pengaturan indikator dan pilihan parameter, strategi ini juga menghadapi risiko kesalahan penilaian tertentu.
/*backtest
start: 2023-11-03 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Adaptive Price Channel Strategy", overlay=true)
length = input(20, title="Length")
exit_length = input(10, title="Exit After X Periods")
atr_multiplier = input(3.2, title="ATR Multiplier")
startDate = input(defval = timestamp("2019-01-15T08:15:15+00:00"), title = "Start Date")
endDate = input(defval = timestamp("2033-04-01T08:15:00+00:00"), title = "End Date")
hh = ta.highest(high, length)
ll = ta.lowest(low, length)
atr = ta.atr(length)
// calculate +DI and -DI
upMove = high - high[1]
downMove = low[1] - low
plusDM = na(upMove[1]) ? na : (upMove > downMove and upMove > 0 ? upMove : 0)
minusDM = na(downMove[1]) ? na : (downMove > upMove and downMove > 0 ? downMove : 0)
plusDI = ta.rma(plusDM, length) / atr * 100
minusDI = ta.rma(minusDM, length) / atr * 100
// calculate ADX
dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, length)
var int barSinceEntry = na
if (not na(close[length]) )
if (adx < 25) // Sideways market
if (close > hh - atr_multiplier * atr)
strategy.entry("PChLE", strategy.long, comment="PChLE")
barSinceEntry := 0
else if (close < ll + atr_multiplier * atr)
strategy.entry("PChSE", strategy.short, comment="PChSE")
barSinceEntry := 0
else if (adx >= 25 and plusDI > minusDI) // Bullish market
if (close > hh - atr_multiplier * atr)
strategy.entry("PChLE", strategy.long, comment="PChLE")
barSinceEntry := 0
else if (adx >= 25 and plusDI < minusDI) // Bearish market
if (close < ll + atr_multiplier * atr)
strategy.entry("PChSE", strategy.short, comment="PChSE")
barSinceEntry := 0
if (na(barSinceEntry))
barSinceEntry := barSinceEntry[1] + 1
else if (barSinceEntry >= exit_length)
strategy.close("PChLE")
strategy.close("PChSE")
barSinceEntry := na
plot(hh, title="Highest High", color=color.green, linewidth=2)
plot(ll, title="Lowest Low", color=color.red, linewidth=2)