Bollinger Break Out Strategi dengan Piramiding

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

img

Ringkasan

Strategi ini memasuki kedudukan panjang atau pendek berdasarkan pecah Bollinger Bands. Ia pergi lama apabila harga pecah di bawah band bawah dan pergi pendek apabila harga pecah di atas band atas. Selepas memasuki kedudukan, ia terus piramid dan mengemas kini stop loss dalam masa nyata.

Logika Strategi

Strategi ini menggunakan 3 garis Bollinger Bands - tengah, atas dan bawah. Garis tengah adalah purata bergerak n hari. Garis atas adalah garisan tengah + k * deviasi standard n hari. Garis bawah adalah garisan tengah - k * deviasi standard n hari. Biasanya n adalah 20 dan k adalah 2.

Apabila harga pecah di atas garis atas, ia menandakan trend menurun dan pergi pendek. Apabila harga pecah di bawah garis bawah, ia menandakan trend menaik dan pergi panjang.

Selepas mengambil kedudukan, strategi terus piramid, yang bermaksud menambah lebih banyak kedudukan ke arah yang sama.

Stop loss untuk semua kedudukan juga dikemas kini dalam masa nyata berdasarkan perbezaan antara harga pegangan purata semasa dan harga jalur.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Gunakan Bollinger Bands untuk mengenal pasti penembusan dan perubahan trend dengan tepat.
  2. Masukkan kedudukan pada salib emas dan salib mati secara sistematik.
  3. Dapatkan lebih banyak keuntungan melalui piramid.
  4. Pembaruan stop loss masa nyata untuk mengelakkan ketidakselesaan.

Analisis Risiko

Terdapat juga beberapa risiko strategi ini:

  1. Bollinger Bands sensitif terhadap turun naik pasaran dan mungkin mengalami whipsaws.
  2. Pyramiding meningkatkan pendedahan dan memanfaatkan potensi kerugian.
  3. Stop loss tidak dijamin dan masih mempunyai kebarangkalian untuk dihentikan.

Beberapa kaedah untuk menangani risiko:

  1. Mengoptimumkan parameter Bollinger Bands untuk kitaran yang berbeza.
  2. Sesuaikan skala piramida dan frekuensi.
  3. Tambah garis tengah sebagai barisan stop loss.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dari aspek berikut:

  1. Mengoptimumkan parameter Bollinger Bands untuk menyesuaikan lebih banyak rejim pasaran.
  2. Meningkatkan logik piramid untuk mengimbangi risiko-balasan.
  3. Tambah lebih banyak barisan stop loss seperti barisan tengah.
  4. Membangunkan mekanisme mengambil keuntungan untuk mengunci keuntungan secara proaktif.
  5. Gabungkan penunjuk lain untuk menapis entri.
  6. Meningkatkan pengurusan risiko untuk mengawal kerugian setiap perdagangan.

Kesimpulan

Kesimpulannya, ini adalah strategi trend berikut tipikal. Ia menunggang momentum apabila trend muncul dan membuat keuntungan dengan sewajarnya. Sementara itu, ia juga mengandungi risiko yang melekat. Pengoptimuman lanjut diperlukan untuk menyesuaikan lebih banyak keadaan pasaran dan menangani 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 lanjut