Strategi Saluran Harga Adaptif

Penulis:ChaoZhang, Tanggal: 2023-12-04 16:33:45
Tag:

img

Gambaran umum

Strategi ini adalah strategi saluran harga adaptif berdasarkan indikator Average True Range (ATR) dan Average Directional Index (ADX).

Logika Strategi

  1. Menghitung tertinggi tinggi (HH) dan terendah rendah (LL) pada panjang tertentu.

  2. Hitung +DI dan -DI berdasarkan pergerakan harga naik dan turun.

  3. Jika ADX < 25, pasar dianggap samping. Jika dekat > saluran atas (HH - ATR multiplier * ATR), pergi panjang. Jika dekat < saluran bawah (LL + ATR multiplier * ATR), pergi pendek.

  4. Jika ADX >= 25 dan +DI > -DI, pasar bullish. Jika dekat > saluran atas, pergi panjang.

  5. Jika ADX >= 25 dan +DI < -DI, pasar menurun.

  6. Posisi keluar setelah garis exit_length sejak masuk.

Analisis Keuntungan

  1. Strategi menyesuaikan diri secara otomatis berdasarkan kondisi pasar, menggunakan strategi saluran di pasar sampingan dan tren mengikuti di pasar tren.

  2. Menggunakan ATR dan ADX memastikan adaptifitas. ATR menyesuaikan lebar saluran, ADX menentukan tren.

  3. Keluar paksa menambah stabilitas.

Analisis Risiko

  1. ADX dapat menghasilkan sinyal palsu sering.

  2. Parameter ATR dan ADX yang buruk menyebabkan kinerja yang buruk.

  3. Tidak mampu melindungi secara efektif terhadap peristiwa Black Swan.

Arahan Optimasi

  1. Mengoptimalkan parameter untuk ATR dan ADX untuk meningkatkan kemampuan beradaptasi.

  2. Tambahkan stop loss untuk membatasi kerugian.

  3. Tambahkan filter untuk menghindari sinyal palsu.

Kesimpulan

Strategi ini menggabungkan indikator dan mekanisme untuk beradaptasi dengan kondisi pasar. tetapi penilaian yang salah dapat terjadi karena keterbatasan indikator. optimasi masa depan pada parameter dan pengendalian risiko.


/*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)



Lebih banyak