Bidirektionale adaptive Bollinger-Band-Trendfolgestrategie


Erstellungsdatum: 2024-02-04 15:30:46 zuletzt geändert: 2024-02-04 15:30:46
Kopie: 4 Klicks: 607
1
konzentrieren Sie sich auf
1617
Anhänger

Bidirektionale adaptive Bollinger-Band-Trendfolgestrategie

Überblick

Die Strategie verwendet ein zweiseitiges, selbst adaptiertes Brin-Band-Indikator, um die Richtung des Trends zu erkennen, und kombiniert mit einer Marktpreisliste, um eine Stop-Loss-Verfolgung durchzuführen, um einen effizienten Trend-Tracking-Handel zu erzielen.

Strategieprinzip

  1. Brin-Mittelbahn, Oberbahn und Unterbahn nach bestimmten Perioden berechnet
  2. Beurteilen Sie, ob der Preis einen Aufwärtstrend hat, indem Sie mehr Tracking durchführen, und wenn der Preis einen Abwärtstrend hat, indem Sie keine Tracking durchführen.
  3. Schnellzugang zu Marktpreisen
  4. Einstellung der Stop-Loss-Position und der Stop-Stop-Position für die Positionsführung

Analyse der Stärken

  1. Die Anpassung an die Brin-Band-Indikatoren, die auf Marktbewegungen reagieren und schnell Trends erkennen können
  2. Schnelle Markteintritts mit Marktpreislisten, um das Risiko von Ausrutschen zu verringern
  3. Automatische Stop-Loss-Stopps, strenge Risikokontrolle und Gewinnsperre

Risikoanalyse

  1. Der Brin-Band selbst ist nachlässig und kann keine Falschbrüche vollständig vermeiden
  2. Marktpreislisten können den Handelspreis nicht kontrollieren
  3. Es ist notwendig, dass die Stop-Loss- und Stop-Stopp-Lösungen vernünftig eingestellt werden.

Optimierungsrichtung

  1. Anpassung der Brin-Band-Parameter zur Optimierung der Sensitivität von Trendbeurteilungen
  2. Hinzu kommen die Filterung von Kennzahlen wie Transaktionsvolumen oder MACD für falsche Durchbrüche
  3. Optimierung der Einstellungen für Stop-Loss und Stop-Out

Zusammenfassen

Die Strategie nutzt die Vorteile der Brin-Band, um die Richtung und Veränderung des Trends zu bestimmen. Die Strategie kombiniert die Kurse mit dem schnellen Ausstieg, um die Marktpreise in zwei Richtungen zu verfolgen und die Risiken zu kontrollieren, um zusätzliche Gewinne zu erzielen. Durch die weitere Optimierung der Brin-Band-Parameter, das Hinzufügen von Hilfsfilterindikatoren und die Anpassung der Stop-Loss-Stopp-Logik können bessere Strategieperformance erzielt werden.

Strategiequellcode
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CryptoRox

//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy("Automated - Fibs with Market orders", "Strategy", true)

//Settings 
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true


leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])

//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size

//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)

fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)

notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
    entry := fib10
if fibEntry == "2"
    entry := fib9
if fibEntry == "3"
    entry := fib0
if fibEntry == "4"
    entry := fib1
if fibEntry == "5"
    entry := fib2
if fibEntry == "6"
    entry := fib3
if fibEntry == "7"
    entry := fib4
if fibEntry == "8"
    entry := fib5
if fibEntry == "9"
    entry := fib6
if fibEntry == "10"
    entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause

fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])

filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0

neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]

last_profit = 0.0
last_profit := nz(last_profit[1])

// if neworder and signal
//     strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry)) 
// if moveorder
//     strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
    fill := entry
    count := count+1 
    pause := time + 60000
    p = close+close*(tp/100)
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')
if filledorder and size >= 1
    fill := entry
    count := count+1 
    pause := time + 60000
    strategy.entry("Buy", 1, 1,  alert_message='Long|e=binancefuturestestnet s=btcusdt b=long q=0.0011 t=market')

// if cancelorder and not filledorder
//     pause := time + 60000
//     strategy.order("Cancel", 1, 0.0001,  alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')

if filledorder
    last_profit := profit

closeit = crossover(high, profit) and size >= 1
if closeit
    strategy.entry("Close ALL", 0, 0, alert_message='Close Long|e=binancefuturestestnet s=btcusdt b=long c=position t=market')
    count := 0
    fill := 0.0
    last_profit := 0.0
    
//Plots
// bottom = signal ? color.green : filled ? color.red : color.white
// plot(entry, "Entry", bottom)