Bollinger Band Limit Market Maker Strategie


Erstellungsdatum: 2024-01-24 11:05:56 zuletzt geändert: 2024-01-24 11:05:56
Kopie: 0 Klicks: 949
1
konzentrieren Sie sich auf
1617
Anhänger

Bollinger Band Limit Market Maker Strategie

Überblick

Die Strategie ist eine Maklerstrategie, die Brin-Bands als Eingänge, Moving Averages als Close und einfache Stop-Loss-Prozentsätze als Stop-Loss verwendet. Sie erzielte im Juni 2022 einen sehr hohen Gewinn auf xtbtusd-Kontrakten.

Strategieprinzip

Die Strategie nutzt die oberen und unteren Schienen des Brin-Bandes als Gelegenheitszonen für den Lageraufbau. Konkret werden mehrere Einzellager geöffnet, wenn der Preis unterhalb der unteren Schiene liegt, und ein leerer Einzellager, wenn der Preis über der oberen Schiene liegt.

Darüber hinaus verwendet die Strategie auch den Moving Average als Basis für die Ausgleichslage. Wenn Sie mehrere Bestellungen halten, wählen Sie einen Ausgleich, wenn der Preis über dem Moving Average liegt.

Bei Stop-Losses verwendet die Strategie einen einfachen Roll-Stop-Methode, bei dem der Einstiegspreis mit einem bestimmten Prozentsatz multipliziert wird. Dies verhindert erhebliche Verluste unter einseitigen Umständen.

Analyse der Stärken

Die wichtigsten Vorteile dieser Strategie sind:

  1. Der Einsatz von Brin-Bands ermöglicht es, die Preisschwankungen zu erfassen und mehr Handelsmöglichkeiten zu ergattern, wenn sich die Schwankungen verstärken.
  2. Die Strategie des Marktunternehmens ermöglicht die Einnahme von Provisionen für die Käufer und Verkäufer durch ein Zwei-Wege-Geschäft.
  3. Der Einsatz von Stop-Loss-Prozentsätzen ermöglicht eine aktive Risikokontrolle und verhindert so unilaterale Verluste.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der Brin-Band ist nicht immer ein zuverlässiger Eintrittsindikator, manchmal gibt es falsche Signale.
  2. Es ist leicht, sich in einer turbulenten Situation in eine Gefängnis zu stecken.
  3. Der Prozentsatz der Schadensersatz kann zu arbiträr sein und nicht flexibel für komplexe Situationen sein.

Um diese Risiken zu verringern, können wir Filter in Kombination mit anderen Indikatoren in Betracht ziehen, die Einstellung der Stop-Loss-Strategie optimieren oder die Positionsgröße angemessen begrenzen.

Optimierungsrichtung

Die Strategie kann noch weiter optimiert werden:

  1. Es ist möglich, verschiedene Parameterkombinationen zu testen, um die optimale Parameter zu finden.
  2. Es können weitere Filterindikatoren für die Multifaktor-Verifizierung hinzugefügt werden.
  3. Automatische Optimierung der Parameter mit Hilfe von Machine Learning Methoden.
  4. Es ist möglich, eine feinere Stop-Methode zu verwenden, z. B. eine Parallax-Linien-Stop-Methode.

Zusammenfassen

Die Strategie insgesamt ist eine sehr profitable Hochfrequenz-Marketing-Strategie. Sie nutzt die Brin-Band, um Handelschancen zu bieten und gleichzeitig Risiken zu kontrollieren. Aber wir müssen auch bewusst sein, dass es Probleme und Mängel gibt, die sorgfältig in der Praxis überprüft werden. Durch weitere Optimierung wird die Strategie zu stabileren und hohen Erträgen führen.

Strategiequellcode
/*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()