Sumber dimuat naik... memuat...

Strategi Saluran Harga Bersesuaian

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

img

Ringkasan

Strategi ini adalah strategi saluran harga adaptif berdasarkan penunjuk Julat Benar Purata (ATR) dan Indeks Arah Purata (ADX). Ia bertujuan untuk mengenal pasti pasaran sampingan dan trend pergerakan harga dan membuat perdagangan dengan sewajarnya.

Logika Strategi

  1. Mengira tertinggi tinggi (HH) dan terendah rendah (LL) pada panjang yang diberikan.

  2. Hitung +DI dan -DI berdasarkan pergerakan harga ke atas dan ke bawah.

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

  4. Jika ADX >= 25 dan +DI > -DI, pasaran adalah bullish.

  5. Jika ADX >= 25 dan +DI < -DI, pasaran adalah bearish.

  6. Kedudukan keluar selepas bar exit_length sejak masuk.

Analisis Kelebihan

  1. Strategi menyesuaikan diri secara automatik berdasarkan keadaan pasaran, menggunakan strategi saluran di pasaran sampingan dan trend mengikuti di pasaran trend.

  2. Menggunakan ATR dan ADX memastikan kesesuaian. ATR menyesuaikan lebar saluran, ADX menentukan trend.

  3. Keluar paksa menambah kestabilan.

Analisis Risiko

  1. ADX boleh menghasilkan isyarat palsu dengan kerap.

  2. Parameter ATR dan ADX yang lemah membawa kepada prestasi yang buruk.

  3. Tidak dapat melindungi secara berkesan terhadap peristiwa Black Swan.

Arahan pengoptimuman

  1. Mengoptimumkan parameter untuk ATR dan ADX untuk meningkatkan daya adaptasi.

  2. Tambah stop loss untuk mengehadkan kerugian.

  3. Tambah penapis untuk mengelakkan isyarat palsu.

Kesimpulan

Strategi ini menggabungkan penunjuk dan mekanisme untuk menyesuaikan diri di seluruh keadaan pasaran. tetapi penilaian yang salah boleh berlaku kerana batasan penunjuk. pengoptimuman masa depan pada parameter dan kawalan 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 lanjut