
Cette stratégie est connue sous le nom de “stratégie de volatilité ATR combinée à une courte croisée entre DEMA et EMA”. Cette stratégie permet de réaliser une stratégie de négociation de courte ligne efficace en calculant les signaux de croisement entre DEMA et EMA, combinés à des indicateurs de volatilité ATR.
Calculer l’indicateur DEMA. DEMA est la moyenne mobile des doubles EMA. En calculant les doubles EMA sur une période donnée, il est possible de filtrer efficacement le bruit du marché à court terme et d’améliorer l’exactitude du signal.
Calculer l’EMA. L’EMA est une moyenne mobile indicielle qui permet de réagir plus rapidement aux variations de prix.
Calculer le taux de volatilité de l’ATR. L’ATR est un indicateur de la vraie amplitude des fluctuations, qui peut refléter la volatilité du marché et le niveau de risque.
Lorsque la DEMA est en dessous de l’EMA et que l’ATR fluctue plus que le paramètre défini, cela indique que le cours de l’action a commencé à baisser et que le marché est à court de risque.
Lorsque le DEMA remonte en EMA, cela indique que le prix a formé un support et a commencé à rebondir, auquel cas il est à l’arrêt.
La double EMA, combinée à l’EMA, permet d’améliorer efficacement la précision du signal.
L’indicateur de volatilité ATR peut exclure les signaux de whipsaw à faible risque.
Les opérations à court terme, adaptées au suivi de courte durée, permettent d’éviter la couverture à long terme.
La logique des transactions est simple, claire, facile à comprendre et à mettre en œuvre.
Une mauvaise configuration des paramètres ATR peut entraîner une perte d’opportunités de négociation.
Il est plus difficile d’opérer avec les signaux des deux côtés de l’aérodrome.
ffected by short-term market volatility.
La solution: Optimisation des paramètres, ajustement des paramètres; Simplification de la logique de négociation, en se concentrant uniquement sur les signaux unilatéraux; Amélioration appropriée de la plage de stop-loss.
Optimiser les paramètres de DEMA et d’EMA pour trouver la meilleure combinaison de paramètres
Optimiser les paramètres cycliques de l’ATR afin de déterminer les meilleures mesures de volatilité du marché.
L’ajout d’autres indicateurs auxiliaires, tels que le canal BOLL, améliore la précision du signal.
L’augmentation des règles de stop-loss et de stop-loss pour un gain plus stable.
Cette stratégie utilise les indicateurs de volatilité DEMA, EMA cross et ATR pour construire une stratégie de trading à court terme simple et efficace. La logique de négociation de la stratégie est claire, facile à utiliser et s’adapte aux transactions sur des courts-circuits à haute fréquence. La prochaine étape consiste à optimiser les paramètres et les règles.
/*backtest
start: 2023-12-08 00:00:00
end: 2024-01-07 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
// 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("Qorban: DEMA/EMA & VOL Short ONLY", shorttitle="DEMA/EMA & VOL SHORT", 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)
// get ATR VALUE
atr = atr(14)
//ATRP (Average True Price in precentage)
// 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)
slType = input(title="Stop Loss ATR / %", type=input.float, defval=5.0, step=0.1)
slMulti = input(title="SL Multiplier", type=input.float, defval=1.0, step=0.1)
minimumProfitPercent = input(title="Minimum profit %", type=input.float, defval=20.00)
// 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))
// Determine percentage of open profit
var entry = 0.0
distanceProfit = low - entry
distanceProfitPercent = distanceProfit / entry
//Determin if we have a long entry signal OR a sell position signal
profitSignal = minimumProfitPercent == 0.0 or distanceProfitPercent >= minimumProfitPercent
shortSignal = crossunder(dema1, ema1) and atrp > maFilter and strategy.position_size == 0 and not na(atr)
exitSignal = profitSignal and strategy.position_size !=0 and crossover(dema1, ema1)
// === 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)
//Invert trade direction & flipping
//tradInvert = input(defval = false, title = "invert trade direction")
//MOM_MR = input(defval=1, title = "MOM = 1 / MR = -1", minval=-1, maxval=1)
//plots=input(false, title="Show plots?")
// Get stop loss (in pips AND percentage distance)
shortStop = highest(high, 4) - (atr * slMulti)
shortStopPercent = close - (close * slMulti)
// Save long stop & target prices (used for drawing data to the chart & deetermining profit)
var shortStopSaved = 0.0
var shortTargetSaved = 0.0
enterShort = false
if shortSignal
shortStopSaved := slType ? shortStop : shortStopPercent
enterShort:= true
entry := close
// long conditions
//enterLong = crossover(dema1, ema1) and atrp < maFilter
//exitSignal => crossunder(dema1, ema1)
//Enter trades when conditions are met
strategy.entry("short", strategy.short, when=enterShort, comment="SHORT")
//place exit orders (only executed after trades are active)
strategy.exit(id="Short exit",
from_entry="short",
limit=exitSignal ? close : na,
stop=shortStopSaved,
when=strategy.position_size > 0,
comment="end short")
//short strategy
//goShort() => crossunder(dema1, ema1) and atrp > maFilter
//KillShort() => crossover(dema1, ema1)
//strategy.entry("SHORT", strategy.short, when = goShort())
//strategy.close("COVER", when = KillShort())