Stratégie de suivi des tendances de la grille de Bollinger Fibonacci

Auteur:ChaoZhang est là., Date: 2023-12-13 17:12:38 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur Bollinger Bands pour dessiner des canaux de prix basés sur les retracements ATR et Fibonacci sous forme de grilles.

Principe de stratégie

  1. Utilisez la ligne médiane des bandes de Bollinger et les rails supérieur et inférieur construits à partir des lignes de retracement ATR et 4 Fibonacci pour construire les bandes d'ondes de prix.

  2. La ligne EMA rapide et la ligne SMA lente forment une moyenne mobile double pour déterminer la direction générale de la tendance.

  3. Dans un marché haussier, choisissez des prix près du rail inférieur des bandes de Bollinger pour franchir le bas du canal pour ouvrir des positions longues; dans un marché baissier, choisissez des prix près du rail supérieur des bandes de Bollinger pour franchir le haut du canal pour ouvrir des positions courtes.

  4. Définir les conditions d'arrêt des pertes: quitter les positions directionnelles actuelles lorsqu'une grande barre d'inversion apparaît.

Analyse des avantages

  1. Utilisez des moyennes mobiles doubles pour déterminer les tendances de niveau méga afin d'éviter les transactions contre-tendance.

  2. La grille des canaux ATR de Bollinger fixe plusieurs prix d'ouverture pour augmenter la probabilité d'ouverture réussie des positions.

  3. Les bandes d'ondes de retrace de Fibonacci fixent la volatilité des prix, avec un nombre différent de positions dans différentes bandes, ce qui permet de réaliser une dispersion du capital.

  4. Les conditions de stop loss en temps réel facilitent les stop loss rapides et réduisent les retraces de profit.

Analyse des risques

  1. Les erreurs dans le jugement des tendances au méga-niveau peuvent entraîner des pertes contraires.

  2. Lorsque la volatilité est trop élevée, les prix peuvent franchir directement la zone de la grille, incapables d'ouvrir des positions.

  3. Les conditions de stop loss sont plus subjectives et les critères de reconnaissance peuvent différer selon les traders.

Directions d'optimisation

  1. Ajouter l'indicateur APO pour l'analyse auxiliaire des jugements de tendance de la moyenne mobile double.

  2. Utiliser des indicateurs de volatilité du marché pour optimiser les paramètres de la bande d'onde de Bollinger afin de mieux s'adapter aux changements dynamiques du marché.

  3. Réduire l'amplitude de la perte d'arrêt et ajouter une autre façon de régler les conditions de perte d'arrêt pour réduire les erreurs.

Résumé

L'idée générale de cette stratégie est claire, combinant le canal ATR de Bollinger et les moyennes mobiles doubles pour atteindre un jugement complet des signaux de trading de stratégie, maximisant la réduction du risque d'erreur de jugement.


/*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)")
     

Plus de