
La stratégie de rupture de choc est une stratégie d’achat et de vente qui utilise la forme de la volatilité des prix pour effectuer des opérations lorsque les prix franchissent un support ou une résistance critique. La stratégie combine plusieurs indicateurs techniques pour identifier des opportunités de négociation critiques.
La stratégie est basée sur quatre indicateurs techniques: la ligne médiane de la ceinture de Brin, la moyenne mobile simple à 48 jours (SMA), le MACD et l’ADX. La logique est la suivante:
la prise en compte des opportunités de négociation lorsque le cours de clôture est supérieur ou inférieur à la SMA de 48 jours;
Il sert de signal d’entrée lorsque le prix de clôture franchit la ligne médiane de la ceinture de Brin;
le MACD est supérieur ou inférieur à zéro comme indicateur auxiliaire pour déterminer la direction de la tendance;
L’ADX doit être supérieur à 25 pour éliminer les tendances défavorables.
Si vous remplissez les quatre conditions ci-dessus, faites plus ou moins.
Il s’agit d’une stratégie qui combine des indicateurs de tendance et de choc. Ses principaux avantages sont:
Le 48ème SMA filtre les transactions trop fréquentes et bloque les tendances à la ligne moyenne et longue.
La rupture de la ligne médiane de la ceinture de Brin capture les points de rupture de la résistance de soutien critique et a une fonction de prévention des dommages très puissante.
Le MACD détermine la direction des grandes tendances et évite les transactions à contre-courant.
L’ADX filtre les marchés non tendanciels pour améliorer la stratégie de victoire.
Dans l’ensemble, la stratégie a été optimisée pour contrôler la fréquence des transactions, saisir les points critiques, juger les tendances et filtrer les inefficacités.
La stratégie présente principalement les risques suivants:
La courbe moyenne de Brin déclenche fréquemment des opportunités de trading et peut être sur-échangée dans les marchés en crise.
L’indicateur ADX présente également des erreurs dans ses jugements sur les tendances et les inefficacités;
Le retrait est plus risqué et convient aux investisseurs qui ont une certaine capacité de prise de risque.
Cette stratégie peut être optimisée dans les domaines suivants:
L’augmentation des indices ATR, la mise en place d’un stop loss et la réduction du stop loss unique;
Optimiser les paramètres de la bande de Bryn pour réduire la fréquence de déclenchement de la ligne médiane;
Augmenter le volume de transactions ou l’indicateur de la force de la tendance pour juger de la force de la tendance et éviter la reprise de la faiblesse.
Dans l’ensemble, la stratégie de rupture sismique est relativement mature et capte efficacement les points clés de la transaction dans une situation sismique. Elle combine les tendances et les indicateurs sismiques pour saisir l’équilibre entre les risques et les gains.
/*backtest
start: 2023-12-11 00:00:00
end: 2023-12-12 00:00:00
period: 10m
basePeriod: 1m
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/
// © 03.freeman
//Volatility Traders Minds Strategy (VTM Strategy)
//I found this startegy on internet, with a video explaingin how it works.
//Conditions for entry:
//1 - Candles must to be above or bellow the 48 MA (Yellow line)
//2 - Candles must to break the middle of bollinger bands
//3 - Macd must to be above or bellow zero level;
//4 - ADX must to be above 25 level
//@version=4
strategy("Volatility Traders Minds Strategy (VTM Strategy)", shorttitle="VTM",overlay=true)
source = input(close)
//MA
ma48 = sma(source,48)
//MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(source, fastLength) - ema(source, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
//BB
length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev
//ADX
adxThreshold = input(title="ADX Threshold", type=input.integer, defval=25, minval=1)
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, len)
plus = fixnan(100 * rma(plusDM, len) / truerange)
minus = fixnan(100 * rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
// Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => close>ma48 and close>basis and delta>0 and sig>adxThreshold // functions can be used to wrap up and work out complex conditions
//exitLong() => jaw>teeth or jaw>lips or teeth>lips
strategy.entry(id = "Buy", long = true, when = enterLong() ) // use function or simple condition to decide when to get in
//strategy.close(id = "Buy", when = exitLong() ) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => close<ma48 and close<basis and delta<0 and sig>adxThreshold
//exitShort() => jaw<teeth or jaw<lips or teeth<lips
strategy.entry(id = "Sell", long = false, when = enterShort())
//strategy.close(id = "Sell", when = exitShort() )
// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2020, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()