Strategi Pembuat Pasaran Had Bollinger Band


Tarikh penciptaan: 2024-01-24 11:05:56 Akhirnya diubah suai: 2024-01-24 11:05:56
Salin: 0 Bilangan klik: 949
1
fokus pada
1617
Pengikut

Strategi Pembuat Pasaran Had Bollinger Band

Gambaran keseluruhan

Strategi ini adalah strategi pemasar yang menggunakan pita Brin sebagai entri, purata bergerak sebagai tutup, dan peratusan hentian mudah sebagai hentian. Ia mendapat keuntungan yang sangat tinggi pada kontrak xtbtusd pada bulan Jun 2022.

Prinsip Strategi

Strategi ini menggunakan jalur atas dan bawah di Brin Belt sebagai kawasan peluang untuk membina gudang. Secara khusus, apabila harga lebih rendah daripada jalur bawah, banyak gudang akan dibuka; apabila harga lebih tinggi daripada jalur atas, satu gudang kosong akan dibuka.

Di samping itu, strategi ini juga menggunakan purata bergerak sebagai asas untuk kedudukan kosong. Apabila memegang lebih banyak pesanan, ia akan memilih kedudukan kosong jika harganya lebih tinggi daripada purata bergerak; Begitu juga, apabila memegang tiket kosong, ia akan memilih kedudukan kosong jika harganya lebih rendah daripada purata bergerak.

Untuk menghentikan kerugian, strategi ini menggunakan cara berhenti bergulir yang mudah ini dengan harga masuk kalikan dengan peratusan tertentu. Ini dapat dengan berkesan mengelakkan kerugian besar dalam keadaan unilateral.

Analisis kelebihan

Beberapa kelebihan utama strategi ini ialah:

  1. Penggunaan Brinband dapat menangkap turun naik harga dengan berkesan, memberikan lebih banyak peluang untuk berdagang apabila turun naik meningkat.
  2. Strategi berniaga boleh mendapatkan pendapatan dari bayaran bayaran kedua-dua belah pihak.
  3. Penggunaan peratusan stop loss dapat mengawal risiko secara aktif dan berkesan mengelakkan kerugian yang sangat besar dalam keadaan unilateral.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Ia juga menunjukkan bahawa Brin tidak selalu menjadi penunjuk masuk yang boleh dipercayai dan kadang-kadang memberi isyarat yang salah.
  2. Strategi berniaga mudah terjebak dalam keadaan yang tidak menentu.
  3. Peratusan Hentikan Kerosakan mungkin terlalu berat dan tidak fleksibel untuk menangani situasi yang rumit.

Untuk mengurangkan risiko ini, kita boleh mempertimbangkan penapisan dalam kombinasi dengan petunjuk lain, mengoptimumkan tetapan strategi hentikan kerugian, atau membatasi saiz kedudukan dengan sewajarnya.

Arah pengoptimuman

Strategi ini masih boleh dioptimumkan lagi:

  1. Anda boleh menguji kombinasi parameter yang berbeza untuk mencari parameter terbaik.
  2. Anda boleh menambah lebih banyak penapis untuk pengesahan pelbagai faktor.
  3. Parameter boleh dioptimumkan secara automatik menggunakan kaedah pembelajaran mesin.
  4. Anda boleh mempertimbangkan untuk menggunakan cara yang lebih halus untuk menghentikan kerugian, seperti menghentikan parasol.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi pelabur frekuensi tinggi yang sangat menguntungkan. Ia menggunakan Brin untuk memberikan peluang perdagangan dan mengawal risiko. Tetapi kita juga perlu menyedari masalah dan kekurangan yang ada, dan dengan berhati-hati mengesahkannya di lapangan. Dengan pengoptimuman lanjut, strategi ini dijangka menghasilkan pulangan ultra tinggi yang lebih stabil.

Kod 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()