Strategi Saluran Harga Adaptif


Tarikh penciptaan: 2023-12-04 16:33:45 Akhirnya diubah suai: 2023-12-04 16:33:45
Salin: 0 Bilangan klik: 634
1
fokus pada
1619
Pengikut

Strategi Saluran Harga Adaptif

Gambaran keseluruhan

Strategi ini adalah strategi saluran harga yang menyesuaikan diri berdasarkan purata julat sebenar (ATR) dan purata arah indeks (ADX). Ia bertujuan untuk mengenal pasti pasaran dan trend dalam pergerakan harga, dan berdagang dengan sewajarnya.

Prinsip Strategi

  1. Hitung harga tertinggi ((HH) dan harga terendah ((LL))) pada garis akar panjang K terkini.

  2. Mengikut kenaikan dan penurunan harga, hitung +DI dan -DI, kemudian hitung ADX.

  3. Jika ADX<25, ia dianggap sebagai pasaran yang terpusat. Apabila harga penutupan berada di atas had atas saluran harga, maka HH - ATR kali*ATR), lakukan lebih banyak; jika harga penutupan berada di bawah had bawah saluran harga ((LL + ATR kali)*ATR), kosong.

  4. Jika ADX> = 25 dan + DI> - DI, ia dianggap sebagai pasaran lembu. Pada masa ini, jika harga penutupan lebih tinggi daripada had atas saluran harga, lakukan lebih banyak.

  5. Jika ADX> = 25 dan + DI<-DI, ia dianggap sebagai pasaran kosong. Pada masa ini, jika harga penutupan berada di bawah had bawah saluran harga, kosong.

  6. Selepas memasuki kedudukan, jika melebihi exit_length akar K garis tidak terhenti, maka penutupan terhad terhenti.

Analisis kelebihan

  1. Strategi ini dapat menyesuaikan diri dengan keadaan pasaran secara automatik. Menggunakan strategi saluran harga dalam menyusun pasaran, dan berdagang mengikut arah trend dalam pasaran yang sedang tren.

  2. Penggunaan indikator ATR dan ADX memastikan penyesuaian strategi. ATR digunakan untuk menyesuaikan lebar saluran harga, dan ADX digunakan untuk menilai trend pasaran.

  3. Mekanisme Henti Kerosakan Mandatori membantu kestabilan strategi.

Analisis risiko

  1. Keputusan ADX mempunyai kebarangkalian besar untuk menghasilkan isyarat yang salah.

  2. Tetapan ATR dan ADX yang tidak betul boleh menyebabkan kesan strategi yang kurang baik.

  3. Tidak dapat mengelakkan perubahan yang berkesan.

Arah pengoptimuman

  1. Mengoptimumkan parameter ATR dan ADX untuk penyesuaian yang lebih baik.

  2. Tambah garis hentian untuk mengurangkan risiko kerugian.

  3. Tambah syarat penapis untuk menapis isyarat silap.

ringkaskan

Strategi saluran harga penyesuaian sendiri menggunakan pelbagai petunjuk dan mekanisme secara komprehensif, mengambil strategi yang berbeza dalam keadaan yang berbeza, mempunyai beberapa penyesuaian dan kestabilan. Tetapi kerana keterbatasan penetapan petunjuk dan pilihan parameter, strategi ini juga menghadapi risiko kesalahan tertentu. Arah pengoptimuman masa depan adalah dalam pengoptimuman parameter, kawalan risiko dan sebagainya.

Kod sumber strategi
/*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)