
Cette stratégie utilise la pente des moyennes mobiles (MA) et la pente de l’indicateur de dynamique pour prendre des décisions de négociation. Elle compare la pente de la MA et la pente de la dynamique avec la barre définie et génère un signal de négociation lorsque les deux pentes dépassent la barre. La stratégie contient également un filtre à basse volatilité qui utilise un signal de production différent de la MA lorsque la volatilité du marché est faible.
Le cœur de cette stratégie consiste à comparer deux courbes d’inclinaison. Tout d’abord, elle calcule l’inclinaison de la MA et de l’indicateur de dynamique. L’inclinaison reflète la vitesse et la direction de variation de la courbe.
Par exemple, un signal d’achat est généré lorsque l’inclinaison de la MA et l’inclinaison de la dynamique sont supérieures à la trajectoire; un signal de vente est généré lorsque les deux courbes sont en descente. Cela permet de filtrer certains faux signaux.
Les filtres basse volatilité utilisent un MA à long terme pour juger de la volatilité du marché. Lorsque la volatilité est faible, les MA utilisent différents paramètres pour générer des signaux de négociation, afin de s’adapter aux différentes conditions du marché.
Cette stratégie présente les avantages suivants:
Les signaux de transaction sont réglés avec un double filtre qui permet de filtrer une partie du bruit et d’améliorer la qualité du signal.
Les filtres à basse volatilité permettent aux stratégies d’être adaptées aux différentes conditions du marché et d’être flexibles.
Il permet de personnaliser les paramètres de manière très personnalisée et d’optimiser pour les différentes variétés.
La fonction sans revêtement permet de réduire l’effet de la courbe sur les résultats.
Cette stratégie présente aussi des risques:
Le double filtrage peut filtrer une partie du signal réel, ce qui entraîne des opportunités manquées. Il peut être optimisé en ajustant les paramètres.
Le filtrage basse fréquence nécessite un test minutieux pour déterminer la valeur de seuil. Si les paramètres ne sont pas corrects, un écart de signal peut survenir.
Les paramètres de MA et d’indicateur de puissance doivent être optimisés pour des variétés spécifiques, les paramètres généraux du marché étant difficiles à déterminer.
La fonction sans revêtement ne peut pas éviter complètement les problèmes de correspondance de la courbe de rétroaction. L’effet du disque dur doit encore être vérifié.
Les paramètres hautement personnalisés rendent l’espace des paramètres plus compliqué et plus difficile à optimiser.
Cette stratégie peut être optimisée dans les directions suivantes:
Testez plus de combinaisons d’indicateurs d’AM et de dynamique pour trouver le plus approprié.
Optimiser les paramètres de longueur des MA et des indicateurs de mouvement, équilibrer le retard et le bruit.
Optimiser les paramètres de calcul de la pente pour trouver des combinaisons d’indicateurs plus stables.
Tester différents indicateurs et paramètres de faible volatilité pour améliorer la résilience.
Tests sur différentes variétés et périodes pour trouver la meilleure portée.
Construire des mécanismes d’adaptation des paramètres pour réduire le travail d’optimisation manuelle.
L’ensemble de la stratégie est une stratégie de double MA très flexible et personnalisable. Elle prend ses décisions en fonction des informations sur les prix et la dynamique, ce qui permet de filtrer efficacement les faux signaux. Le filtre à basse volatilité rend également la stratégie plus flexible et capable de s’adapter aux changements du marché.
Grâce à l’optimisation des paramètres et à l’amélioration de la sélection des indicateurs, cette stratégie peut devenir une option intéressante à considérer pour une application dans le marché réel. Elle fournit un modèle de référence pour la prise de décision de négociation en utilisant les indicateurs MA et dynamiques.
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 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/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//Inputs
matype = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc = input(close, title="MA Source", group="Moving Average")
malen = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")
//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA = sma(close, lowVolMALength)
low_vol_down = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA = sma(percent_volatility, MAlength)
bad_vol = chng_MA < Volminimum
//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])
//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))
//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3
//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor)
tilT3 = t3(masrc, malen, factor)
//MA Type
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3
//MA Slope Percentage
DeltaAvg = (avg / avg[maderiv]) - 1
SmoothedAvg = sma(DeltaAvg, masmooth)
MAout = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult
//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na
//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth)
Momout = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)
//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")
longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
strategy.entry("Buy", strategy.long)
shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
strategy.entry("Sell", strategy.short)