Analyse der adaptiven Bollinger-Band-Strategie basierend auf der Fibonacci-Folge

ATR BB SMA FIB
Erstellungsdatum: 2025-01-06 16:41:48 zuletzt geändert: 2025-01-06 16:41:48
Kopie: 2 Klicks: 434
1
konzentrieren Sie sich auf
1617
Anhänger

Analyse der adaptiven Bollinger-Band-Strategie basierend auf der Fibonacci-Folge

Überblick

Diese Strategie ist ein innovatives Handelssystem, das die Fibonacci-Folge und Bollinger-Bänder kombiniert. Es bildet ein einzigartiges System zur Beurteilung des Preisschwankungsbereichs, indem es die Standardabweichungsvielfachen der traditionellen Bollinger-Bänder durch das Fibonacci-Verhältnis (1,618, 2,618, 4,236) ersetzt. Die Strategie beinhaltet vollständige Transaktionsverwaltungsfunktionen, einschließlich Stop-Profit- und Stop-Loss-Einstellungen sowie Filterung von Transaktionszeitfenstern, was sie äußerst praktisch und flexibel macht.

Strategieprinzip

Die Kernlogik der Strategie basiert auf der Interaktion zwischen Preis und den Fibonacci-Bollinger-Bändern. Berechnen Sie zunächst den einfachen gleitenden Durchschnitt (SMA) des Preises als mittleren Verlauf und verwenden Sie dann den ATR multipliziert mit verschiedenen Fibonacci-Verhältnissen, um die oberen und unteren Verlaufslinien zu bilden. Wenn der Preis das vom Benutzer ausgewählte Fibonacci-Band durchbricht, generiert das System ein Handelssignal. Konkret wird ein Long-Signal ausgelöst, wenn der niedrigste Preis unter der Zielkaufspanne und der höchste Preis über der Spanne liegt; ein Short-Signal wird ausgelöst, wenn der niedrigste Preis unter der Zielverkaufsspanne und der höchste Preis über der Spanne liegt. als die Band.

Strategische Vorteile

  1. Starke Anpassungsfähigkeit: Passen Sie die Bandbreite dynamisch über ATR an, um die Strategie besser an unterschiedliche Marktumgebungen anzupassen
  2. Hohe Flexibilität: Benutzer können je nach ihrem Handelsstil verschiedene Fibonacci-Bänder als Handelssignale wählen
  3. Perfektes Risikomanagement: Integrierte Stop-Profit-, Stop-Loss- und Zeitfilterfunktionen zur effektiven Kontrolle von Risiken
  4. Visuelle Intuition: Verschiedene Transparenzbänder werden angezeigt, um Händlern zu helfen, die Marktstruktur zu verstehen
  5. Klare Berechnungslogik: Verwenden Sie klassische technische Indikatorenkombinationen, leicht zu verstehen und zu warten

Strategisches Risiko

  1. Risiko eines falschen Ausbruchs: Die Preise können unmittelbar nach einem Ausbruch zurückfallen und so ein falsches Signal erzeugen.
  2. Parametersensitivität: Unterschiedliche Auswahl der Fibonacci-Verhältnisse kann die Strategieleistung erheblich beeinflussen
  3. Zeitabhängigkeit: Wenn Sie Handelszeitfenster aktivieren, verpassen Sie möglicherweise wichtige Handelsmöglichkeiten
  4. Abhängigkeit vom Marktumfeld: kann in einem volatilen Markt zu viele Handelssignale erzeugen

Richtung der Strategieoptimierung

  1. Signalbestätigungsmechanismus: Es wird empfohlen, Volumen- oder Momentumindikatoren als Durchbruchsbestätigung hinzuzufügen
  2. Dynamische Parameteroptimierung: Fibonacci-Verhältnisse können automatisch an die Marktvolatilität angepasst werden
  3. Filterung des Marktumfelds: Fügen Sie eine Trendbeurteilungsfunktion hinzu und verwenden Sie unterschiedliche Parameter in unterschiedlichen Marktumfeldern
  4. Signalgewichtungssystem: Erstellen Sie eine Analyse mehrerer Zeitrahmen, um die Signalzuverlässigkeit zu verbessern
  5. Optimierung des Positionsmanagements: Passen Sie die Positionsgröße dynamisch an die Marktvolatilität und Signalstärke an.

Zusammenfassen

Hierbei handelt es sich um eine Strategie, die klassische technische Analysetools innovativ kombiniert und die traditionelle Bollinger-Band-Strategie durch die Fibonacci-Folge optimiert. Seine Hauptvorteile liegen in seiner Anpassungsfähigkeit und Flexibilität, jedoch sollte bei der Verwendung auf die Übereinstimmung zwischen Parameterauswahl und Marktumfeld geachtet werden. Bei dieser Strategie besteht noch viel Verbesserungspotenzial durch das Hinzufügen zusätzlicher Bestätigungsindikatoren und die Optimierung des Signalgenerierungsmechanismus.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// © sapphire_edge 

// # ========================================================================= #
// #                  
// #        _____                   __    _              ______    __         
// #      / ___/____ _____  ____  / /_  (_)_______     / ____/___/ /___ ____ 
// #      \__ \/ __ `/ __ \/ __ \/ __ \/ / ___/ _ \   / __/ / __  / __ `/ _ \
// #     ___/ / /_/ / /_/ / /_/ / / / / / /  /  __/  / /___/ /_/ / /_/ /  __/
// #    /____/\__,_/ .___/ .___/_/ /_/_/_/   \___/  /_____/\__,_/\__, /\___/ 
// #              /_/   /_/                                     /____/       
// #                                      
// # ========================================================================= #

strategy(shorttitle="⟡Sapphire⟡ FiboBands Strategy", title="[Sapphire] Fibonacci Bollinger Bands Strategy", initial_capital= 50000, currency= currency.USD,default_qty_value = 1,commission_type= strategy.commission.cash_per_contract,overlay= true )

// # ========================================================================= #
// #                       // Settings Menu //
// # ========================================================================= #

// --------------------    Main Settings    -------------------- //
groupFiboBands = "FiboBands"
length = input.int(20, minval = 1, title = 'Length', group=groupFiboBands)
src = input(close, title = 'Source', group=groupFiboBands)
offset = input.int(0, 'Offset', minval = -500, maxval = 500, group=groupFiboBands)

fibo1 = input(defval = 1.618, title = 'Fibonacci Ratio 1', group=groupFiboBands)
fibo2 = input(defval = 2.618, title = 'Fibonacci Ratio 2', group=groupFiboBands)
fibo3 = input(defval = 4.236, title = 'Fibonacci Ratio 3', group=groupFiboBands)

fiboBuy = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Buy', group=groupFiboBands)
fiboSell = input.string(options = ['Fibo 1', 'Fibo 2', 'Fibo 3'], defval = 'Fibo 1', title = 'Fibonacci Sell', group=groupFiboBands)

showSignals = input.bool(true, title="Show Signals", group=groupFiboBands)
signalOffset = input.int(5, title="Signal Vertical Offset", group=groupFiboBands)

// --------------------    Trade Management Inputs    -------------------- //
groupTradeManagement = "Trade Management"
useProfitPerc    = input.bool(false, title="Enable Profit Target", group=groupTradeManagement)
takeProfitPerc  = input.float(1.0, title="Take Profit (%)", step=0.1, group=groupTradeManagement)
useStopLossPerc    = input.bool(false, title="Enable Stop Loss", group=groupTradeManagement)
stopLossPerc    = input.float(1.0, title="Stop Loss (%)", step=0.1, group=groupTradeManagement)

// --------------------    Time Filter Inputs    -------------------- //
groupTimeOfDayFilter = "Time of Day Filter"
useTimeFilter1  = input.bool(false, title="Enable Time Filter 1", group=groupTimeOfDayFilter)
startHour1      = input.int(0, title="Start Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
startMinute1    = input.int(0, title="Start Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
endHour1        = input.int(23, title="End Hour (24-hour format)", minval=0, maxval=23, group=groupTimeOfDayFilter)
endMinute1      = input.int(45, title="End Minute", minval=0, maxval=59, group=groupTimeOfDayFilter)
closeAtEndTimeWindow = input.bool(false, title="Close Trades at End of Time Window", group=groupTimeOfDayFilter)

// --------------------    Trading Window    -------------------- //
isWithinTradingWindow(startHour, startMinute, endHour, endMinute) =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    startInMinutes    = startHour * 60 + startMinute
    endInMinutes      = endHour * 60 + endMinute
    timeInMinutes    >= startInMinutes and timeInMinutes <= endInMinutes

timeCondition =  (useTimeFilter1 ? isWithinTradingWindow(startHour1, startMinute1, endHour1, endMinute1) : true)

// Check if the current bar is the last one within the specified time window
isEndOfTimeWindow() =>
    nyTime            = timestamp("America/New_York", year, month, dayofmonth, hour, minute)
    nyHour            = hour(nyTime)
    nyMinute          = minute(nyTime)
    timeInMinutes     = nyHour * 60 + nyMinute
    endInMinutes      = endHour1 * 60 + endMinute1
    timeInMinutes == endInMinutes

// Logic to close trades if the time window ends
if timeCondition and closeAtEndTimeWindow and isEndOfTimeWindow()
    strategy.close_all(comment="Closing trades at end of time window")

// # ========================================================================= #
// #                       // Calculations //
// # ========================================================================= #

sma = ta.sma(src, length)
atr = ta.atr(length)

ratio1 = atr * fibo1
ratio2 = atr * fibo2
ratio3 = atr * fibo3

upper3 = sma + ratio3
upper2 = sma + ratio2
upper1 = sma + ratio1

lower1 = sma - ratio1
lower2 = sma - ratio2
lower3 = sma - ratio3

// # ========================================================================= #
// #                       // Signal Logic //
// # ========================================================================= #

// --------------------    Entry Logic    -------------------- //
targetBuy = fiboBuy == 'Fibo 1' ? upper1 : fiboBuy == 'Fibo 2' ? upper2 : upper3
buy = low < targetBuy and high > targetBuy

// --------------------    User-Defined Exit Logic    -------------------- //
targetSell = fiboSell == 'Fibo 1' ? lower1 : fiboSell == 'Fibo 2' ? lower2 : lower3
sell = low < targetSell and high > targetSell

// # ========================================================================= #
// #                       // Strategy Management //
// # ========================================================================= #

// --------------------    Trade Execution Flags    -------------------- //
var bool buyExecuted = false
var bool sellExecuted = false

float labelOffset = ta.atr(14) * signalOffset

// --------------------    Buy Logic    -------------------- //
if buy and timeCondition 
    if useProfitPerc or useStopLossPerc
        strategy.entry("Buy", strategy.long, stop=(useStopLossPerc ? close * (1 - stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 + takeProfitPerc / 100) : na))
    else
        strategy.entry("Buy", strategy.long)

    if showSignals and not buyExecuted
        buyExecuted := true  
        sellExecuted := false  
        label.new(bar_index, high - labelOffset, "◭", style=label.style_label_up, color = color.rgb(119, 0, 255, 20), textcolor=color.white)

// --------------------    Sell Logic    -------------------- //
if sell and timeCondition
    if useProfitPerc or useStopLossPerc
        strategy.entry("Sell", strategy.short, stop=(useStopLossPerc ? close * (1 + stopLossPerc / 100) : na), limit=(useProfitPerc ? close * (1 - takeProfitPerc / 100) : na))
    else
        strategy.entry("Sell", strategy.short)

    if showSignals and not sellExecuted
        sellExecuted := true 
        buyExecuted := false  
        label.new(bar_index, low + labelOffset, "⧩", style=label.style_label_down, color = color.rgb(255, 85, 0, 20), textcolor=color.white)



// # ========================================================================= #
// #                         // Plots and Charts //
// # ========================================================================= #

plot(sma, style = plot.style_line, title = 'Basis', color = color.new(color.orange, 0), linewidth = 2, offset = offset)

upp3 = plot(upper3, title = 'Upper 3', color = color.new(color.teal, 90), offset = offset)
upp2 = plot(upper2, title = 'Upper 2', color = color.new(color.teal, 60), offset = offset)
upp1 = plot(upper1, title = 'Upper 1', color = color.new(color.teal, 30), offset = offset)

low1 = plot(lower1, title = 'Lower 1', color = color.new(color.teal, 30), offset = offset)
low2 = plot(lower2, title = 'Lower 2', color = color.new(color.teal, 60), offset = offset)
low3 = plot(lower3, title = 'Lower 3', color = color.new(color.teal, 90), offset = offset)

fill(upp3, low3, title = 'Background', color = color.new(color.teal, 95))