
Cette stratégie est appelée la stratégie MADEFlex, ou la stratégie de négociation quantitative flexible basée sur le couvercle de la moyenne mobile avec un arrêt de suivi de la moyenne réelle. Cette stratégie combine l’indicateur du couvercle de la moyenne mobile et le mécanisme d’arrêt de suivi de la moyenne réelle, permettant une solution de négociation quantitative flexible et contrôlable.
Le cœur de cette stratégie est l’indicateur MADE. L’indicateur MADE se forme en haut et en bas en multipliant le déplacement de l’indicateur MADE par un facteur de pourcentage. Lorsqu’un prix franchit la trajectoire, un signal de vente est généré. Lorsqu’un prix tombe en bas, un signal d’achat est généré.
Plus précisément, l’indicateur MADE contient 3 paramètres: Période de cycle, pourcentage de voie ascendante par Ab et pourcentage de voie descendante par Bl. La période de cycle détermine la longueur de la période de l’EMA. L’amplitude de la distance ascendante et descendante de l’EMA est contrôlée par le facteur de pourcentage.
Il est possible d’effectuer des opérations inversées en utilisant le commutateur inverse de l’entrée de la transaction.
La stratégie MADEFlex présente les avantages suivants:
La combinaison de l’indicateur de signal et du mécanisme d’arrêt de perte est plus fiable. L’indicateur MADE est lui-même susceptible de générer un faux signal. La combinaison de l’arrêt de perte de suivi ATR permet de filtrer efficacement une partie du bruit.
Il est possible d’ajuster les paramètres de l’indicateur MADE ainsi que les paramètres ATR pour contrôler le nombre et la qualité du signal.
Prise en charge de l’opération inverse. Les transactions inverses peuvent être effectuées via un commutateur inverse, ce qui enrichit les scénarios d’utilisation de la stratégie.
Stopper visuel Intuitif. En dessinant une ligne de stop, on peut intuitivement juger de l’effet de stop.
La stratégie MADEFlex présente également les risques suivants:
Des paramètres incorrects de l’indicateur MADE peuvent générer de nombreux signaux d’erreur. Des tests minutieux sont nécessaires pour déterminer les paramètres appropriés.
L’arrêt ATR trop souple risque de manquer une occasion d’arrêter les pertes. Il est recommandé de tester pour déterminer le bon multiple ATR.
Les opérations inverses sont plus risquées, en particulier dans des conditions de forte volatilité.
L’absence d’une protection de stop-loss peut entraîner des pertes plus importantes. Dans des cas extrêmes, l’absence de protection de stop-loss peut entraîner des pertes plus importantes.
Les stratégies MADEFlex peuvent être optimisées dans les directions suivantes:
Optimiser les paramètres MADE pour améliorer la qualité du signal. Tester différents paramètres de périodes et de pourcentages pour trouver des combinaisons de paramètres plus fiables.
Optimiser les paramètres d’arrêt ATR pour obtenir de meilleurs résultats d’arrêt. Les cycles ATR et les multiples ATR peuvent être testés pour déterminer la combinaison la plus appropriée.
Ajout d’autres conditions de filtrage pour réduire encore plus les signaux erronés. Par exemple, en combinant l’indicateur de taux d’oscillation pour un filtrage supplémentaire.
Augmentation de la stratégie de stop-loss, qui consiste à se retirer de la position de stop-loss lorsque les bénéfices atteignent un certain niveau.
Paramètres d’optimisation dynamique combinés à des méthodes d’apprentissage automatique. Paramètres d’optimisation en temps réel utilisant des méthodes telles que l’apprentissage par renforcement, rendant les stratégies plus souples.
La stratégie MADEFlex a réussi à combiner le signal de transaction de l’indicateur de la moyenne mobile des enveloppes et la méthode de suivi des pertes de la moyenne réelle. Une solution de transaction quantifiée flexible et contrôlable est réalisée par des paramètres ajustables. La stratégie est hautement fiable, puissante en termes de contrôle, adaptée à une utilisation et à une optimisation par des utilisateurs avec une certaine base de quantification.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated
// by multiplying percentage factors with their displaced expotential
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and
// quality of the signals. If a previous high goes above the envelope
// a sell signal is generated. Conversely, if the previous low goes below
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort
// The related article is copyrighted material from Stocks & Commodities Jun 2009
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)
nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')
longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)
xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) :
close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss
ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false
iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1
if longAllowed and ATRLong
strategy.entry('Long', strategy.long)
else
if ATRLong or strategy.position_size > 0
strategy.close_all()
if possig == -1
if shortAllowed and ATRShort
strategy.entry('Short', strategy.short)
else
if ATRShort or strategy.position_size < 0
strategy.close_all()
if possig == 0
strategy.close_all()
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)