Stratégie de tendance d'oscillation de canal de bande de Bollinger inversée


Date de création: 2023-10-31 14:30:45 Dernière modification: 2023-10-31 14:30:45
Copier: 0 Nombre de clics: 664
1
Suivre
1617
Abonnés

Stratégie de tendance d’oscillation de canal de bande de Bollinger inversée

Aperçu

Il s’agit d’une stratégie de tendance de choc inverse basée sur les canaux de la ceinture de Brin. Elle utilise les canaux de la ceinture de Brin pour juger de la tendance et chercher des opportunités de reprise lorsque le prix est proche des limites du canal.

Principe de stratégie

La stratégie utilise l’indicateur de la ceinture de Brin comme principal indicateur technique. La ceinture de Brin est constituée de la moyenne mobile de n jours et de sa gamme d’oscillations supérieures et inférieures, la ceinture de Brin est en train de monter = moyenne mobile de n jours + écart-type m × n jours, la ceinture de Brin est en train de descendre = moyenne mobile de n jours - écart-type m × n jours.

Lorsque le prix est proche de la trajectoire ascendante, il indique qu’il est actuellement dans une tendance à la hausse, mais qu’il peut atteindre le sommet de la reprise. Lorsque le prix est proche de la trajectoire descendante, il indique qu’il est actuellement dans une tendance à la baisse, mais qu’il peut atteindre le fond de la reprise.

Les règles de négociation spécifiques à cette stratégie sont les suivantes:

  1. Il y a une entrée plus élevée lorsque le prix de clôture est supérieur à la trajectoire de Brin; une entrée négative lorsque le prix de clôture est inférieur à la trajectoire de Brin.

  2. Le stop loss est un signal en utilisant la moyenne mobile de n jours. Le stop loss est activé lorsque le prix de clôture du multi-métal dépasse la moyenne quotidienne de n jours; le stop loss est activé lorsque le prix de clôture du singulier vide dépasse la moyenne quotidienne de n jours.

  3. Le volume de transactions est fixe et le nombre de transactions est fixe.

  4. La méthode de gestion de fonds à taux fixe, qui définit un taux de profit/perte fixe et une marge d’ajustement des ordres. Augmenter la position à un taux fixe lorsque le taux de profit est atteint et réduire la position lorsque la perte est enregistrée.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. Utilisez le canal de la ceinture de Brin pour déterminer la direction de la tendance, adoptez des stratégies de négociation de contre-courant, entrez à un moment où le prix peut se retourner, évitez la plupart des chocs et augmentez le taux de victoire.

  2. Les moyennes mobiles sont des signaux de stop-loss plus fiables et permettent de bloquer la plupart des gains.

  3. La stratégie du volume fixe est simple et pratique, sans calculs compliqués.

  4. Les stratégies de gestion de fonds à taux fixe permettent d’augmenter les bénéfices tout en contrôlant les risques en ajustant les positions.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Il existe une probabilité que le jugement de la courbe de Brin produise un signal erroné, ce qui pourrait entraîner une perte unique dans le renversement de la tendance.

  2. Le retard des moyennes mobiles peut entraîner une insuffisance de l’arrêt.

  3. Le volume de transactions fixe ne permet pas d’ajuster la position en fonction des conditions du marché, et il existe un problème de position trop grande ou trop petite.

  4. Les méthodes de gestion de fonds à taux fixe permettent d’élargir les positions, ce qui peut entraîner une augmentation des pertes.

Les contre-mesures: optimisation des paramètres de la bande de Brin, amélioration de l’exactitude du signal; jugement de la tendance en combinaison avec d’autres indicateurs; réduction appropriée de la taille des positions fixes; réduction de la marge d’ajustement des positions pour la gestion des fonds à taux fixe.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres de la bande de Bourin, tels que l’ajustement des valeurs n et m, pour améliorer l’exactitude des jugements de la bande de Bourin.

  2. Ajout d’autres indicateurs de jugement, tels que MACD, KD, etc., pour éviter que le bourin ne porte le mauvais signal.

  3. Adapter le volume de négociation fixe au volume de négociation dynamique et adapter la position de manière flexible en fonction des conditions du marché.

  4. Réduire la marge d’ajustement des positions dans la méthode de gestion des fonds à taux fixe et optimiser la courbe des fonds.

  5. Ajouter des stratégies de stop loss, telles que des stop loss mobiles, des stop loss de rupture par intervalles, etc. pour contrôler davantage le risque.

  6. Optimiser les paramètres, optimiser automatiquement les combinaisons de paramètres, trouver les paramètres optimaux pour optimiser la stratégie.

Résumer

Cette stratégie est généralement une stratégie de revers de la courbe de Brin typique. Elle utilise la courbe de Brin pour déterminer le point de revers de la tendance, avec des paramètres de stop loss, un volume de transactions fixe et des risques de gestion de fonds à taux fixe.

Code source de la stratégie
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 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/
// © gsanson66


//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)


//----------------------------------------FUNCTIONS---------------------------------------//

//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
    label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)

//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)


//---------------------------------------USER INPUTS--------------------------------------//

//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")


//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na


//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//

//Checking if the date belong to the range
inRange := true

//Checking performances of the strategy
if equity > capital_ref + fixedRatio
    spread = (equity - capital_ref)/fixedRatio
    nb_level = int(spread)
    increasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder + increasingOrder
    capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
    spread = (capital_ref - equity)/fixedRatio
    nb_level = int(spread)
    decreasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder - decreasingOrder
    capital_ref := capital_ref - nb_level*fixedRatio

//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
    strategy.close_all()
    debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))


//-----------------------------------EXIT SIGNAL------------------------------//

if strategy.position_size > 0 and close < smaExit
    strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
    strategy.close("Short")


//----------------------------------LONG/SHORT CONDITION---------------------------//

//Long Condition
if close > upperBB and inRange
    qty = cashOrder/close
    strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
    qty = cashOrder/close
    strategy.entry("Short", strategy.short, qty)


//---------------------------------PLOTTING ELEMENT----------------------------------//

plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))