Strategi ini adalah strategi trend-following dan breakout berdasarkan indikator Recursive Bands yang dikembangkan oleh alexgrover.
Indikator Recursive Bands terdiri dari band atas, band bawah dan garis tengah.
Upper Band = Max ((bar sebelumnya
Di sini n adalah koefisien skala, dan volatilitas dapat dipilih dari ATR, standar deviasi, rentang rata-rata benar atau metode RFV khusus.
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.
Keuntungan dari strategi ini adalah:
Ada juga beberapa risiko dengan strategi ini:
Risiko ini dapat dikelola dengan mengoptimalkan parameter, menerapkan stop loss, meningkatkan ambang slippage dll.
Beberapa arah untuk mengoptimalkan strategi lebih lanjut:
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)