
La stratégie de dynamique de choc est une stratégie de trading quantitative qui combine des indicateurs de dynamique aléatoires et des indicateurs relativement faibles. La stratégie utilise des indicateurs de dynamique aléatoires pour juger des zones de survente et de survente du marché, en combinaison avec des signaux de filtrage de l’indicateur RSI rapide, puis en choisissant des signaux de trading plus fiables grâce à un filtrage en entité.
L’indice de dynamique aléatoire (SMI) est un indicateur technique couramment utilisé dans les transactions quantitatives, qui combine les avantages de l’indice de dynamique et de l’indice de choc.
Plus précisément, la formule de calcul du SMI est la suivante:
SMI = (Close - (HH + LL)/2)/(0.5*(HH - LL)) * 100
Dans ce cas, HH est le prix le plus élevé des N derniers jours et LL le prix le plus bas des N derniers jours.
Ainsi, le SMI combine un jugement de tendance sur la dynamique et un jugement de revers sur les secousses. Quand le SMI est supérieur à 80, c’est un surachat, et quand il est inférieur à 20, c’est un survente. La stratégie envoie un signal de transaction dans la zone de surachat et de survente.
L’indice de force relative (RSI) est un indicateur de survente couramment utilisé. Cette stratégie utilise un RSI rapide de 7 cycles pour juger de la situation de survente à court terme.
Lorsque le RSI rapide est inférieur à 20, il s’agit d’une survente, et si il est supérieur à 80, il s’agit d’une survente. La stratégie émet un signal de transaction dans la zone de survente.
La stratégie a également ajouté un filtre d’entité, qui filtre une partie du signal en calculant la taille de l’entité de la ligne K. Un signal de transaction n’est émis que lorsque l’entité de la ligne K dépasse une certaine limite.
Cela permet de filtrer certains signaux faux et d’améliorer la fiabilité des signaux.
La stratégie est composée de trois composants: l’indicateur de dynamique aléatoire, l’indicateur RSI rapide et le filtre entérique. La combinaison de plusieurs indicateurs permet d’améliorer l’exactitude du signal et de renforcer la stabilité de la stratégie.
L’indicateur de dynamique aléatoire et l’indicateur RSI rapide permettent de déterminer avec précision l’état de survente et de survente du marché. La stratégie consiste à ouvrir une position dans une zone de survente et de survente, en suivant le principe de négociation d’achat à bas prix et de vente à haut prix.
Les stratégies permettent d’effectuer des transactions bidirectionnelles à tête nue et à tête nue, afin de maximiser les opportunités de trading sur le marché.
L’ajout d’un filtre physique permet de filtrer la plupart des bruits et d’éviter d’être bloqué lors d’une secousse.
La stratégie de négociation bidirectionnelle, avec des échanges fréquents de plusieurs têtes vides, est un point de risque potentiel. Une logique d’ouverture de position correctement optimisée peut réduire ce risque.
Lorsque l’indicateur donne un signal, il peut y avoir un grand nombre de traders à la poursuite du vent dans un court laps de temps, ce qui entraîne un risque de revers de la tendance. Ce risque peut être réduit en optimisant les paramètres de l’indicateur.
Dans des cas extrêmes, tous les modèles peuvent échouer. Ces risques doivent être maîtrisés par un arrêt de perte raisonnable.
Il est possible de tester différentes combinaisons de paramètres, tels que la période SMI, la période RSI, les seuils de filtrage des entités, pour trouver les paramètres optimaux pour améliorer le rendement de la stratégie.
La mise en place d’un mécanisme de stop-loss dynamique basé sur l’ATR ou sur la volatilité permet de mieux contrôler le risque individuel et global.
L’introduction d’algorithmes d’apprentissage automatique permettant de prédire les tendances futures des valeurs de l’indicateur à l’aide d’un modèle. Cela permet de déterminer à l’avance les points de basculement de l’indicateur et d’améliorer la prévisibilité de la stratégie.
Dans l’ensemble, la stratégie intègre des indicateurs de dynamique aléatoire, des indicateurs RSI rapides et des filtres physiques, ce qui permet d’obtenir un système de jugement de survente et de survente relativement complet. La combinaison de plusieurs indicateurs améliore l’exactitude du signal, et le mécanisme de négociation bidirectionnelle et de contrôle des risques rend la stratégie plus équilibrée.
/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Stochastic Strategy v1.1", shorttitle = "Stochastic str 1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)
//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")
//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false
//Signals
up1 = SMIsignal < -1 * limit and close < open and body and usesmi
dn1 = SMIsignal > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body
//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]
if up1 or up2
if strategy.position_size < 0
strategy.close_all()
strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()