
La stratégie consiste principalement à identifier les tendances en calculant la double dynamique EMA et la dynamique DEMA du prix, et en combinant l’indicateur de volatilité ATR pour filtrer les fausses ruptures, pour réaliser une stratégie de négociation quantifiée avec un double indicateur de volatilité et un filtre de volatilité.
La stratégie comprend principalement les éléments suivants:
L’EMA et la DEMA sont utilisées pour calculer les prix en tant qu’indicateurs de double dynamique. Les EMA à plus longues périodes reflètent les tendances à long terme, tandis que la DEMA est utilisée comme indicateur de dynamique à court terme plus sensible.
Calculer l’indicateur de volatilité de l’ATR. Déterminer la volatilité et la liquidité du marché en fonction de la taille de l’ATR. Filtrer les signaux de l’indicateur de volatilité lorsqu’ils sont trop élevés pour éviter les fausses ruptures.
Le taux d’oscillation de l’ATR est déterminé par la paramétration de la moyenne mobile. Lorsque le taux d’oscillation de l’ATR est inférieur à la moyenne mobile, le déclenchement du signal de l’indicateur de masse mobile est autorisé.
Paramétralement contrôler la période ATR, la longueur ATR, le type et la longueur des moyennes mobiles ATR, etc.
Établissez des règles de stop loss, de stop-loss et de trace stop loss pour les positions à plusieurs têtes.
Cette stratégie de double filtrage EMA permet de réduire de manière significative les faux signaux et les transactions fréquentes de la stratégie EMA ordinaire. En ajoutant l’indicateur de volatilité ATR, il est possible de filtrer efficacement les signaux trompeurs causés par de petites fluctuations et d’éviter d’être piégé.
Comparé à un seul indicateur de dynamisme, la stratégie utilise une conception à deux indicateurs, ce qui améliore l’efficacité du jugement. DEMA est un indicateur de dynamisme à court terme plus sensible, associé à une EMA longue ligne stable, formant un signal combiné plus fiable.
En ajustant les paramètres ATR, il est possible de définir des conditions de volatilité appropriées pour les objets de différentes échelles, ce qui améliore l’applicabilité de la stratégie.
Le plus grand risque de cette stratégie réside dans le fait qu’une mauvaise configuration des paramètres peut entraîner une rareté excessive des signaux de négociation. Une configuration trop longue des longueurs DEMA et EMA ou une configuration trop élevée des limites de volatilité ATR peut affaiblir l’efficacité réelle de la stratégie. Cela nécessite des tests répétés pour s’adapter à la meilleure combinaison de paramètres.
Un autre risque potentiel est que, dans des situations extrêmes, les fluctuations de prix peuvent dépasser les contraintes des paramètres ATR et entraîner des pertes. Cela nécessite une surveillance humaine des anomalies du marché et la suspension de la stratégie.
Testez différentes combinaisons de paramètres de la dynamique pour trouver le paramètre optimal.
Essayez d’ajuster l’indicateur de dynamique du double EMA au MACD ou à un autre indicateur.
Testez différents paramètres de volatilité, tels que l’ATR historique global, l’indice de volatilité du marché, etc.
Le filtrage du volume des transactions est renforcé, afin d’éviter les risques de ruptures de prix.
L’optimisation du mécanisme d’arrêt des pertes et de l’arrêt des pertes pour améliorer les pertes et les pertes.
Cette stratégie intègre des indicateurs dynamiques et une analyse de la volatilité, conçue sur une base théorique solide. Elle peut être une stratégie de négociation quantifiée stable et fiable grâce à l’ajustement des paramètres et à l’optimisation des règles.
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 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/
// © Qorbanjf
//@version=4
strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true)
// DEMA
length = input(10, minval=1, title="DEMA LENGTH")
src = input(close, title="Source")
e1 = ema(src, length)
e2 = ema(e1, length)
dema1 = 2 * e1 - e2
plot(dema1, "DEMA", color=color.yellow)
//EMA
len = input(25, minval=1, title="EMA Length")
srb = input(close, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
ema1 = ema(srb, len)
plot(ema1, title="EMA", color=color.blue, offset=offset)
// Inputs
atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution)
atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer)
useMA = input(title = "Show Moving Average?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type")
maLength = input(defval = 20, title = "Moving Average Period", minval = 1)
//longLossPerc = input(title="Long Stop Loss (%)",
// type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
longTrailPerc = input(title="Trail stop loss (%)",
type=input.float, minval=0.0, step=0.1, defval=50) * 0.01
longProfitPerc = input(title="Long Take Profit (%)",
type=input.float, minval=0.0, step=0.1, defval=3000) / 100
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30)
atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback))
atrp = (atrValue/close)*100
// Moving Average Logic
ma(maType, src, length) =>
maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength))
// variables for enter position
enterLong = crossover(dema1, ema1) and atrp < maFilter
// variables for exit position
sale = crossunder(dema1, ema1)
// stop loss
//longStopPrice = strategy.position_avg_price * (1 - longLossPerc)
// trail stop
// Determine trail stop loss prices
longStopTrail = 0.0
longStopTrail := if (strategy.position_size > 0)
stopValue = close * (1 - longTrailPerc)
max(stopValue, longStopTrail[1])
else
0
//Take profit Percentage
longExitPrice = strategy.position_avg_price * (1 + longProfitPerc)
//Enter trades when conditions are met
strategy.entry(id="long",
long=strategy.long,
when=enterLong,
comment="long")
//
strategy.close("long", when = sale, comment = "Sell")
//place exit orders (only executed after trades are active)
strategy.exit(id="sell",
limit = longExitPrice,
stop = longStopTrail,
comment = "SL/TP")