Strategi Pelacakan Tren Rata-rata Bergerak Berganda Bollinger Band

Penulis:ChaoZhang, Tanggal: 2023-12-11 15:10:02
Tag:

img

Gambaran umum

Strategi ini menentukan arah tren pasar secara umum dengan menghitung dua rata-rata bergerak eksponensial (EMA) selama kerangka waktu yang berbeda, dan mengidentifikasi peluang overbought dan oversold di sepanjang arah tren menggunakan Bollinger Bands adaptif untuk menerapkan perdagangan tren.

Logika Strategi

  1. EMA 200 periode dan EMA 30 periode dihitung. Jika EMA 200 lebih besar dari EMA 30, tren jangka panjang ditentukan sebagai naik. Jika tidak, ditentukan sebagai turun.

  2. Setelah arah tren ditentukan, garis dasar, band atas dan band bawah Bollinger Bands dihitung. garis dasar mengadopsi SMA selama kerangka waktu yang dapat dikonfigurasi (misalnya 8 periode). lebar band adalah pengganda yang dapat dikonfigurasi (misalnya 1.3 dan 1.1) dari amplitudo harga tertinggi dan terendah selama periode yang sama dengan garis dasar.

  3. Ketika tren jangka panjang naik, pecahnya pita bawah menandakan masuk panjang; ketika tren jangka panjang turun, pecahnya pita atas menandakan masuk pendek.

  4. Untuk menyaring pecah palsu, laju perubahan pada lilin terakhir sebelum pecah diperiksa untuk berada di bawah ambang yang dapat dikonfigurasi (misalnya 3%), dan lebar pita diperiksa untuk lebih besar dari tingkat yang dapat dikonfigurasi (misalnya 2,2% dari harga penutupan).

  5. Setelah membuka posisi, stop loss yang dapat dikonfigurasi (misalnya -3%) dan take profit (misalnya 10%) diatur untuk mengunci keuntungan.

Kekuatan Strategi

  1. EMA ganda mendefinisikan tren utama dan menghindari pembukaan posisi yang tidak teratur ketika tren utama tidak jelas.

  2. Adaptive Bollinger Bands menetapkan titik masuk di sepanjang tren.

  3. Tingkat perubahan dan persyaratan lebar minimum secara efektif menyaring kebocoran palsu.

  4. Pengaturan stop loss dan take profit secara wajar mengunci keuntungan sambil mengendalikan risiko.

Risiko Strategi

  1. EMA ganda gagal untuk secara akurat menemukan titik pembalikan tren, kehilangan kesempatan pada titik perubahan tren.

  2. Pengaturan parameter BB yang tidak benar dapat menyebabkan sinyal palsu.

  3. Stop loss dan take profit tetap tidak dapat beradaptasi dengan fluktuasi pasar.

Arahan Optimasi

  1. Masukkan indikator lain untuk menentukan pembalikan tren utama dan sekunder.

  2. Mengadopsi pengaturan dinamis dari parameter BB.

  3. Menetapkan perintah kondisional untuk stop loss dan mengambil keuntungan berdasarkan kriteria tertentu.

Kesimpulan

Strategi ini mengimplementasikan perdagangan tren dengan menilai tren utama menggunakan EMA ganda dan mengidentifikasi peluang dengan Bollinger Bands. Kekuatannya terletak pada pengaturan masuk yang wajar, menghentikan kerugian dan mengambil kondisi keuntungan untuk mengunci keuntungan tren. Ada juga beberapa risiko, seperti gagal menangkap titik balik tren dan pengaturan parameter BB yang tidak tepat. Optimasi lebih lanjut dalam aspek ini akan memberdayakan strategi untuk merebut keuntungan tren dengan lebih baik.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2039, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop

strategy("Custom Band Strategy", overlay=true)
source = close //종가 기준

//추세 조건 설정
emaLong = ema(source, input(200, minval=0))
emaShort = ema(source, input(30, minval=0))
trend = if emaShort>=emaLong
    1
else
    -1
    
plot(emaLong, color=red, transp=0)
plot(emaShort, color=blue, transp=0)


//BB 계산(default 14/3.2)
length = input(8, minval=1)

basis = sma(source, length)
plot(basis, color=green, transp=0)
max=highest(abs(source-basis), length)

factor1 = input(1.3, minval=0.5)
factor2 = input(1.1, minval=0.5)

upper = if trend==1
    basis + max*factor1
else
    basis + max*factor2
lower = if trend==-1
    basis - max*factor1
else
    basis - max*factor2

plot1 = plot(upper)
plot2 = plot(lower)
fill(plot1, plot2, transp=80, color=green)

//밴드 이탈 후 재진입 조건 설정
cross_over = (low<=lower and close>=lower) or crossover(close,lower)
cross_under = (high>=upper and close<=upper) or crossunder(close,upper)

//변동율 계산
maxCandle=highest(abs(open-close), length)
    
roc = abs(open-close)/open*100
changerate = input(3, minval=0.0)

//수익률 계산
value = abs(strategy.position_size)*strategy.position_avg_price
roe = strategy.openprofit/value * 100
expRoeL = (upper-lower)/lower*100
expRoeS = (upper-lower)/upper*100
exp = input(2.2, minval=0.0)

target = input(10, minval=0.0)
stop = input(-3, minval=-10.0)

strategy.close_all(when=roc>=changerate and testPeriod())
strategy.close_all(when=roe>=target and testPeriod())
strategy.close_all(when=roe<=stop and testPeriod())

plotchar(crossover(close,lower) and crossunder(close,upper),color=blue, transp=0, text="cross")
plotchar(roc>=changerate,color=red, transp=0, text="roc")
plotchar(roe>=target,color=blue, transp=0, text="target")
plotchar(roe<=stop,color=green, transp=0, text="stop")

minroe = input(2, minval=0.0)

strategy.close_all(when=cross_under and roe>minroe and testPeriod())
strategy.entry("BBandLE", strategy.long, stop=source, oca_name="BollingerBands",  comment="BBandLE", when=(cross_over) and trend==1 and roc<changerate and expRoeL>exp and source>emaLong and strategy.position_size==0 and testPeriod()) //trend==1 and 
//else
strategy.close_all(when=cross_over and roe>minroe and testPeriod())
strategy.entry("BBandSE", strategy.short, stop=source, oca_name="BollingerBands",  comment="BBandSE", when=(cross_under) and trend==-1 and roc<changerate and expRoeS>exp and source<emaLong and strategy.position_size==0 and testPeriod()) //trend==-1 and 

Lebih banyak