Strategi Dagangan Momentum Rekursif

Penulis:ChaoZhang, Tarikh: 2024-01-31 16:56:31
Tag:

img

Ringkasan

Strategi ini adalah trend-mengikuti dan strategi breakout berdasarkan kepada Indikator Recursive Bands yang dibangunkan oleh alexgrover. Ia menggunakan Indikator Recursive Bands untuk menentukan trend harga dan tahap sokongan / rintangan utama, digabungkan dengan keadaan momentum untuk menapis pecah palsu, mencapai isyarat kemasukan frekuensi rendah tetapi berkualiti tinggi.

Logika Strategi

Pengiraan Penunjuk Band Rekursif

Penunjuk Band Rekursif terdiri daripada band atas, band bawah dan garis tengah.

Band Atas = Max(Bar Sebelumnyas band Atas, Harga Tutup + nVolatiliti) Bahagian bawah = Min(Bahagian bawah bar sebelumnya, Harga penutupan - nVolatiliti) Garis Tengah = (Garis Atas + Garis Bawah) / 2

Di sini n adalah pekali skala, dan turun naik boleh dipilih dari ATR, penyimpangan standard, julat sebenar purata atau kaedah RFV khas. Parameter panjang mengawal kepekaan, nilai yang lebih besar membuat penunjuk mencetuskan kurang kerap.

Peraturan Perdagangan

Strategi ini terlebih dahulu memeriksa sama ada jalur bawah dan jalur atas adalah trend ke arah yang sama untuk mengelakkan pecah palsu.

Apabila harga pecah di bawah band bawah, pergi panjang. Apabila harga pecah di atas band atas, pergi pendek.

Di samping itu, logik stop loss dilaksanakan.

Analisis Kelebihan

Kelebihan strategi ini ialah:

  1. Pengiraan penunjuk yang cekap menggunakan rangka kerja rekursif, mengelakkan pengiraan berulang
  2. Penyesuaian parameter yang fleksibel untuk menyesuaikan diri dengan rejimen pasaran yang berbeza
  3. Menggabungkan trend dan pecah, mengelakkan pecah palsu
  4. Penapis keadaan momentum memastikan kualiti isyarat

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi ini:

  1. Tetapan parameter yang tidak betul boleh menyebabkan overtrading atau kualiti isyarat yang buruk
  2. Mungkin menghadapi kerugian besar apabila perubahan trend utama
  3. Kawalan slippage yang tidak mencukupi dalam pergerakan yang melampau boleh memperkuat kerugian

Risiko ini boleh diuruskan dengan pengoptimuman parameter, pelaksanaan stop loss, meningkatkan ambang slippage dll.

Arahan pengoptimuman

Beberapa arah untuk mengoptimumkan lagi strategi:

  1. Menggabungkan penunjuk merentasi pelbagai jangka masa untuk ketahanan
  2. Tambah modul pembelajaran mesin untuk pengoptimuman parameter adaptif
  3. Melakukan analisis korelasi kuantitatif untuk mencari kombinasi parameter yang optimum
  4. Gunakan pembelajaran mendalam untuk meramalkan laluan harga dan meningkatkan ketepatan isyarat

Kesimpulan

Ringkasnya, ini adalah strategi trend yang sangat praktikal dan cekap. Ia menggabungkan rangka kerja rekursif untuk kecekapan pengiraan, menggunakan sokongan trend / rintangan untuk menentukan trend utama, menambah keadaan momentum untuk menapis pecah palsu dan memastikan kualiti isyarat. Dengan penyesuaian parameter yang betul dan kawalan risiko, ia dapat mencapai hasil yang baik. Layak penyelidikan dan pengoptimuman lanjut untuk menyesuaikan diri dengan rejimen pasaran yang lebih kompleks.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)

Lebih lanjut