
Strategi ini adalah strategi trend-following dan penembusan yang berdasarkan kepada indikator pita berulang yang dibangunkan oleh alexgrover. Strategi ini menggunakan indikator pita berulang untuk menentukan trend harga dan tahap rintangan sokongan utama, digabungkan dengan penyaringan penembusan palsu oleh syarat momentum, untuk mencapai kemasukan yang rendah tetapi berkualiti tinggi.
Penunjuk tali pengulangan terdiri daripada tali atas, tali bawah dan garis tengah. Cara pengiraan indikator adalah:
Talian atas = nilai maksimum ((talian atas garisan K terdahulu, harga penutupan + n*kadar turun naik)
Bahagian bawah = nilai minimum ((Bahagian bawah garis K sebelumnya, harga penutupan - n*kadar turun naik)
Garis tengah = (garis atas + garis bawah) / 2
n adalah faktor skala, kadar turun naik boleh dipilih ATR, standard deviation, saluran rata-rata dan kaedah RFV khas. Sensitiviti parameter panjang mengawal indikator, nilai yang lebih besar, semakin tidak mudah untuk mencetuskan indikator.
Strategi pertama adalah untuk mengesan sama ada arah bawah terus naik dan arah atas terus turun untuk menghapuskan pecah palsu.
Apabila harga jatuh ke bawah, buat lebih banyak; apabila harga melebihi atas, buat lebih sedikit.
Selain itu, strategi ini juga menetapkan logik stop loss.
Strategi ini mempunyai kelebihan berikut:
Strategi ini mempunyai beberapa risiko:
Risiko ini boleh dikawal dengan mengoptimumkan parameter, menetapkan stop loss, dan meningkatkan titik slippage.
Strategi ini juga boleh dioptimumkan dalam beberapa arah:
Strategi ini secara keseluruhan merupakan strategi trend-tracking yang sangat praktikal dan cekap. Ia menggabungkan kerangka berturun-turun untuk menjimatkan sumber pengiraan, menggunakan sokongan rintangan trend untuk menentukan arah trend besar, meningkatkan penyaringan penipuan penembusan keadaan momentum, untuk memastikan kualiti isyarat perdagangan.
/*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)