Bollinger Break Out Strategi dengan Pyramiding

Penulis:ChaoZhang, Tanggal: 2023-11-23 14:01:57
Tag:

img

Gambaran umum

Strategi ini masuk posisi panjang atau pendek berdasarkan breakout Bollinger Bands. Ini pergi panjang ketika harga pecah di bawah band bawah dan pergi pendek ketika harga pecah di atas band atas. Setelah memasuki posisi, terus piramida dan memperbarui stop loss secara real-time.

Logika Strategi

Strategi ini menggunakan 3 garis Bollinger Band - tengah, atas dan bawah. Garis tengah adalah rata-rata bergerak n hari. Garis atas adalah garis tengah + k * deviasi standar n hari. Garis bawah adalah garis tengah - k * deviasi standar n hari. Biasanya n adalah 20 dan k adalah 2.

Ketika harga pecah di atas garis atas, itu menandakan tren penurunan dan pergi pendek. Ketika harga pecah di bawah garis bawah, itu menandakan tren kenaikan dan pergi panjang.

Setelah mengambil posisi, strategi terus piramida, yang berarti menambahkan lebih banyak posisi ke arah yang sama.

Stop loss untuk semua posisi juga diperbarui secara real-time berdasarkan perbedaan antara harga rata-rata kepemilikan saat ini dan harga band.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Gunakan Bollinger Bands untuk mengidentifikasi penembusan dan perubahan tren dengan akurat.
  2. Masukkan posisi pada salib emas dan salib mati secara sistematis.
  3. Dapatkan lebih banyak keuntungan melalui piramida.
  4. Pembaruan stop loss secara real time untuk menghindari KO.

Analisis Risiko

Ada juga beberapa risiko dari strategi ini:

  1. Bollinger Bands sensitif terhadap volatilitas pasar dan dapat menimbulkan whipsaws.
  2. Pyramiding meningkatkan eksposur dan memanfaatkan potensi kerugian.
  3. Stop loss tidak dijamin dan masih memiliki probabilitas untuk dihentikan.

Beberapa metode untuk mengatasi risiko:

  1. Mengoptimalkan parameter Bollinger Bands untuk siklus yang berbeda.
  2. Sesuaikan skala piramida dan frekuensi.
  3. Tambahkan garis tengah sebagai garis stop loss lebih lanjut.

Arahan Optimasi

Strategi dapat dioptimalkan dari aspek berikut:

  1. Mengoptimalkan parameter Bollinger Bands untuk menyesuaikan lebih banyak rezim pasar.
  2. Meningkatkan logika piramida untuk menyeimbangkan risiko-pahala.
  3. Tambahkan lebih banyak garis stop loss seperti garis tengah.
  4. Mengembangkan mekanisme pengambilan keuntungan untuk mengunci keuntungan secara proaktif.
  5. Gabungkan indikator lain untuk menyaring entri.
  6. Meningkatkan manajemen risiko untuk mengendalikan kerugian per perdagangan.

Kesimpulan

Sebagai kesimpulan, ini adalah strategi tren berikut yang khas. Ini naik momentum ketika tren muncul dan menghasilkan keuntungan sesuai. Sementara itu, ini juga mengandung risiko yang melekat. Optimasi lebih lanjut diperlukan untuk menyesuaikan lebih banyak kondisi pasar dan mengatasi risiko whipsaw.


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

//@version=5

strategy(title='Bollinger Band strategy with split, limit, stop', shorttitle='bb strategy', overlay=true,commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, pyramiding = 4)



//Summary: Going Long or Short when Entering after Breaking the Bollinger Bands\
//At this time, the stop-loss, profit-taking price, and pyramiding standard\
// are determined from the difference between the position average price and the band price.

//After entering the position, if the price crosses the mid-band line, the stop loss is adjusted to the mid-band line.



//each trade, entry position size = 10% of total cash
//max pyramiding is 4
//commission = 0.01%





in_period = true


bb_length = input.int(20)
bb_mult = input.int(2)

[middle, upper, lower] = ta.bb(close,bb_length, bb_mult)
plot(middle, color=color.aqua)
plot(upper, color=color.orange)
plot(lower, color=color.orange)
long_cond = ta.crossover(close,lower)
short_cond = ta.crossunder(close,upper)

var saved_ph = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size > 0
    saved_ph := upper[1]
var saved_pl = 0.0
if strategy.opentrades>0 and strategy.opentrades[1]==0 and strategy.position_size < 0
    saved_pl := lower[1]

avg = strategy.position_avg_price

long_diff = saved_ph-avg
short_diff = saved_pl-avg

long_stoploss = avg - 1*long_diff
short_stoploss = avg - 1*short_diff

long_avgdown = avg - 0.5*long_diff
short_avgup = avg - 0.5*short_diff

long_profit_price = avg + 0.5*long_diff
short_profit_price = avg + 0.5*short_diff

var label _label = na
if in_period
    if long_cond and strategy.opentrades==0
        strategy.entry("Long",strategy.long)
    if long_cond and strategy.opentrades >0 and (close[1]<long_avgdown or close[2]<long_avgdown)
        strategy.entry("Long",strategy.long)

    if short_cond and strategy.opentrades==0
        strategy.entry("Short", strategy.short)
    if short_cond and strategy.opentrades>0 and (close[1]>short_avgup or close[2]>short_avgup)
        strategy.entry("Short",strategy.short)

plot(avg, style=plot.style_linebr)


plot(strategy.position_size > 0? long_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0? long_avgdown: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size > 0? long_stoploss: na,color=color.red, style=plot.style_linebr)

plot(strategy.position_size < 0? short_profit_price: na,color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0? short_avgup: na,color=color.yellow, style=plot.style_linebr)
plot(strategy.position_size < 0? short_stoploss: na,color=color.red, style=plot.style_linebr)

if strategy.position_size > 0
    if ta.crossover(close, middle)
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=middle)
    else
        strategy.exit("Long Exit", "Long", limit=long_profit_price, stop=long_stoploss)
if strategy.position_size < 0
    if ta.crossunder(close, middle)
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=middle)
    else
        strategy.exit("Short Exit", "Short", limit=short_profit_price, stop=short_stoploss)

Lebih banyak