Bollinger-Fibonacci-Gitter-Trendverfolgungsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-13 17:12:38
Tags:

img

Übersicht

Diese Strategie verwendet den Bollinger Bands-Indikator, um Preiskanäle zu zeichnen, die auf ATR- und Fibonacci-Retracements als Gitter basieren.

Strategieprinzip

  1. Verwenden Sie die mittlere Linie der Bollinger-Bänder und die oberen und unteren Schienen, die aus den ATR- und 4 Fibonacci-Retracement-Linien hergestellt wurden, um die Preiswellenbänder zu erstellen.

  2. Die schnelle EMA-Linie und die langsame SMA-Linie bilden einen doppelten gleitenden Durchschnitt, um die allgemeine Trendrichtung zu bestimmen. Die schnelle Linie, die die langsame Linie durchbricht, ist ein Bullenmarkt und umgekehrt ein Bärenmarkt.

  3. In einem Bullenmarkt wählen Sie nur lange, wählen Sie Preise in der Nähe der unteren Schiene der Bollinger-Bänder, um durch den Boden des Kanals zu brechen, um lange Positionen zu eröffnen; in einem Bärenmarkt, wählen Sie nur kurze, wählen Sie Preise in der Nähe der oberen Schiene der Bollinger-Bänder, um durch die Oberseite des Kanals zu brechen, um kurze Positionen zu eröffnen.

  4. Einstellung der Stop-Loss-Bedingungen: Ausstieg aus den aktuellen Richtpositionen, wenn eine große Umkehrleiste angezeigt wird.

Analyse der Vorteile

  1. Verwenden Sie doppelte gleitende Durchschnitte, um Trends auf Mega-Level-Ebene zu bestimmen, um gegentrendigen Handel zu vermeiden.

  2. Das Bollinger-ATR-Kanal-Gitter setzt mehrere Eröffnungspreise, um die Wahrscheinlichkeit erfolgreicher Eröffnung von Positionen zu erhöhen.

  3. Die Fibonacci-Retrace-Wellenbänder setzen die Preisvolatilität mit unterschiedlicher Anzahl von Positionen in verschiedenen Bands fest, wodurch eine Kapitaldispersion erreicht wird.

  4. Echtzeit-Stop-Loss-Bedingungen erleichtern schnelle Stop-Loss und reduzieren Gewinnrückgängen.

Risikoanalyse

  1. Fehler bei der Beurteilung von Trends auf Mega-Ebene können zu entgegengesetzten Verlusten führen.

  2. Wenn die Volatilität zu hoch ist, können die Preise direkt durch das Netzbereich durchbrechen und keine Positionen eröffnen können.

  3. Stop-Loss-Bedingungen sind subjektiver und die Anerkennungskriterien können von Händler zu Händler unterschiedlich sein.

Optimierungsrichtlinien

  1. Hinzufügen des APO-Indikators für die Hilfsanalyse von doppelten gleitenden Durchschnittstrendurteilen.

  2. Verwenden von Marktvolatilitätsindikatoren zur Optimierung der Bollinger-Wellenbandparameter, um sich besser an dynamische Marktveränderungen anzupassen.

  3. Verringern Sie die Stop-Loss-Amplitude und fügen Sie eine ANDERE Möglichkeit hinzu, um die Stop-Loss-Bedingungen einzustellen, um Fehler zu reduzieren.

Zusammenfassung

Die allgemeine Idee dieser Strategie ist klar, die Bollinger ATR-Kanal und doppelte gleitende Durchschnitte kombiniert, um ein umfassendes Urteil über Strategie-Handelssignale zu erzielen, wodurch das Risiko einer Fehleinschätzung maximiert wird. Die Vorteile der Strategie sind offensichtlich und können im tatsächlichen Handel angewendet werden; aber es gibt noch Raum für Optimierungen in Details wie Parameter-Einstellungen und Stop-Loss-Bedingungen, die weiter verbessert werden müssen. Es wird angenommen, dass mit kontinuierlicher Optimierung die Rentabilität und Stabilität dieser Strategie weiter steigen wird.


/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 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/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true,initial_capital=2000, default_qty_type=strategy.fixed, default_qty_value=1)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 trend

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend and close>ta.ema(close,80)
buy3=ta.crossunder(close,bott3) and longTrend and close>ta.ema(close,80)
buy4=ta.crossunder(close,bott4) and longTrend and close>ta.ema(close,80)
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

Mehr