Stratégie de signal de fluctuation de la bande de Bohr


Date de création: 2024-01-15 15:16:27 Dernière modification: 2024-01-15 15:16:27
Copier: 0 Nombre de clics: 553
1
Suivre
1617
Abonnés

Stratégie de signal de fluctuation de la bande de Bohr

Aperçu

La stratégie des ondes de Bollinger est une stratégie de négociation quantitative qui combine les bandes de Bollinger et les moyennes mobiles. La stratégie génère des signaux de négociation en calculant la différence standard des bandes de Bollinger et le signal croisé des moyennes mobiles pour déterminer la tendance du marché et les zones de survente et de survente.

Principe de stratégie

La stratégie commence par calculer la moyenne mobile de l’indice (EMA) comme ligne de référence pour la période donnée. Ensuite, l’EMA est calculée en fonction de la ligne de haut de la trajectoire (EMA + n fois l’écart-type) et de la ligne de bas de la trajectoire (EMA - n fois l’écart-type).

Lorsque le prix se situe entre la ligne supérieure et la ligne inférieure, c’est la zone de fluctuation normale du prix d’une action. De plus, la stratégie, combinée à d’autres indicateurs tels que l’indicateur RSI, filtre les signaux de trading, réduisant la fréquence des transactions et réduisant les pertes inutiles.

Plus précisément, les règles de jugement des signaux de trading de cette stratégie sont les suivantes:

  1. Signaux multiples: le cours de clôture est supérieur à la ligne ascendante et le RSI est supérieur à 60
  2. Signaux de tête vide: le prix de clôture est inférieur à la ligne descendante et le RSI est inférieur à 40

Lorsque le signal de négociation ci-dessus apparaît, entrez dans la position en quantité fixe ou en proportion de compte. Retirez la position lorsque le prix revient dans la zone de la vague ou lorsque le signal inverse apparaît.

Avantages stratégiques

Cette stratégie combine un jugement de tendance et un jugement de surachat et de survente pour éviter les erreurs de négociation lors d’une liquidation en situation de choc. Comparée à la stratégie de l’indicateur unique, elle permet de réduire les positions inutiles et de contrôler efficacement les risques.

Par rapport à la simple stratégie des moyennes mobiles, les bandes de Bol reflètent mieux la volatilité et le niveau de risque du marché actuel. Les signaux de négociation sont plus fiables avec une large bande d’ondes; la fréquence de négociation est automatiquement réduite avec une large bande d’ondes. Cette adaptation permet de contrôler le risque de la stratégie en fonction des différentes conditions du marché.

En outre, la stratégie est doublement confirmée par des indicateurs tels que le RSI, ce qui permet de filtrer certains faux signaux et d’éviter de faire des erreurs de trading à un tournant de tendance.

Analyse des risques

Les principaux risques de cette stratégie sont les suivants:

  1. Risque d’optimisation des paramètres. Si les paramètres de la moyenne mobile ou le multiple de la différence standard sont mal définis, cela entraînera plus de transactions bruyantes ou des opportunités de transactions manquées. Ces paramètres doivent être testés et optimisés à plusieurs reprises.

  2. Risque de faux signal de rupture. Un faux signal se produit lorsque le prix se rétablit rapidement après une brèche de courte durée de la trajectoire ascendante et descendante. Dans ce cas, la perte de trading augmente. Ce risque peut être contrôlé en augmentant le cycle de la moyenne mobile ou en définissant un stop-loss.

  3. Risque de fréquence de transaction. Si l’écart entre les lignes de train est trop petit, cela augmente le nombre de transactions et les frais de traitement. Cela peut avoir un certain impact sur le bénéfice final.

Direction d’optimisation

Il y a encore de la place pour optimiser cette stratégie:

  1. Augmentation des mécanismes d’arrêt des pertes. La mise en place d’un arrêt mobile ou d’un arrêt temporel aide à arrêter les pertes en temps opportun et à contrôler les pertes individuelles.

  2. Augmentation de la gestion des positions. Par exemple, l’établissement de règles d’ajout et de retrait de positions, permettant d’augmenter les bénéfices et de réduire les pertes. Cela peut améliorer le taux de rendement de la stratégie.

  3. Le filtrage des signaux, en combinaison avec d’autres indicateurs, tels que KDJ, MACD, etc., peut être utilisé comme indicateur de signal de jugement auxiliaire. Cela contribue à améliorer encore la rentabilité de la stratégie.

  4. L’optimisation des paramètres. Les combinaisons de paramètres peuvent être testées par des méthodes plus systématiques, telles que des algorithmes génétiques, pour trouver les meilleurs paramètres.

Résumer

La stratégie de signaux d’oscillation des bandes de Bol intègre la détermination de la tendance des moyennes mobiles et la détermination des surachats. Elle ajuste la fréquence des transactions en fonction de la variation de la gamme d’ondes et peut s’adapter à différentes conditions du marché.

Code source de la stratégie
/*backtest
start: 2023-01-08 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(55, minval=1, title='EMA length')  // 20 for classis Bollinger Bands SMA line (basis)


mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation')  //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')

upper = basis + dev
lower = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short = src < lower  // and rsi(close,14)<40
long = src > upper  // and rsi(close,14)>60

L1 = ta.barssince(long)
S1 = ta.barssince(short)

longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]

//Plots and Fills


////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  

// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  


p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')

p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')

fill(p, p1, color=color.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //fill for basis-lower

//Barcolor

bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na

barcolor(CC ? bcol : na, editable=false, title='Color Bars')


// //Alerts ----  // Use 'Once per bar close'

// alertcondition(condition=longSignal, title="Long - BB Filter", message='BB Filter Long @ {{close}}') // Use 'Once per bar close'
// alertcondition(condition=shortSignal, title="Short - BB Filter", message='BB Filter Short @ {{close}}')  // Use 'Once per bar close'

Notestart1 = input(true, '╔═══ Time Range to BackTest ═══╗')

// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')