Strategi Perdagangan Momentum Rekursif

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

img

Gambaran umum

Strategi ini adalah strategi trend-following dan breakout berdasarkan indikator Recursive Bands yang dikembangkan oleh alexgrover.

Logika Strategi

Perhitungan Indikator Band Rekursif

Indikator Recursive Bands terdiri dari band atas, band bawah dan garis tengah.

Upper Band = Max ((bar sebelumnyas band atas, Close price + nVolatilitas) Band bawah = Min(Bar sebelumnyas band bawah, Harga penutupan - nVolatilitas) Garis tengah = (Garis atas + Garis bawah) / 2

Di sini n adalah koefisien skala, dan volatilitas dapat dipilih dari ATR, standar deviasi, rentang rata-rata benar atau metode RFV khusus.

Peraturan Perdagangan

Strategi ini terlebih dahulu memeriksa apakah band bawah dan band atas cenderung ke arah yang sama untuk menghindari pecah palsu.

Ketika harga menembus band bawah, pergi panjang. Ketika harga menembus band atas, pergi pendek.

Selain itu, logika stop loss diterapkan.

Analisis Keuntungan

Keuntungan dari strategi ini adalah:

  1. Perhitungan indikator yang efisien menggunakan kerangka rekursif, menghindari perhitungan berulang
  2. Penyesuaian parameter yang fleksibel untuk beradaptasi dengan sistem pasar yang berbeda
  3. Menggabungkan tren dan breakout, menghindari breakout palsu
  4. Filter kondisi momentum memastikan kualitas sinyal

Analisis Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Pengaturan parameter yang tidak benar dapat menyebabkan overtrading atau kualitas sinyal yang buruk
  2. Mungkin menghadapi kerugian besar ketika perubahan tren utama
  3. Pengendalian tergelincir yang tidak memadai dalam gerakan ekstrem dapat memperkuat kerugian

Risiko ini dapat dikelola dengan mengoptimalkan parameter, menerapkan stop loss, meningkatkan ambang slippage dll.

Arahan Optimasi

Beberapa arah untuk mengoptimalkan strategi lebih lanjut:

  1. Menggabungkan indikator di beberapa kerangka waktu untuk ketahanan
  2. Tambahkan modul pembelajaran mesin untuk optimasi parameter adaptif
  3. Melakukan analisis korelasi kuantitatif untuk menemukan kombinasi parameter yang optimal
  4. Menggunakan pembelajaran mendalam untuk memprediksi jalur harga dan meningkatkan akurasi sinyal

Kesimpulan

Singkatnya, ini adalah strategi yang sangat praktis dan efisien mengikuti tren. Ini menggabungkan kerangka kerja rekursif untuk efisiensi komputasi, menggunakan dukungan tren / resistensi untuk menentukan tren utama, menambahkan kondisi momentum untuk menyaring pecah palsu dan memastikan kualitas sinyal. Dengan penyesuaian parameter yang tepat dan kontrol risiko, dapat mencapai hasil yang baik. Layak penelitian lebih lanjut dan optimasi untuk beradaptasi dengan rezim pasar 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 banyak