Strategi Pembuat Pasar Batas Bollinger Band


Tanggal Pembuatan: 2024-01-24 11:05:56 Akhirnya memodifikasi: 2024-01-24 11:05:56
menyalin: 0 Jumlah klik: 949
1
fokus pada
1617
Pengikut

Strategi Pembuat Pasar Batas Bollinger Band

Ringkasan

Strategi ini adalah strategi pemasar yang menggunakan Brin band sebagai entries, moving average sebagai close, dan persentase stop loss sederhana sebagai stop loss. Strategi ini memperoleh keuntungan yang sangat tinggi pada kontrak xtbtusd pada Juni 2022.

Prinsip Strategi

Strategi ini menggunakan jalur atas dan bawah Brin Belt sebagai area peluang untuk membangun gudang. Secara khusus, ketika harga lebih rendah dari jalur bawah, banyak gudang akan dibuka; ketika harga lebih tinggi dari jalur atas, satu gudang kosong akan dibuka.

Selain itu, strategi ini juga menggunakan moving averages sebagai acuan untuk posisi terendah. Ketika memiliki banyak order, jika harga lebih tinggi dari moving average, maka akan memilih posisi terendah. Demikian pula, ketika memegang tiket kosong, jika harga lebih rendah dari moving average, maka akan memilih posisi terendah.

Untuk stop loss, strategi ini menggunakan stop loss bergulir sederhana ini dengan harga masuk dikalikan dengan persentase tertentu. Ini dapat secara efektif menghindari kerugian besar dalam situasi unilateral.

Analisis Keunggulan

Beberapa keuntungan utama dari strategi ini adalah:

  1. Dengan menggunakan Bollinger Bands, volatilitas harga dapat ditangkap secara efektif, dan lebih banyak kesempatan untuk berdagang ketika volatilitas meningkat.
  2. Strategi market maker dapat menghasilkan pendapatan dari komisi yang dibayarkan oleh pembeli dan penjual melalui transaksi dua arah.
  3. Penggunaan persentase stop loss dapat secara proaktif mengendalikan risiko dan secara efektif menghindari kerugian besar dalam situasi unilateral.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Garis Brin tidak selalu menjadi indikator masuk yang dapat diandalkan, kadang-kadang memberi sinyal yang salah.
  2. Strategi bisnis pasar mudah terjebak dalam situasi yang bergejolak.
  3. Persentase stop loss mungkin terlalu arbitrer dan tidak fleksibel dalam menghadapi situasi yang kompleks.

Untuk mengurangi risiko ini, kita dapat mempertimbangkan untuk melakukan penyaringan dalam kombinasi dengan indikator lain, mengoptimalkan pengaturan strategi stop loss, atau membatasi ukuran posisi dengan tepat.

Arah optimasi

Strategi ini masih bisa dioptimalkan lebih jauh:

  1. Anda dapat menguji kombinasi parameter yang berbeda untuk menemukan parameter yang optimal.
  2. Anda dapat menambahkan lebih banyak indikator penyaringan untuk multi-faktor.
  3. Parameter dapat dioptimalkan secara otomatis menggunakan metode pembelajaran mesin.
  4. Anda dapat mempertimbangkan untuk menggunakan metode stop yang lebih halus, seperti stop parabola.

Meringkaskan

Strategi ini secara keseluruhan merupakan strategi trader frekuensi tinggi yang sangat menguntungkan. Strategi ini menggunakan Brin Belt untuk memberikan peluang perdagangan sambil mengendalikan risiko. Tetapi kita juga perlu menyadari masalah dan kekurangan yang ada di dalamnya, dan dengan hati-hati memverifikasinya di pasar nyata. Dengan pengoptimalan lebih lanjut, strategi ini diharapkan menghasilkan keuntungan super tinggi yang lebih stabil.

Kode Sumber Strategi
/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(shorttitle="BBL", title="BB limit", overlay = true)


length = input(200, minval=1)
src = input(hlc3, title="Source")
xmult = input(44, minval=0.001, maxval=5000, title = "bb mult (0.1%)")
s = input(title="Trend source", defval = "sma", options = ["ema", "sma", "rma", "wma"])
basis = s == "ema" ? ema(src, length) : s == "sma" ? sma(src, length) : s =="rma" ? rma(src, length) : wma(src, length)
sd = input(title="Dev source", defval = "stdev", options = ["stdev", "dev"])
mult = xmult / 10  
dev = sd == "stdev" ? mult * stdev(src, length) : mult * dev(src, length)
diff = input(0.5, title = "Spread")
LongPrice(p) =>
    LongPrice = diff == 0 ? p : floor(p / diff) * diff

ShortPrice(p) =>
    ShortPrice = diff == 0 ? p : ceil(p / diff) * diff

pyr = input(1, title = "Pyramiding")
useStopLoss = input(true)
stoploss_xmult = input(15, minval=0.001, maxval=5000, title = "StopLoss 0.1%")
stopLoss_mult = sd == "simple" ? 1 + stoploss_xmult / 10 / 100 : stoploss_xmult / 10  
dev2 = sd == "stdev" ? stopLoss_mult * stdev(src, length) : sd == "dev" ? stopLoss_mult * dev(src, length) : (stopLoss_mult - 1) * basis
upper = basis + (1*dev)
lower = basis - (1*dev)
plot(basis, color=fuchsia, linewidth=2)
plot(upper, color=green, linewidth=2)
plot(lower, color=green, linewidth=2)


strategy.cancel_all()

if strategy.position_size > 0 and close <= basis + diff * 2
    strategy.order("Close long", strategy.short, strategy.position_size, limit = ShortPrice(basis))
else 
    if strategy.position_size < 0 and close >= basis - diff * 2
        strategy.order("Close short", strategy.long, -strategy.position_size, limit = LongPrice(basis))
            
stopLossPrice1 = na
stopLossPrice2 = na
add = na
openOrderCondition = close > lower - 2 * diff and (strategy.opentrades < pyr or (strategy.position_size < 0 and strategy.position_avg_price > lower * (1 + stopLoss_mult / 100)))
if openOrderCondition
    add := strategy.position_size > 0 ? -strategy.position_size : close >= basis - diff * 2 ? 0 : -strategy.position_size
    strategy.order("Open long", strategy.long, strategy.equity / pyr / lower + add, limit = LongPrice(lower))
if useStopLoss and (strategy.position_size > 0 or openOrderCondition)
    add = openOrderCondition ? strategy.equity / pyr / lower : 0
    posPrice = strategy.position_size <= 0 ? lower : strategy.position_avg_price
    posSize = strategy.position_size <= 0 ? 0 : strategy.position_size
    stopLossPrice1 := posPrice * (1 - stopLoss_mult / 100)
    strategy.order("StopLoss open short ", strategy.short, posSize + add + strategy.equity / pyr / stopLossPrice1, stop = ShortPrice(stopLossPrice1))


openOrderCondition := close < upper + 2 * diff and (strategy.opentrades < pyr or (strategy.position_size > 0 and strategy.position_avg_price * (1 + stopLoss_mult / 100) < upper))
if openOrderCondition
    add := strategy.position_size < 0 ? strategy.position_size : close <= basis + diff * 2 ? 0 : strategy.position_size
    strategy.order("Open short", strategy.short, strategy.equity / pyr / upper + add, limit = ShortPrice(upper))
if useStopLoss and (strategy.position_size < 0 or openOrderCondition)
    add = openOrderCondition ? strategy.equity / pyr / upper : 0
    posPrice = strategy.position_size >= 0 ? upper : strategy.position_avg_price
    posSize = strategy.position_size >= 0 ? 0 : -strategy.position_size
    stopLossPrice2 := posPrice * (1 + stopLoss_mult / 100)
    strategy.order("StopLoss open long", strategy.long, posSize + add + strategy.equity / pyr / stopLossPrice2, stop = LongPrice(stopLossPrice2))

plot(not useStopLoss ? na : stopLossPrice1, color=red, linewidth=2)
plot(not useStopLoss ? na : stopLossPrice2, color=red, linewidth=2)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()