Stratégie de percée de la volatilité

Auteur:ChaoZhang est là., Date: 2023-12-13 14h36:04
Les étiquettes:

img

Résumé

La stratégie de percée de la volatilité est une stratégie qui effectue des opérations d'achat et de vente lorsque les prix franchissent des niveaux de support ou de résistance clés dans des modèles de volatilité.

Principe de stratégie

Cette stratégie est principalement basée sur les quatre indicateurs techniques Bollinger Middle Band, 48 jours Simple Moving Average (SMA), MACD et ADX.

  1. Considérer les opportunités de négociation lorsque le prix de clôture dépasse ou dépasse la SMA à 48 jours;

  2. Lorsque le prix de clôture franchit la bande moyenne de Bollinger, il sert de signal d'entrée;

  3. MACD supérieur ou inférieur à 0, sert d'indicateur auxiliaire pour déterminer la direction de la tendance;

  4. L'ADX est supérieur à 25 pour filtrer les marchés non tendance.

Lorsque les quatre conditions ci-dessus sont remplies, allez long ou allez court.

Les avantages de la stratégie

Il s'agit d'une stratégie qui combine des indicateurs de tendance et de volatilité.

  1. L' SMA à 48 jours filtre les transactions trop fréquentes et bloque les tendances à moyen et long terme;

  2. La rupture de la bande moyenne de Bollinger saisit les principaux points de rupture de support/résistance avec une forte fonction stop loss;

  3. Le MACD évalue la direction des tendances majeures, en évitant de négocier contre tendance;

  4. L'ADX filtre les marchés non tendance et améliore le taux de réussite de la stratégie.

En résumé, cette stratégie a fait des optimisations dans le contrôle de la fréquence des transactions, la saisie des points clés, la détermination de la direction de la tendance et le filtrage des mouvements invalides, ayant ainsi un taux de gain relativement élevé.

Risques liés à la stratégie

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

  1. Dans les marchés volatils, la bande moyenne de Bollinger peut déclencher trop d'opportunités de négociation, ce qui conduit à une survente;

  2. L'indicateur ADX présente également des erreurs dans la détermination des tendances et des mouvements non valides;

  3. Risque de tirage relativement élevé, adapté aux investisseurs capables de supporter un certain niveau de risque.

Directions d'optimisation

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

  1. Ajouter l'indicateur ATR pour définir les points de perte d'arrêt et réduire par perte d'arrêt;

  2. Optimiser les paramètres de Bollinger pour réduire la fréquence de déclenchement de la ligne médiane;

  3. Ajouter des indicateurs de volume des transactions ou de la force de la tendance pour déterminer la force des tendances, en évitant les transactions de renversement faibles.

Résumé

En résumé, cette stratégie de percée de la volatilité est relativement mature dans son ensemble, capturant efficacement les principaux points de négociation sur les marchés volatils. Elle combine des indicateurs de tendance et de volatilité, équilibrant entre risque et rendement.


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

Plus de